2.4、JDBC程序的代碼模板
?????? 開發一個JDBC應用程序,基本需要以下步驟:
(1)、把JDBC驅動類裝載入Java虛擬機中,為此,可使用Class.forName()方法,此方法將給定的類加載到Java虛擬機中。如果系統中不存在給定的類,則會引發異常,異常類型為ClassNotFoundException。
???????? Class.forName(“JDBC驅動類的名稱”);
?
(2)、加載驅動,并與數據庫建立連接。DriverManager類跟蹤已注冊的驅動程序,當調用getConnection()方法時,它會搜索整個驅動程序列表,直到找到一個能夠連接至數據連接字符串中指定的數據庫的驅動程序。加載此驅動程序之后,將使用DriverManager類的getConnection()方法建立與數據庫的連接。此方法接收三個參數,分別表示URL、用戶名和密碼。用戶名和密碼是可選的。
???????? Connection conn = DriverManager.getConnection(數據庫連接字符串,數據庫用戶名,密碼);
?
(3)、發送SQL語句,并得到結果集。一旦連接建立,就使用該連接創建Statement接口的實例,并將SQL語句傳遞給它所連接的數據庫,并返回類型為ResultSet的對象,它包含執行SQL查詢的結果。
???????? Statement stmt = conn.createStatement();
???????? ResultSet rs = stmt.executeQuery(select a,b,c from table);
?
(4)、處理結果。使用ResultSet對象的next()方法將光標(cursor)指向下一行。最初光標位于第一行之前,因此第一次調用next()方法將光標置于第一行上。如果到達結果集的末尾,則ResultSet的next()方法會返回false。方法getXXX提供了獲取當前行中某列值的途徑,列名或列號可用于標識要從中獲取數據的列。例如:如果數據表中第一列的列名為a,存儲類型為整型,則可以使用兩種方法獲取存儲在該列中的值,如:int x = rs.getInt(“a”);或者:int x = rs.getInt(1);
處理結果的代碼示例:
???????? while(rs.next()){
?????????? int x = rs.getInt(“a”);
?????????? String s = rs.getString(“b”);
?????????? float f = rs.getFloat(“c”);
}
?
JDBC程序的代碼模板:
- //把JDBC驅動類裝載入Java虛擬機中 ??
- Class.forName(JDBC驅動類的名稱); ??
- ??
- //加載驅動,并與數據庫建立連接,其中數據庫連接字符串用來標識數據庫 ??
- Connection?conn?=?DriverManager.getConnection(數據庫連接字符串,數據庫用戶名,密碼); ??
- ??
- //執行SQL語句,并得到結果集 ??
- Statement?stmt?=?conn.createStatement(); ??
- ResultSet?rs?=?stmt.executeQuery(“select?a,b,c?from?table”); ??
- ??
- //處理結果 ??
- while (rs.next()){ ??
- ?? int ?x?=?rs.getInt(“a”); ??
- ??String?s?=?rs.getString(“b”); ??
- ?? float ?f?=?rs.getFloat(“c”); ??
- }??
//把JDBC驅動類裝載入Java虛擬機中 Class.forName(JDBC驅動類的名稱); //加載驅動,并與數據庫建立連接,其中數據庫連接字符串用來標識數據庫 Connection conn = DriverManager.getConnection(數據庫連接字符串,數據庫用戶名,密碼); //執行SQL語句,并得到結果集 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(“select a,b,c from table”); //處理結果 while(rs.next()){ int x = rs.getInt(“a”); String s = rs.getString(“b”); float f = rs.getFloat(“c”); }
??
2.5、什么是JDBC URL
JDBC URL提供了一種標識數據庫的方法,可以使相應的JDBC驅動程序能識別數據庫并與之建立連接。
JDBC URL的標準語法由以下三個部分組成,各部分間用冒號分隔。
Jdbc:<子協議>:<子名稱>
JDBC URL的三個部分可以分解如下:
其中jdbc-----代表協議。
<子協議>----驅動程序名或數據庫連接機制的名稱。
<子名稱>----一種標識數據庫的方法。
JDBC URL示例:
jdbc:odbc:news
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news
?
3、? Statement接口和PreparedStatement接口中的方法
ResultSet executeQuery(String sql):可以執行SQL查詢并獲取到ResultSet對象。
int executeUpdate(String sql):可以執行插入、刪除、更新等操作,返回值是執行該操作所影響的行數。
boolean execute(String sql):這是一個最為一般的執行方法,可以執行任意SQL語句,然后獲得一個布爾值,表示是否返回ResultSet。
4、? 為什么要關閉Statement對象以及數據庫連接
如果不關閉Statement對象,它們會一直占用服務器資源,直到Java垃圾收集程序來回收它。作為一種好的編程風格,應在不需要Statement對象時顯示地關閉它們,這將立即釋放服務器資源,有助于避免潛在的內存問題。同樣,使用完數據庫連接后,就應關閉它,釋放連接所占用的數據庫資源。
5、? PreparedStatement語句
PreparedStatement接口繼承自Statement接口,PreparedStatement比普通的Statement對象使用起來更加靈活,更有效率。PreparedStatement實例包含已編譯的SQL語句,SQL語句可具有一個或多個輸入參數。這些輸入參數的值在SQL語句創建時未被指定,而是為每個輸入參數保留一個問號(“?”)作為占位符。
PreparedStatement pstmt = con.prepareStatement(“update table set a=? where b=?”);
在執行PreparedStatement對象之前,必須設置每個輸入參數的值??赏ㄟ^setXXX方法來完成,其中XXX是與該參數相應的類型。例如,如果參數具有Java類型long,則使用的方法就是設置給該參數的值。例如,以下代碼將第一個參數設為長整型值123456789,第二個參數設為整型值10:
pstmt.setLong(1,123456789);
pstmt.setInt(2,10);
?
由于PreparedStatement對象已預編譯過,所以其執行速度要快于Statement對象,因此,多次執行的SQL語句應被創建為PreparedStatement對象,以提高效率。
?
6、? 格式化時間
SimpleDateFormat hmFromat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
hmFromat.format(new Date());
?
7、 步驟
?1)調用Class類的forName()方法,加載并注冊數據庫驅動。
?2)調用DriverManager類的getConnection()方法,建立到數據庫的連接
?3)調用Connection對象的createStatement()方法,訪問數據庫
?4)調用Statement對象的executeQuery()方法得到ResultSet對象。
?5) 調用ResultSet對象的getObject()方法,處理結果。
?6)釋放資源(連接應該盡可能晚建立,釋放資源應盡可能早釋放。)
?
8、 代碼
- import ?java.sql.Connection;??? ??
- import ?java.sql.DriverManager;??? ??
- import ?java.sql.ResultSet;??? ??
- import ?java.sql.SQLException;??? ??
- import ?java.sql.Statement;??? ??
- ?? ??
- /**?? ?
- ?*Jdbc工具類?? ?
- ?*/ ?? ??
- public ? class ?JdbcUtils?{??? ??
- ???? private ? static ?String?url?=? "jdbc:mysql://localhost:3306/test" ;??? ??
- ???? private ? static ?String?user?=? "root" ;??? ??
- ???? private ? static ?String?password?=? "123456" ;??? ??
- ?? ??
- ???? private ?JdbcUtils()?{????}??? ??
- ???? static ?{??? ??
- ???????? try ?{??? ??
- ????????????Class.forName( "com.mysql.jdbc.Driver" );??? ??
- ????????}? catch ?(ClassNotFoundException?ex)?{??? ??
- ???????????? throw ? new ?ExceptionInInitializerError(ex);??? ??
- ????????}??? ??
- ????}??? ??
- ???? public ? static ?Connection?getConnection()? throws ?SQLException{??? ??
- ???????? return ?DriverManager.getConnection(url,?user,?password);??? ??
- ????}??? ??
- ???? public ? static ? void ?free(Connection?conn,?Statement?st,?ResultSet?rs)?{??? ??
- ???????? try ?{??? ??
- ???????????? if ?(rs?!=? null )?{??? ??
- ????????????????rs.close();??? ??
- ????????}??? ??
- ????????}? catch ?(SQLException?ex)?{??? ??
- ????????????System.out.println(ex.toString());??? ??
- ????????}? finally ?{??? ??
- ???????????? try ?{??? ??
- ???????????????? if (st!= null )?{??? ??
- ????????????????????st.close();??? ??
- ????????????????}??? ??
- ????????????}? catch ?(SQLException?ex)?{??? ??
- ????????????????System.out.println(ex.toString());??? ??
- ????????????}? finally ?{??? ??
- ???????????????? try ?{??? ??
- ???????????????????? if (conn!= null ){??? ??
- ????????????????????????conn.close();??? ??
- ????????????????????}??? ??
- ????????????????}? catch ?(SQLException?ex)?{??? ??
- ????????????????????System.out.println(ex.toString());??? ??
- ????????????????}??? ??
- ????????????}??? ??
- ????????}??? ??
- ????}??? ??
- }????
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** *Jdbc工具類 */ public class JdbcUtils { private static String url = "jdbc:mysql://localhost:3306/test"; private static String user = "root"; private static String password = "123456"; private JdbcUtils() { } static { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException ex) { throw new ExceptionInInitializerError(ex); } } public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, user, password); } public static void free(Connection conn, Statement st, ResultSet rs) { try { if (rs != null) { rs.close(); } } catch (SQLException ex) { System.out.println(ex.toString()); } finally { try { if(st!=null) { st.close(); } } catch (SQLException ex) { System.out.println(ex.toString()); } finally { try { if(conn!=null){ conn.close(); } } catch (SQLException ex) { System.out.println(ex.toString()); } } } } }
- import ?java.sql.Connection;??? ??
- import ?java.sql.ResultSet;??? ??
- import ?java.sql.SQLException;??? ??
- import ?java.sql.Statement;??? ??
- ?? ??
- public ? class ?Test?{??? ??
- ?? ??
- ???? public ? static ? void ?main(String[]?args)?{??? ??
- ????????optimize();??? ??
- ????}??? ??
- ?? ??
- ???? public ? static ? void ?optimize()?{??? ??
- ????????Connection?conn?=? null ;??? ??
- ????????Statement?st?=? null ;??? ??
- ????????ResultSet?rs?=? null ;??? ??
- ???????? try ?{??? ??
- ????????????conn?=?JdbcUtils.getConnection();??? ??
- ????????????st?=?conn.createStatement();??? ??
- ????????????rs?=?st.executeQuery( "Select?*?from?Students;" );??? ??
- ???????????? while ?(rs.next())?{??? ??
- ????????????????System.out.println(rs.getObject( 1 )?+? "\t" ?+?rs.getObject( 2 )?+? "\t" ?+?rs.getObject( 3 )?+? "\t" ?+?rs.getObject( 4 ));??? ??
- ????????????}??? ??
- ????????}? catch ?(SQLException?ex)?{??? ??
- ????????????System.out.println(ex.toString());??? ??
- ????????}? finally ?{??? ??
- ????????????JdbcUtils.free(conn,?st,?rs);??? ??
- ????????}??? ??
- ????}??? ??
- }??
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
