一个网络关系数据库应用系统是一个三层次结构。客户机与服务器采用网络连接,客户机端应用程序按通信协议与服务器端的数据库程序通信;数据库服务程序通过SQL命令与数据库管理系统通信。
Java程序与数据库连接方法有两种。一种是使用JDBC-ODBC桥接器与数据库连接,一种是用纯Java的JDBC驱动程序实现与数据库连接。
Java程序使用JDBC-ODBC 桥接器与数据库连接,Java程序与数据库通信的过程是:
先由数据库应用程序向ODBC驱动管理器发出API调用,ODBC驱动管理器将这个调用转换成向数据库管理系统的ODBC驱动程序调用,数据库管理系统又将这个调用转换成对操作系统的数据输入/输出调用。最后,操作系统从数据库中得到实际数据逐级返回。
数据库编程首先要设置数据源,在ODBC中设置数据源的步骤如下:
数据源就是数据库,在设定了数据源的基础上,Java程序要访问数据库表,还要建立JDBC-ODBC桥接器,让程序与数据库连接。以后,程序就可向数据库发送SQL语句,处理数据库返回的结果。Java数据库连接JDBC(Java DataBase Connectivity)由一组用Java语言编写的类和接口组成,JDBC是Java程序与数据库连接API。它能做以下三件事情:与某个数据库建立连接、向数据库发送SQL语句和处理数据库返回的结果。
调用类方法Class.forName(String s)能建立JDBC-ODBC桥接器。例如,代码:
1 try{ 2 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 3 }catch(Exception e){}
为Java程序加载了驱动程序。
【例 13-7】说明与数据库连接的方法connectByJdbcOdbc(),该方法按给定的数据库URL、用户名和密码连接数据库,如果连接成功,方法返回连接对象,连接不成功,则返回空。
1 public static connection connectByjdbcOdbc(String url, String username, String password){ 2 Connection con = null; 3 try{ 4 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载ODBC驱动程序 5 } 6 catch (Exception e){ 7 e.printStackTrace(); 8 return null; //连接失败 9 } 10 try{ 11 con = DriverManager.getConnection(url, username, password); 12 } 13 catch (SQLExceotuib e){ 14 e.printStackTrace(); 15 return null; //连接不成功 16 } 17 return con; //连接成功 18 } 19 20 以下代码是对connectByJdbcOdbc()方法的一个调用,数据库连接成功,弹出数据库连接成功信息窗,否则弹出数据库连接不成功信息窗。 21 if ((con = connectByJdbcOdbc("jdbc:odbc:redsun", "xia", "1234")) != null){ 22 JoptionPane.showMessageDialog(null, "数据库连接成功"); 23 try{ 24 con.close(); 25 con = null; 26 } 27 catch (SOLException e){} 28 } 29 else 30 JOptionPane.showMessageDialog(null, "数据库连接失败");
Java程序也可以用纯Java的JDBC驱动程序实现与数据库连接。这种方法应用较广泛,但是需要下载相应的驱动程序包,因为不同的数据库的连接代码可能不同,连接不同的数据库,加载的驱动程序也可能不同。例如,连接SQLServer的驱动程序在www.msdn.com网站下载,有3个包:msbase.jar,mssqlserver.jar和msutil.jar,并要求将这3个包放在jdk/jre/lib/ext/目录下,或在CLASSPATH中设置其放置位置。
使用纯Java的JDBC驱动程序实现与数据库连接的过程如下:
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
jdbc:subProtocol:subName://hostname:port:Databasename=XX其中,subprotocol是某种驱动程序支持的数据库连接机制; subName是当前连接机制下的具体名称;hostName是主机名;port是相应的连接端口;DatabaseName是要连接的数据库名称。例如,以下代码可以是一个数据库的URL:
jdbc:Microsoft:sqlserver://localhost:1433;Databasename=ksinfo该数据库的URL说明利用miscrosoft提供的机制,用sqlserve驱动,通过1433端口访问本机上的ksInfo数据库。
【例 13-8】说明与数据库连接的静态方法connectByJdbc(),该方法按给定的数据库URL、用户名和密码连接数据库,如果连接成功,方法返回true,连接不成功,则返回false。
1 public static Connection conectByJdbc(String url, String username, String password){ 2 Connection con = null; 3 try{ 4 Class.forName( //加载特定的驱动程序 5 "com.microsoft.jdbc.sqlserver.SQLServerDriver"); 6 } 7 catch (Exception e){ 8 e.printStackTrace(); 9 return null; //连接失败 10 } 11 try{ 12 con = DriverManage.getConnection(url, username, password); 13 } 14 catch (SQLException e){ 15 e.printStackTrace(); 16 return null; //连接失败 17 } 18 return con; //连接成功 19 }