JDBC詳解

連接數據的步驟:

                1.註冊驅動 (只做一次)

                2.建立連接(Connection) 

                3.創建執行SQL的語句(Statement)

                4.執行語句

                5.處理執行結果(ResultSet)

                6.釋放資源

註冊驅動:

 Class.forName(com.mysql.jdbc.Driver);

推薦這種方式,不會對具體的驅動類產生依賴。

DriverManager.registerDriver(com.mysql.jdbc.Driver);

會造成DriverManager中產生兩個一樣的驅動,並會對具體的驅動類產生依賴。

System.setProperty(jdbc.driversdriver1:driver2);

雖然不會對具體的驅動類產生依賴;但註冊不太方便,所以很少使用。 

驅動類型(四種類型)

建立連接(Connection)

Connection conn = DriverManager.getConnection(url, user, password);

url格式:

JDBC:子協議:子名稱//主機名:端口/數據庫名?屬性名=屬性值&

User,password可以用“屬性名=屬性值”方式告訴數據庫;

其他參數如:useUnicode=true&characterEncoding=GBK

創建執行SQL的語句(Statement)

Statement

 Statement st = conn.createStatement();

st.executeQuery(sql);

PreparedStatement

String sql = select * from table_name where col_name=?;

PreparedStatement ps = conn.preparedStatement(sql);

ps.setString(1, col_value);

ps.executeQuery();

處理執行結果(ResultSet)

ResultSet rs = statement.executeQuery(sql);

While(rs.next()){

rs.getString(col_name);

rs.getInt(col_name);

//

}

釋放資源:

釋放ResultSet, Statement,Connection.

數據庫連接(Connection)是非常稀有的資源,用完後必須馬上釋放,如果Connection不能及時正確的關閉將導致系統宕機。Connection的使用原則是儘量晚創建,儘量早的釋放。

CRUD總結:

增、刪、改用Statement.executeUpdate來完成,返回整數(匹配的記錄數),這類操作相對簡單。

查詢用Statement.executeQuery來完成,返回的是ResultSet對象,ResultSet中包含了查詢的結果;查詢相對與增、刪、改要複雜一些,因爲有查詢結果要處理。

SQL注入,PreparedStatementStatement 

SQL中包含特殊字符或SQL的關鍵字(如:' or 1 or ')Statement將出現不可預料的結果(出現異常或查詢的結果不正確),可用PreparedStatement來解決。

PreperedStatement(從Statement擴展而來)相對Statement的優點:

1.沒有SQL注入的問題。

2.Statement會使數據庫頻繁編譯SQL,可能造成數據庫緩衝區溢出。

3.數據庫和驅動可以對PreperedStatement進行優化(只有在相關聯的數據庫連接沒有關閉的情況下有效)。

發佈了32 篇原創文章 · 獲贊 18 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章