開發者學堂課程【Java進階程式設計:PreparedStatement 接口簡介】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/20/detail/438preparedSratement 操作資料庫
為了解決 Statement 接口存在的 SQL 執行問題,是以在 java.sql 包裡面又提供有一個Statement 子接口:
PrearedStatement,,這個接口最大的好處是可以編寫正常的 SQL(資料不再和 SQL 文法混合在一起),同時利用占位符的形式,在 SQL 正常執行完畢後可以進行資料的設定。
觀察 PreparedStatement 接口定義:
Public interface PreparedStatement extends Statement
如果要想擷取 PreparedStatement 接口的執行個體,則依然需要通過 Connection 接口來實作,建立方法:
建立PreparedStatement接口對象:
public PreparedStatement
prepareStatement(String sql) throw SQLException;
由于SQL語句已經在建立 PreparedStatement 接口對象的時候提供了,是以在執行資料庫操作的時候也要更換方法。
資料庫更新:
public int executeUpdate() throw SQLException;
資料庫查詢:
public ResultSet executeQuery() throw SQLException。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yM2IjMyUzMlRzN4EWNjVmY4Y2N0UWNkVWY4ATZ0cDM58CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
範例:利用 preparedStatement 解決之前的資料操作問題
package cn . mldn . demo ;
import java . sql . Connection ;
import java .sq1.DriverManager;
import java .sq1.PreparedStatement;
import java .utl1.Date;
public class JDBCDemo {
private statie final String DATABASE _ DRVIER =" oracle . jdbe . driver . OracleDriver ";
private static final String DATABASE _ URL =" jdbc : oracle : thin :@1oca1host:1521:mldn";
private static final String DATAASE _ USER =" scott ”;
private static final String DATABASE _ PASSNORD =" tiger ”;
pub1ie statie void main ( String [] args ) throws Exception {
String title =" MLDN 新聞'老李寫的”;
Int read 99;
double price =99.8;
String content =“這個春天有點冷”;
Datel pubdate = new . Date ();
String sql =" INSERT INTo news ( nid , title , read , price , content , pubdate ) VALUES "+"( news _ seq . nextval ,?,?,?,?)";//使用了"?”作為占位符
Connection conn =null;//每一個 Connection 接口對象摺述的就是一個使用者連接配接
Class . forName ( DATABASE _ DRVIER );//向容器之中加載資料岸驅動程式
conn В DriverManager . getConnection ( DATABASE _ URL , DATABASE _ USER , DATABASE _ PASSWORD);
PreparedStatement pstmt = conn . prepareStatement (sql);//建立教據庫的操作對象
//在執行具體的資料庫操作之前需要為占位符設定内容。按照順序設定
pstmt , setString (1, title );
pstmt . setInt (2, read );
pstmt . setDouble (3, price );
pstmt . setString (4, content );
pstmt . setDate (5, new java .sq1.Date( pubdate . getTime );
int count = pstmt , executeUpdate ();/傳回影響的行數
System , out , println (”更新操作影響的資料行數,"+ count );
conn . close ();//資料庫的連接配接資源有限一定要關閉
}
}
}
在 JDBC 裡面不管使用的是 preparedStatement 設定的日期時間還是使用 ResultSet 擷取的日期時間實際上都是 java.util,Date 的子類,也就是說現在是如下的對應關系。