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);