搞定J2EE核心技术与企业应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

7.2 JDBC基础应用——数据库连接

本节首先通过一个简单的数据连接示例,使读者能够快速了解JDBC的相关知识,然后再详细讲解JDBC的核心机制。

7.2.1 JDBC数据连接示例

本示例的大体思路是:首先在MySQL数据库服务器中创建包含有用户表user的数据库myRegister,然后搭建项目目录并导入JDBC驱动程序,最后编写操作数据库表格的代码。

01 首先在MySQL中建立一个数据库,名为myRegister,该数据库下有一个存储用户基本信息的表,表名为user,主要字段有id、username(用户名)和password(密码),主键为id。具体的建立方法参看前面的章节。最终生成的user表结构如图7.9所示。

图7.9 user表结构

02 新建一个Java项目TestJDBC,其具体设置如图7.10所示,接着新建一个Class文件JDBCExample,其具体设置如图7.11所示。

图7.10 新建TestJDBC项目

图7.11 新建JDBCExample文件

03 通过7.1.2节介绍的JDBC配置方法,在本项目中加载JDBC。创建完成后该项目的具体目录结构如图7.12所示。

图7.12 目录结构

04 创建的JDBCExample文件演示了通过MySQL的JDBC驱动程序,连接到MySQL数据库的myRegister数据库,并输出该数据库中user表的内容,该文件的具体内容如下:

      //******* JDBCExample.java **************
      //引入包
      import java.sql.DriverManager;
      import java.sql.Connection;
      import java.sql.Statement;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      public class JDBCExample {
      public static void main(String[] args) {
          try {
              //加载MySQL数据库驱动程序
              Class.forName("com.mysql.jdbc.driver");
              String url = "jdbc:mysql://hostname:3306/myRegister?user=root&password=root";
              Connection conn=DriverManager.getConnection(url);   //创建数据库连接
              Statement stmt=conn.createStatement();            //获取陈述对象
              ResultSet rs=stmt.executeQuery("select*from user");  //返回ResultSet对象
              //遍历ResultSet对象中的各个字段
              while (rs.next()) {
                  System.out.print("用户的编号: " + rs.getInt(1));
                  System.out.print("\t用户的名字: " + rs.getString(2));
                  System.out.print("\t用户的密码: " + rs.getString(3));
              }
              rs.close();
              stmt.close();
              conn.close();
          } catch (ClassNotFoundException e) {
              System.out.println("找不到指定的驱动程序类!");
          } catch (SQLException e) {
              e.printStackTrace();
          }
      }

运行结果:

      用户的编号:1  用户的名字:张  用户的密码:0

7.2.2 典型的JDBC数据连接的步骤

一个典型的JDBC数据连接的代码如下:

      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver ");
      String url = " jdbc:microsoft:sqlserver://192.168.0.1;DatabaseName=testDb ";
      Connection con = DriverManager.getConnection(url,"sa","sa");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("select * from test");
      While(r.next()){
          String s=r.getString("username");
      }

代码说明:

● Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"),表示在建立连接之前首先要加载对应数据库的驱动程序,如果要连接的是DB2数据库,则相应的代码是Class.forName("com.ibm.db2.jcc.DB2Driver")。

● Connection con = DriverManager.getConnection(url,"sa","sa"),表示建立数据库连接,要传入连接的地址、数据库的用户名和密码,本示例中连接的具体地址是url="jdbc:microsoft:sqlserver://192.168.0.1;DatabaseName=testDb "。

● Statement stmt = con.createStatement(),表示创建Statement对象,用于将SQL语句发送到数据库中。JDBC中共有3个类具有类似的功能:Statement、PreparedStatement和CallableStatement。Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库存储过程的调用。

● ResultSet rs = stmt.executeQuery("select * from test"),Statement对象提供了3种执行SQL语句的方法:executeQuery、executeUpdate和execute。executeQuery方法用于产生结果集的语句;executeUpdate方法用于执行INSERT、UPDATE或DELETE语句及数据定义语句,executeUpdate的返回值是一个整数,表示INSERT、UPDATE或DELETE时更新成功的个数,对于数据定义语句,executeUpdate的返回值总为零;execute方法用于执行能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的语句。

● ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法,提供了对这些行中数据的访问。ResultSet.next方法用于移动到ResultSet中的下一行,使下一行成为当前行。

● String s=r.getString("username"),表示获取数据库表中字段名为username的字段值。下面演示了各种数据库使用JDBC连接的方式。

(1)Oracle 8/8i/9i数据库(thin模式):

      Class.forName("oracle.JDBC.driver.OracleDriver").newInstance();
      String url="JDBC:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID
      String user="test";
      String password="test";
      Connection conn= DriverManager.getConnection(url,user,password);

(2)DB2数据库:

      Class.forName("com.ibm.db2.jcc.DB2Driver ")
      String url="JDBC:db2://localhost:5000/testDb"; //testDb为数据库名
      String user="admin";
      String password=" admin ";
      Connection conn= DriverManager.getConnection(url,user,password);

(3)MySQL数据库:

      Class.forName("org.gjt.mm.mysql.Driver");
      String url ="JDBC:mysql://localhost/ testDb?user=root&password=sa&useUnicode=true&character
  Encoding=8859_1"
      Connection conn= DriverManager.getConnection(url);

(4)SQL Server 2000数据库:

      Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver") ;
      String url="JDBC:microsoft:sqlserver://localhost:1433;DatabaseName=testDb";
      String user="sa";
      String password="sa";
      Connection conn= DriverManager.getConnection(url,user,password);

(5)PostgreSQL数据库:

      Class.forName("org.postgresql.Driver");
      String url ="JDBC:postgresql://localhost/ testDb "
      String user="postgres";
      String password=" postgres ";
      Connection conn= DriverManager.getConnection(url,user,password);

(6)Access数据库:

      Class.forName("sun.JDBC.odbc.JDBCOdbcDriver") ;
      String url="JDBC:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath
  ("/Data/testDb.mdb");
      Connection conn = DriverManager.getConnection(url,"","");

(7)Sybase数据库:

      Class.forName("com.sybase.JDBC.SybDriver");
      String url =" JDBC:sybase:Tds:localhost:5007/ testDb ";
      Properties sysProps = System.getProperties();
      SysProps.put("user","userid");
      SysProps.put("password","user_password");
      Connection conn= DriverManager.getConnection(url, SysProps);

(8)Informix数据库:

      Class.forName("com.informix.JDBC.IfxDriver");
      String url = "JDBC:informix-sqli:// localhost:1533/ testDb:INFORMIXSERVER=myserver;
      user=testuser;password=testpassword";
      Connection conn= DriverManager.getConnection(url);