0

0

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

php中文网

php中文网

发布时间:2016-06-07 15:33:36

|

1656人浏览过

|

来源于php中文网

原创

I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口,JDBC中包括了一组由(Java)语言书写的接口和类,它们都是独立于特定的DBMS,或者说他们可以和各种数据库相关联。 1.2 JDBC用途 JDBC由一

i. 概述

1.1 JDBC概念

JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口,JDBC中包括了一组由(Java)语言书写的接口和类,它们都是独立于特定的DBMS,或者说他们可以和各种数据库相关联。

1.2 JDBC用途

JDBC由一组Java语言编写的类和接口组成,使用内嵌式的SQL,主要实现三方面功能:建立于数据库的链接,执行SQL声明以及处理SQL执行结果;JDBC支持基本的SQL功能,使用它可以方便地与不同的关系型数据库建立联系,进行相关操作,并无需再为不同的DBMS分别编写程序。

在JDBC出现之前,通过Java访问数据库唯一方法是利用Java输入输出流访问iruwuqi端的CGI程序,通过CGI程序访问和操作数据库并得到结果。每一次访问都会由Web服务器启动一个新的CGI进程与数据库建立连接,在这种方式下,访问效率和速度都很低,且容易引入错误。

立即学习Java免费学习笔记(深入)”;

1.3 JDBC结构和特点

简单的说,JDBC能完成下列三件事:

  • 与一个数据库建立连接;
  • 向数据库发送SQL语句;
  • 处理数据库返回的结果。

JDBC包含两部分与数据库独立的API:面向程序开发人员的JDBC API和面向底层的JDBC Driver API。

面向程序开发人员的JDBC API被描述成聚集抽象的Java接口,通过这些接口应用程序可以对某个数据库打开连接,执行SQL语句并且处理结构。最重要的接口有如下几种:

  • java.sql.DriverManager: 处理驱动的调入并且对产生新的数据库连接提供支持
  • java.sql.Connection: 代表队特定数据库的连接
  • java.sql.Statement: 代表一个特定的容器, 来对一个特定的数据库执行SQL语句
  • java.sql.ResultSet: 控制对一个特定语句进行数据的存取

其中java.sql.Statement又有两个子类:java.sql.PreparedStatement用于执行预编译的SQL语句和java.sql.CallableStatement用于执行对一个数据库内嵌过程的调用。

面向底层的JDBC Driver API 主要是针对数据库厂商开发数据库底层驱动程序使用的,一般情况下用于开发应用程序的程序员用不到这些类库。Java的应用程序员通过SQL包中的定义的一系列抽象类对数据库进行操作,而实现这些抽象类并完成实际操作的是数据库驱动器Driver运行的。

1.4 JDBC与其他的API

处理JDBC之外,到目前为止,微软的ODBC可能是用的最为广泛的访问关系数据库的API,甚至比JDBC的应用更加广泛,它提供了连接几乎任何一种平台、任何一种数据库的能力。当然也可以在java中直接使用ODBC,在JDBC的协助下,用JDBC-ODBC桥接器实现。但是为什么要用JDBC呢?

  • ODBC并不适合在Java中直接使用。
  • 完全精确地实现从C代码ODBC到Java API编写的JDBC的翻译也并不令人满意。
  • ODBC并容易学习,它将简单和复杂特性混杂,。
  • JDBC这样的Java API 对于纯Java方案来说是必须的。

 版本即平台声明:JDK   1.7

MyEclipse   7.5

Access   2007

Sql Server  2008

MySql   5.1

Oracle  9i

平台 Windows XP SP3

 


II. Java与Access数据库(Access2007)

2.1 加载驱动

引入相应的类和包,使用JDBC的源程序都需要输入java.sql包,必要的时候还需要载入JDBC-ODBC驱动包:

import sun.jdbc.odbc.JdbcOdbcDriver必要的话引入javax.sql。

2.2 加载数据源

这里所谓的数据源就是用Access建立的数据库文件。假设该源名为IProducts.mdb。按照以下步骤:

控制面板——管理工具——数据源(ODBC)  (如图2.1)Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异图2.1 

打开ODBC Data Source Administrator对话框——选择系统DSN(不选用户DSN,因为系统DSN可以避免调试时候出现权限问题),然后“添加”,在弹出的页面选择Microsoft Access Driver(装了2007,可以选*.mdb, *.accdb)(如图2.2)

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

图2.2

“完成”——“选择”

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

图2.3

在右边选择要添加的数据库文件,“数据源名”里填写“IProducts”(这个随意填写,不过要记住后面要用到的)。

2.3 代码实现

CODE:

public boolean linkByUsingAccess() {
        Statement stat = null;
        Connection con = null;
        ResultSet rs = null;
        try {
            // 加载JDBC驱动
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            // 创建数据库连接
            con = DriverManager.getConnection("jdbc:odbc:IProducts", "","");

        // 没有设置密码,所以用户名和密码留空

            String sql = "select * from devil_lang_map";
            stat = con.createStatement();
            rs = stat.executeQuery(sql);
            int i = 97;
            while (rs.next()) {
                String value = rs.getString("human");
                treeMap.put(((char) i++) + "", value);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
                return false;
            }
        }
        return true;
    }

2.4 注意

2.4.1 在装载驱动时(执行Class.forName()),驱动将自动向JDBC注册自己。需要注意的是,使用Class.forName()方法可能抛出一个ClassNotFoundException异常,所以在驱动程序类有可能不存在时,会抛出这个异常。

2.4.2 打开连接于数据库建立连接的标准方法是调用DriverManager.getConnection。该方法接收含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,知道找到可与URL中指定的数据库进行连接的驱动程序为止,Driver Manager的getConnection方法使用这个URL来建立市级的链接。

2.4.3 JDBC URL的标准语法由三部分组成,各部分间用冒号分隔,例如jdbc::

  • jdbc——协议。JDBC URL中的协议总是JDBC;
  • ——驱动程序名或数据库连接机制(可以一个或多个驱动程序支持)。子协议名的典型事例是odbc,该名称是为用于指定ODBC风格的数据资源名称的URL专门保留的。例如,为了通过JDBC-ODBC桥来访问某个数据库。
  • ——一种标识数据库的方法。

 


III. Java与SQL Server数据库(SQL Server2008)

(注:为方便起见,下面的Sql Server一律以SS代替)

3.1 连接代码与语句分析

3.1.1 重要语句功能简述

Class.forName(“xxx”);

JDBC中已经有多个驱动,此句话是遍历系统中已经注册的驱动程序,直到找到一个正确的驱动程序。

Connection con = DriverManager.getConnection(url);

如果无法获得连接,程序将会抛出一个异常,所以如果程序已经执行到这里,说明已经连接成功。

3.1.2 代码

CODE:

public void testSQLServer() {
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //DriverManager.setLogStream(System.out);
            String url = "jdbc:sqlserver://localhost:1492;databasename=javaDB";
            String user = "JavaDB";
            String password = "8316051";
            con = DriverManager.getConnection(url, user, password);
            stat = con.createStatement();
            String sql = "select * from currentdb";
            rs = stat.executeQuery(sql);
            while(rs.next()) {
                System.out.println("DB_Name: " + rs.getString("NAME"));
                System.out.println("DB_Corporation: " + rs.getString("CORPORATION"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
}

Pic Copilot
Pic Copilot

AI时代的顶级电商设计师,轻松打造爆款产品图片

下载

3.2 Sql Server 2008错误解决与MyEclipse连接SS异常解决

3.2.1 驱动引导问题

首先,从官网上下载驱动:http://www.microsoft.com/downloadS/details.aspx?familyid=99B21B65-E98F-4A61-B811-19912601FDC9&displaylang=zh-cn

此驱动同时支持SS2000, SS2005, SS2008。

加载方法在工程上右键——Properties——Java Build Path——Libraries——Add External JARs..然后选择jar包即可。

驱动中有两个jar包sqljdbc.jar和sqljdbc4.jar。

分别加载后如图3.1和3.2

 

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

 

 

 

图3.1

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

图3.2

然而加载sqljdbc.jar后连接数据库提示如下异常:(图3.3)

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

图3.3

后来移除了sqljdbc.jar(移除方法同加载方法,只是选择不同而已),加载sqljdbc4.jar,连接SS数据库只需要将包引入,而不需显示地将包import。(如图3.4)

Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异

图3.4

3.2.2 MyEclipse异常

提示信息:com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1368 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。”。

解决方案:

  • 检查驱动连接语句“con = DriverManager.getConnection(url, user, password);“一句中的端口号是否与Sql Server Configuration Manager中的TCP/IP里面设置的TCP端口一致;
  • 在cmd中输入”telnet localhost port”来检查某个端口是否已经开启,如果提示无法开启端口,则证明该端口由于某种原因无法开启。禁用TCP/IP服务,然后重启;
  • 重启Sql Server服务(Express版本显示为Sql Server(Express))。

提示信息:com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'JavaDB' 登录失败。

分析:程序能够运行到此,证明数据库加载正确。

解决方法:

  • 用户名或密码错误;
  • 数据库中不存在此用户。

 

3.2.3 SS数据库错误:

提示信息:已成功与服务器建立连接,但是在登录过程中发生错误。   (provider:   共享内存提供程序,   error:   0   -   管道的另一端上无任何进程。) 

解决方法:

  • 选中服务器(右键)->属性->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式";
  • 展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用;
  • 重启Sql Server服务即可。(注:必须重启才能见效);
  • 重启Microsoft SQL Server Management Studio(不是必须的)。

问题描述:在登录时无法打开默认数据库

解决方法:

此问题与上一个问题有所关联。是没有设置“用户映射”数据库。用另外一个可用的用户登录,然后选择“安全性”——“登录名”——“用户映射”,选择一个数据库。

问题描述:使用新建的账户登录之后发现数据库中只有系统数据库,刷新提示“无法为该请求检索数据”

解决方法:使用具有sysadmin权限的账户登录,然后在“安全性”——“登录名”中右键点新用户的用户名,在弹出的“登录属性”对话框中选择“服务器角色”,选择“sysadmin”。此时刷新新用户,就会看到其他的数据库。如果要设置新用户的owner,则在“登录属性”对话框中选择“用户映射”,选中要设置的数据库,选中下面的“db_owner”即可。

3.2.4 创建一个新账户

在一个具有sysadmin权限的账户中点击“安全性”——“登录名“右键点击,然后在用户名一栏输入用户名,选择Windows认证或者Sql Server认证,然后输入密码(Windows认证不需要),取消密码过期一项,在最底下选择数据库和语言,然后确认。

 


IV. Java与Oracle数据库

4.1 加载驱动

该驱动所在位置是:

Oracle安装目录——Ora92——lib——ojdbc14.jar

注:如果不加载驱动,则异常为:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

4.2 连接代码

CODE:

public Oracle() {
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@localhost:1521:Jason";
            String user = "scott";
            String password = "tiger";
            con = DriverManager.getConnection(url, user, password);
            stat = con.createStatement();
            String sql = "select * from emp";
            rs = stat.executeQuery(sql);
            while(rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
}

 

 


V. Java与My SQL

5.1 加载驱动

加载驱动:mysql-connector-java-5.1.5-bin.jar

5.2 代码

CODE;

public testMySql() {
        Connection con = null;
        Statement stat = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/datang";
            String user = "root";
            String password = "admin";
            con = DriverManager.getConnection(url, user, password);
            stat = con.createStatement();
            String sql = "select * from t_admin";
            rs = stat.executeQuery(sql);
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stat != null) {
                    stat.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
}

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.5万人学习

C# 教程
C# 教程

共94课时 | 6.7万人学习

Java 教程
Java 教程

共578课时 | 46万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号