上篇博客初步介绍了JDBC,并简单提到了连接数据库的4种不同驱动方式:
(1)JDBC-ODBC桥驱动
(2)纯Java驱动
(3)本地API部分Java驱动
(4)JDBC网络纯Java驱动
本篇博客通过两个小实例,来介绍JDBC-ODBC桥驱动方式和纯Java驱动方式,从而进一步了解JDBC的工作步骤和机制。
JDBC工作步骤:
(1)建立数据源
(2)加载驱动程序
(3)获得连接对象
(4)创建语句对象
(5)执行Sql语句
(6)关闭资源
1,JDBC-ODBC桥驱动方式
(1)建立数据源
首先建立ODBC数据源:
【开始】→ 【设置】→ 【控制面板】→【管理工具】→【数据源(ODBC)】
新建数据源,名称可以任意,这里假设已经建立了一个名为myODBC的数据源,连接到oracle中的orcl数据库。
(2)加载驱动程序
- 使用Class类的forName方法,将驱动程序类加载到JVM(Java虚拟机)中;
-
方 法 原 型
说 明
static Class forName(String className)
throws ClassNotFoundException
将由className指定完整名称的类加载到JVM中,如果加载失败,将抛出异常,必须捕捉
- 对于使用JDBC-ODBC桥的驱动方式,应该加载:
sun.jdbc.odbc.JdbcOdbcDriver类
- 如:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
(3)获得连接对象
- 成功加载驱动后,必须使用DriverManager类的静态方法getConnection来获得连接对象;
-
方 法 原 型
说 明
static Connection getConnection
(String url, String user,
String password)
throws SQLException
参数url是连接字符串,参数user是数据库用户名,参数password是登录口令,成功连接到数据库返回Connection对象,连接失败则抛出SQLException异常,必须捕捉
- 对于使用JDBC-ODBC桥的连接方式,连接字符串的一般形式是:“jdbc:odbc:数据源名称”,如:
Connection con =
DriverManager.getConnection("jdbc:odbc:myODBC", “scott", “tiger");
(4)创建语句对象
- 一旦成功连接到数据库,获得Connection对象后,必须通过Connection对象的createStatement方法来创建语句对象,才可以执行SQL语句;
-
方 法 原 型
说 明
Statement createStatement()
throws SQLException
成功创建返回Statement对象,否则抛出SQLException异常,必须捕捉
- 如:
Statement sta = con.createStatement();
(5)执行sql语句
- 使用语句对象来执行SQL语句,有两种情况:
- 一种是执行DELETE、UPDATE和INSERT之类的数据库操作语句(DML),这样的语句没有数据结果返回,使用Statement对象的executeUpdate方法执行;
-
方 法 原 型
说 明
int executeUpdate(String sql)
throws SQLException
参数sql是要执行的SQL语句,执行成功返回受影响的行数,执行失败则抛出SQLException异常,必须捕捉
- 如:
sta.executeUpdate("INSERT INTOFriends VALUES('田七', '重庆', 456712, '2003-2-25',7500)");
- 另一种是执行SELECT这样的数据查询语句(DQL),这样的语句将从数据库中获得所需的数据,使用Statement对象的executeQuery方法执行;
-
方 法 原 型
说 明
ResultSet executeQuery(String sql)
throws SQLException
参数sql是要执行的SQL语句,查询成功返回包含有结果数据的ResultSet对象,否则抛出SQLException异常,必须捕捉
- 如:
ResultSet rs =
sta.executeQuery("SELECT * FROM Friend");
(6)关闭资源
- 当对数据库的操作结束后,应当将所有已经被打开的资源关闭,否则将会造成资源泄漏;
- Connection对象、Statement对象和ResultSet对象都有执行关闭的close方法;
- 函数原型都是:void close() throws SQLException
- 如:
rs.close(); //关闭ResultSet对象
sta.close(); //关闭Statement对象
con.close(); //关闭Connection对象
- 有可能抛出SQLException异常,必须捕捉;
- 请注意关闭的顺序,最后打开的资源最先关闭,最先打开的资源最后关闭。
完整例子:
import java.sql.*; //导入java.sql包
public class JDBCDemo {
public static void main(String[] args){
String strCon = "jdbc:odbc:myODBC"; //连接字符串
String strUser = “scott"; //数据库用户名
String strPwd = “tiger"; //口令
System.out.println("正在连接数据库...");
try{ //监控异常
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动程序
Connection con;
//获得连接对象
con = DriverManager.getConnection(strCon, strUser, strPwd);
System.out.println("成功连接到数据库。");
Statement sta = con.createStatement(); //创建语句对象
//执行SQL语句
String strSql = "DELETE FROM Friends WHERE [Name] = '郑六'";
intcount = sta.executeUpdate(strSql);
System.out.println("成功删除" + count + "行数据。");
sta.close(); con.close(); //关闭所有已经打开的资源
} catch (ClassNotFoundException cnfe) {cnfe.printStackTrace(); }
catch(SQLException sqle) { sqle.printStackTrace(); } }
2,纯java驱动方式
使用JDBC-ODBC桥方式连接数据库,其性能完全取决于数据源(ODBC)的性能,并且无法脱离Microsoft的平台,这样将带来不便;
大部分DBMS产商都为自己的产品开发了纯Java的驱动程序,我们只需要加载相应的驱动,就可以直接连接到数据库,而无需通过ODBC桥连接;
鉴于DBMS产品太多,这里只针对当今比较流行的SQL Server 2000和Oracle 9i进行介绍。
(1)下载驱动程序包
要使用纯Java驱动,首先必须获得相应数据库的驱动程序包;
根据数据库的类型,登录对应产商的官方网站,一般都可以免费获得;
下载后,复制到本地磁盘,并将完整路径设置到classpath环境变量中,如用开发工具开发程序,还需在开发环境中设置路径。
(2)纯java驱动连接Oracle
使用纯Java驱动连接到Oracle 9i数据库,加载驱动程序应改成如下语句:
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
连接字符串应如下格式:
"jdbc:oracle:thin:@服务名或IP:1521:数据库名"
如:
Connection con =DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORA", "scott", "tiger");
Connection con =DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORA", "scott", "tiger");
(3)纯java驱动连接Sql Server
使用纯Java驱动连接到SQL Server 2005数据库,加载驱动程序应改成如下语句:
Class.forName("com.microsoft. Sqlserver.jdbc.SQLServerDriver");
Class.forName("com.microsoft. Sqlserver.jdbc.SQLServerDriver");
连接字符串应如下格式:
"jdbc:microsoft:sqlserver://服务器名或IP:1433;databaseName=数据库名"
如:Connection con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=pubs", "sa", "");
Connection con = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=pubs", "sa", "");
(4)纯java驱动连接mysql
使用纯Java驱动连接到SQL Server 2005数据库,加载驱动程序应改成如下语句:
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");
连接字符串应如下格式:
"jdbc:mysql://服务器名或IP:3306/数据库名"
如:
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs", "root" , "root");