好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库

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

. 概述

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 进程与数据库建立连接,在这种方式下,访问效率和速度都很低,且容易引入错误。

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 用于执行对一个数据库内嵌过程的调用。

面向底层的 JDBCDriver 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 方案来说是必须的。

II. Java 与 Access 数据库 (Access2007)

2.1 加载驱动

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

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

2.2 加载数据源

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

(注意:如果你的操作系统是64位的,而Eclipse是32位的,此时你也应该用32位的ODBC,方法是:运行 C:\Windows\SysWOW64\odbcad32.exe 。 因为控制面板中打开的ODBC数据管理器默认是64位的。 否则会报错:[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配。)

控制面板 —— 管理工具 —— 数据源 (ODBC) (如图 2.1 )


图 2.1

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


图 2.2

“ 完成 ”——“ 选择 ”


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

2.3 代码实现

CODE:
public booleanlinkByUsingAccess() {
        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();
            returnfalse;
        } 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 voidtestSQLServer() {
        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";
            Stringpassword = "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();
            }
        }
} 


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 ExternalJARs.. 然后选择 jar 包即可。

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

分别加载后如图 3.1 和 3.2

图 3.1

图 3.2

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

图 3.3

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

图 3.4

3.2.2 MyEclipse 异常

提示信息: com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1368 连接到主机 localhost 的 TCP/IP 连接失败。错误 :“Connection refused: connect 。请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。确保使用了正确的 JDBC 驱动程序(注意版本) 解决方案:

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

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

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

解决方法:

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

3.2.3 SS 数据库错误:

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

解决方法:

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

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

解决方法:

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

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

解决方法:使用具有 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:
publicOracle() {
        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";
            Stringpassword = "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;
publictestMySql() {
        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";
            Stringpassword = "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连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库的详细内容...

  阅读:44次