- 搞定J2EE核心技術(shù)與企業(yè)應(yīng)用
- 常建功 王向華編著
- 1315字
- 2018-12-29 13:50:09
7.2 JDBC基礎(chǔ)應(yīng)用——數(shù)據(jù)庫連接
本節(jié)首先通過一個(gè)簡單的數(shù)據(jù)連接示例,使讀者能夠快速了解JDBC的相關(guān)知識(shí),然后再詳細(xì)講解JDBC的核心機(jī)制。
7.2.1 JDBC數(shù)據(jù)連接示例
本示例的大體思路是:首先在MySQL數(shù)據(jù)庫服務(wù)器中創(chuàng)建包含有用戶表user的數(shù)據(jù)庫myRegister,然后搭建項(xiàng)目目錄并導(dǎo)入JDBC驅(qū)動(dòng)程序,最后編寫操作數(shù)據(jù)庫表格的代碼。
01 首先在MySQL中建立一個(gè)數(shù)據(jù)庫,名為myRegister,該數(shù)據(jù)庫下有一個(gè)存儲(chǔ)用戶基本信息的表,表名為user,主要字段有id、username(用戶名)和password(密碼),主鍵為id。具體的建立方法參看前面的章節(jié)。最終生成的user表結(jié)構(gòu)如圖7.9所示。

圖7.9 user表結(jié)構(gòu)
02 新建一個(gè)Java項(xiàng)目TestJDBC,其具體設(shè)置如圖7.10所示,接著新建一個(gè)Class文件JDBCExample,其具體設(shè)置如圖7.11所示。

圖7.10 新建TestJDBC項(xiàng)目

圖7.11 新建JDBCExample文件
03 通過7.1.2節(jié)介紹的JDBC配置方法,在本項(xiàng)目中加載JDBC。創(chuàng)建完成后該項(xiàng)目的具體目錄結(jié)構(gòu)如圖7.12所示。

圖7.12 目錄結(jié)構(gòu)
04 創(chuàng)建的JDBCExample文件演示了通過MySQL的JDBC驅(qū)動(dòng)程序,連接到MySQL數(shù)據(jù)庫的myRegister數(shù)據(jù)庫,并輸出該數(shù)據(jù)庫中user表的內(nèi)容,該文件的具體內(nèi)容如下:
//******* 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數(shù)據(jù)庫驅(qū)動(dòng)程序 Class.forName("com.mysql.jdbc.driver"); String url = "jdbc:mysql://hostname:3306/myRegister?user=root&password=root"; Connection conn=DriverManager.getConnection(url); //創(chuàng)建數(shù)據(jù)庫連接 Statement stmt=conn.createStatement(); //獲取陳述對(duì)象 ResultSet rs=stmt.executeQuery("select*from user"); //返回ResultSet對(duì)象 //遍歷ResultSet對(duì)象中的各個(gè)字段 while (rs.next()) { System.out.print("用戶的編號(hào): " + 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("找不到指定的驅(qū)動(dòng)程序類!"); } catch (SQLException e) { e.printStackTrace(); } }
運(yùn)行結(jié)果:
用戶的編號(hào):1 用戶的名字:張 用戶的密碼:0
7.2.2 典型的JDBC數(shù)據(jù)連接的步驟
一個(gè)典型的JDBC數(shù)據(jù)連接的代碼如下:
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"),表示在建立連接之前首先要加載對(duì)應(yīng)數(shù)據(jù)庫的驅(qū)動(dòng)程序,如果要連接的是DB2數(shù)據(jù)庫,則相應(yīng)的代碼是Class.forName("com.ibm.db2.jcc.DB2Driver")。
● Connection con = DriverManager.getConnection(url,"sa","sa"),表示建立數(shù)據(jù)庫連接,要傳入連接的地址、數(shù)據(jù)庫的用戶名和密碼,本示例中連接的具體地址是url="jdbc:microsoft:sqlserver://192.168.0.1;DatabaseName=testDb "。
● Statement stmt = con.createStatement(),表示創(chuàng)建Statement對(duì)象,用于將SQL語句發(fā)送到數(shù)據(jù)庫中。JDBC中共有3個(gè)類具有類似的功能:Statement、PreparedStatement和CallableStatement。Statement對(duì)象用于執(zhí)行不帶參數(shù)的簡單SQL語句;PreparedStatement對(duì)象用于執(zhí)行帶或不帶IN參數(shù)的預(yù)編譯SQL語句;CallableStatement對(duì)象用于執(zhí)行對(duì)數(shù)據(jù)庫存儲(chǔ)過程的調(diào)用。
● ResultSet rs = stmt.executeQuery("select * from test"),Statement對(duì)象提供了3種執(zhí)行SQL語句的方法:executeQuery、executeUpdate和execute。executeQuery方法用于產(chǎn)生結(jié)果集的語句;executeUpdate方法用于執(zhí)行INSERT、UPDATE或DELETE語句及數(shù)據(jù)定義語句,executeUpdate的返回值是一個(gè)整數(shù),表示INSERT、UPDATE或DELETE時(shí)更新成功的個(gè)數(shù),對(duì)于數(shù)據(jù)定義語句,executeUpdate的返回值總為零;execute方法用于執(zhí)行能返回多個(gè)ResultSet對(duì)象、多個(gè)更新計(jì)數(shù)或ResultSet對(duì)象與更新計(jì)數(shù)的語句。
● ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法,提供了對(duì)這些行中數(shù)據(jù)的訪問。ResultSet.next方法用于移動(dòng)到ResultSet中的下一行,使下一行成為當(dāng)前行。
● String s=r.getString("username"),表示獲取數(shù)據(jù)庫表中字段名為username的字段值。下面演示了各種數(shù)據(jù)庫使用JDBC連接的方式。
(1)Oracle 8/8i/9i數(shù)據(jù)庫(thin模式):
Class.forName("oracle.JDBC.driver.OracleDriver").newInstance(); String url="JDBC:oracle:thin:@localhost:1521:orcl"; //orcl為數(shù)據(jù)庫的SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password);
(2)DB2數(shù)據(jù)庫:
Class.forName("com.ibm.db2.jcc.DB2Driver ") String url="JDBC:db2://localhost:5000/testDb"; //testDb為數(shù)據(jù)庫名 String user="admin"; String password=" admin "; Connection conn= DriverManager.getConnection(url,user,password);
(3)MySQL數(shù)據(jù)庫:
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數(shù)據(jù)庫:
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數(shù)據(jù)庫:
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數(shù)據(jù)庫:
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數(shù)據(jù)庫:
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數(shù)據(jù)庫:
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);
- SCRATCH與機(jī)器人
- Docker Quick Start Guide
- 現(xiàn)代機(jī)械運(yùn)動(dòng)控制技術(shù)
- 大數(shù)據(jù)處理平臺(tái)
- 數(shù)據(jù)掘金
- 單片機(jī)技術(shù)一學(xué)就會(huì)
- Excel 2010函數(shù)與公式速查手冊(cè)
- Unity Multiplayer Games
- 智能制造系統(tǒng)及關(guān)鍵使能技術(shù)
- 生成對(duì)抗網(wǎng)絡(luò)項(xiàng)目實(shí)戰(zhàn)
- Photoshop CS4數(shù)碼照片處理入門、進(jìn)階與提高
- 電動(dòng)汽車驅(qū)動(dòng)與控制技術(shù)
- 精通ROS機(jī)器人編程(原書第2版)
- 巧學(xué)活用Linux
- 輸送技術(shù)、設(shè)備與工業(yè)應(yīng)用