敬的世界

          常用鏈接

          統計

          最新評論

          關于 PreparedStatement

          If you have a SQL statement that needs to be executed multiple times, it is more efficient to use a JDBC PreparedStatement object to run it. JDBC PreparedStatement class supports the following main features:

          • ????SQL statements PreparedStatement objects are pre-compiled on the database server side.
          • ????IN parameters are supported in SQL statements in PreparedStatement objects.
          • ????Batch execution mode is supported to run the run SQL statement multiple times in a single transaction.

          您可以使用Connection的prepareStatement()方法建立好一個預先編譯(precompile)的SQL語句,當中參數會變動的部份,先指定"?"這個佔位字元,例如:

          PreparedStatement stmt = conn.prepareStatement(
          ??? "INSERT INTO message VALUES(?, ?, ?, ?, ?)");

          使用PreparedStatement也可以進行批次處理,直接來看個例子就知道如何使用:

          PreparedStatement stmt = conn.prepareStatement(
          ??? "INSERT INTO Users VALUES(?,?, ?)");
          ?
          User[] users = ...;

          for(int i=0; i<users.length; i++) {
          ???? stmt.setInt(1, users[i].getID());
          ???? stmt.setString(2, users[i].getName());
          ???? stmt.setString(3, users[i].getPassword());
          ???? stmt.addBatch( );
          }
          ?
          stmt.executeBatch();?

          A PreparedStatement object should be created from a Connection object with the prepareStatement() method and executed like a regular Statement object as shown in the following program:



          import java.util.*;
          import java.sql.*;
          import javax.sql.*;
          import javax.naming.*;
          public class MySqlPreparedSelect {
          ? public static void main(String [] args) {
          ??? Connection con = null;
          ??? try {
          ????? com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds
          ??????? = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource();
          ????? ds.setServerName("localhost");
          ????? ds.setPortNumber(3306);
          ????? ds.setDatabaseName("HerongDB");
          ????? ds.setUser("Herong");
          ????? ds.setPassword("TopSecret");
          ????? con = ds.getConnection();

          // PreparedStatement for SELECT statement
          ????? PreparedStatement sta = con.prepareStatement(
          "SELECT * FROM Profile WHERE ID = 2");

          // Execute the PreparedStatement as a query
          ????? ResultSet res = sta.executeQuery();

          // Get values out of the ResultSet
          ????? res.next();
          ????? String firstName = res.getString("FirstName");
          ????? String lastName = res.getString("LastName");
          ????? System.out.println("User ID 2: "+firstName+' '+lastName);

          // Close ResultSet and PreparedStatement
          ????? res.close();
          ????? sta.close();

          ????? con.close();???????
          ??? } catch (Exception e) {
          ????? System.err.println("Exception: "+e.getMessage());
          ????? e.printStackTrace();
          ??? }
          ? }
          }

          posted on 2008-10-02 16:26 picture talk 閱讀(1100) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 麻阳| 佛坪县| 永定县| 鄂尔多斯市| 彰化县| 印江| 乌兰县| 海城市| 凤庆县| 邢台县| 长泰县| 鹤壁市| 南木林县| 时尚| 武山县| 锡林郭勒盟| 安溪县| 汾西县| 永济市| 双城市| 牡丹江市| 星座| 泸州市| 朝阳市| 隆林| 剑河县| 尚志市| 思南县| 苏尼特右旗| 麻阳| 沈阳市| 江达县| 鞍山市| 黄石市| 肃北| 呼玛县| 开封市| 乐业县| 白河县| 涞源县| 鄂尔多斯市|