java练气期(1)----java高级(JDBC)
1.什么是JDBC?
JDBC: Java Database Connectivity??為多種關系型數據庫提供統一訪問。即通過Java代碼訪問和操作數據庫
JDBC連接數據庫的步驟
//JDBC的工具類代碼,為持久層服務 package com.lkw.util;import java.sql.*;public class DBHelper {/*** <pre>* JDBC驅動程序,默認為MySQL* MySQL: <b>com.mysql.jdbc.Driver</b>* MSSQLServer: <b>com.microsoft.sqlserver.jdbc.SQLServerDriver</b>* </pre>*/private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";/*** <pre>* JDBC數據庫URL,默認為MySQL* MySQL:<b>jdbc:mysql://localhost:3306/數據庫名</b>* MSSQLServer:<b>jdbc:sqlserver://localhost:1433;DatabaseName=數據庫名</b>* </pre>*/private static final String JDBC_URL = "jdbc:mysql://localhost:3306/exam";/*** JDBC登錄數據庫服務器用戶名和密碼*/private static final String JDBC_USER = "root";private static final String JDBC_PASSWORD = "root";private static DBHelper db = null;private static Connection conn = null;private static PreparedStatement st = null;static {try {//加載驅動程序Class.forName(JDBC_DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}private DBHelper() throws SQLException {//獲取數據庫連接conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);}//獲取DBHelper對象public static DBHelper getInstance() throws SQLException {if(db == null || conn.isClosed()) {db = new DBHelper();}return db;}//查詢public ResultSet executeQuery(String sql, Object...args) throws SQLException {st = conn.prepareStatement(sql);//預處理if(args != null && args.length > 0) {for(int i = 0; i < args.length; ++i){st.setObject(i + 1, args[i]);}}return st.executeQuery();} //增刪改public int executeUpdate(String sql, Object...args) throws SQLException {st = conn.prepareStatement(sql);if(args != null && args.length > 0) {for(int i = 0; i < args.length; ++i) {st.setObject(i + 1, args[i]);}}return st.executeUpdate();}/*關閉對象*/public static void close() {if(st != null ) {try {st.close();} catch (SQLException e) {e.printStackTrace();}finally {if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}finally{st = null;conn = null;db = null;}}}}}}2.?簡述JDBC的Resulset,與Connection類
ResultSet是結果集,用來存放執行sql后返回的執行結果,對應于數據庫中的數據表
Connrction:與數據庫連接的對象
?
3.JDBC中,PreparedStatement相較于Statement有什么優點?
1)PreparedStatement可以使用預編譯的sql,而Statment只能使用靜態的sql
2)PreparedStatement可以使用sql緩存區,效率比Statment高
3)PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入。
4.JDBC中如何進行事務處理?
一個事務是由一條或多條對數據庫操作的SQL語句所組成的一個不可分割的工作單元,只有當事務中的所有操作都正常執行了,整個事務才會被提交給數據庫。在JDBC中,一般是通過commit()方法或rollback()方法來結束事務的操作。其中commit()方法表示完成對事務的提交,rollback()方法表示完成事務回滾,多用于在處理事務的過程中出現了異常的情況,這兩種方法都位于java.sql.Connection類中。一般而言,事務默認操作是自動提交,即操作成功后,系統將自動調用commit()方法,否則將調用rollback()方法。
當然,在JDBC中,也可以通過調用setAutoCommit(false)方法來禁止自動提交,然后就可以把多個數據庫操作的表達式作為一個事務,在操作完成后調用commit()方法實現整體提交,如果其中一個表達式操作失敗,就會拋出異常而不會調用commit()方法。在這種情況下,就可以在異常捕獲的代碼塊中調用rollback()進行事務回滾。通過此種方法可以保持對數據庫的多次操作后,數據仍然保持一致性。
JDBC事務處理的方法
try{con.setAutoCommit(false);//開啟事務......con.commit();//try的最后提交事務 } catch() {con.rollback();//回滾事務 }?
?
?5.在進行數據庫編程時,連接池有什么作用?
實際開發中“獲得連接”或“釋放資源”是非常消耗系統資源的兩個過程,為了解決此類性能問題,通常情況我們采用連接池技術,來共享連接Connection。
用池來管理Connection,這樣可以重復使用Connection。有了池,所以我們就不用自己來創建Connection,而是通過池來獲取Connection對象。當使用完Connection后,調用Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了。
?
常見的連接池有C3P0、DBCP。
C3P0開源免費的連接池!目前使用它的開源項目有:Spring、Hibernate等。使用第三方工具需要導入jar包,c3p0使用時還需要添加配置文件c3p0-config.xml。
DBCP也是一個開源的連接池,是Apache Common成員之一,在企業開發中也比較常見,tomcat內置的連接池。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的java练气期(1)----java高级(JDBC)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019 ACM-icpc西安邀请赛总结
- 下一篇: java练气期(2)----java高级