從上一篇文章《JDBC串連MySQL資料庫及樣本》(前往該文章)的樣本中,我們提到,使用Statement來執行SQL語句,例如:Connection connection;Statement statement ;... ...statement = connction.creatStatement();String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Serein', 25, 'M', 'Guangzhou','Engine','1','5000')";st.executeUpdate(sql);上述代碼中,需要構造的SQL語句很長很麻煩,尤其是對參數,很容易出錯。所以Sun提供了更進階的Statement,即PreparedStatement。本文就來學習PreparedStatement。
一、什麼是PreparedStatement 參閱Java API文檔,我們可以知道,PreparedStatement是Statement的子介面(),表示先行編譯的 SQL 陳述式的對象,SQL 陳述式被先行編譯並儲存在
PreparedStatement 對象中。然後可以使用此對象多次高效地執行該語句。
二、通過PreparedStatement擷取在運行命令列中執行的參數,將參數插入到某張資料表中 相關的實驗過程,包括在預先建立程式所需資料庫、建立所需資料表格、在開發環境中載入驅動程式套件等,可參考前一篇文章《JDBC串連MySQL資料庫及樣本》(前往該文章)具體代碼如下:
package com.serein.jdbc;import java.sql.*;public class preparedStatemetTest {public static void main(String[] args) {//檢查命令列中是否夠7個參數if(args.length != 7) {System.out.println("Parameter Error! Please Input Again!");System.exit(-1);}//程式擷取運行棧裡的7個參數值String name = args[0];int age = 0;try {age = Integer.parseInt(args[1]);} catch (NumberFormatException e) {System.out.println("Parameter Error! Age should be Number Format!");System.exit(-1);}String sex = args[2];String address = args[3];String depart = args[4];int worklen = 0;try {worklen = Integer.parseInt(args[5]);} catch (NumberFormatException e) {System.out.println("Parameter Error! Worklen should be Number Format!");System.exit(-1);}int wage = 0;try {wage = Integer.parseInt(args[6]);} catch (NumberFormatException e) {System.out.println("Parameter Error! Wage should be Number Format!");System.exit(-1);}//建立PreparedStatement對象PreparedStatement pstmt = null;//建立連線物件Connection conn = null; //串連資料庫,並插入資料try {//載入MySQL驅動執行個體,提供了兩種方法,是等價的Class.forName("com.mysql.jdbc.Driver");//new oracle.jdbc.driver.OracleDriver();//建立串連conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myuser", "root", "root");//使用PreparedStatement對象裡來構建並執行SQL語句,7個問號代表7個欄位預先要保留的值pstmt = conn.prepareStatement("INSERT INTO staff(name, age, sex,address, depart, worklen,wage) VALUES (?, ?, ?, ?, ?, ?, ?)");//通過PreparedStatement對象裡的set方法去設定插入的具體數值pstmt.setString(1, name);pstmt.setInt(2, age);pstmt.setString(3, sex);pstmt.setString(4,address );pstmt.setString(5, depart);pstmt.setInt(6, worklen);pstmt.setInt(7, wage);pstmt.executeUpdate();//插入成功提示System.out.print("成功插入一條資料記錄!");//捕獲驅動載入失敗異常} catch (ClassNotFoundException e) {e.printStackTrace();//捕獲SQL語句執行失敗異常} catch (SQLException e) {e.printStackTrace();//恢複變數初始值} finally {try {if(pstmt != null) {pstmt.close();pstmt = null;}if(conn != null) {conn.close();conn = null;}//捕獲SQL異常} catch (SQLException e) {e.printStackTrace();}}}}
編寫好代碼之後,要進行帶參數運行程式,方法如下:
其中輸入的參數為(可參考進行修改):SereinChan
25
M
Guangzhou
Engine
3
5000
查看Console控制台,"成功插入一條資料記錄!":
查看MySQL資料庫,進行確認:
成功完成!