如果使用 Statement 接口,则先对您发送到数据库的每条语句进行分析,生成访问计划,然后再执行该语句。这些在实际执行语句之前的步骤被称为准备语句。
如果使用 PreparedStatement 接口,将会在性能方面获得一些益处。这样您就可以使用占位符来准备语句,然后在执行语句时向占位符赋值。
使用预准备语句在执行多个类似的操作(如插入多行)时特别有用。
有关准备语句的详细信息,请参见准备语句。
以下示例说明如何使用 PreparedStatement 接口,不过,插入单行并未有效地利用了预准备语句。
JDBCExample 类的以下 InsertDynamic 方法用于执行一个预准备语句:
public static void InsertDynamic( Connection con, String ID, String name ) { try { // Build the INSERT statement // ? is a placeholder character String sqlStr = "INSERT INTO Departments " + "( DepartmentID, DepartmentName ) " + "VALUES ( ? , ? )"; // Prepare the statement PreparedStatement stmt = con.prepareStatement( sqlStr ); // Set some values int idValue = Integer.valueOf( ID ); stmt.setInt( 1, idValue ); stmt.setString( 2, name ); // Execute the statement int iRows = stmt.executeUpdate(); // Print the number of rows inserted System.out.println(iRows + " rows inserted"); } catch (SQLException sqe) { System.out.println("Unexpected exception : " + sqe.toString() + ", sqlstate = " + sqe.getSQLState()); } catch (Exception e) { e.printStackTrace(); } } |
此代码段是位于 samples-dir\SQLAnywhere\JDBC 目录中的 JDBCExample 类的一部分。
executeUpdate 方法返回一个用于反映操作所影响到的行数的整数。在此情况下,成功的 INSERT 会返回值 1。
作为服务器端的类运行时,System.out.println
的输出会显示在数据库服务器消息窗口中。
使用 Interactive SQL,以 DBA 身份连接到示例数据库。
确保已安装 JDBCExample 类。
有关安装 Java 示例类的详细信息,请参见准备示例。
定义一个名为 JDBCInsert 的存储过程,该存储过程充当类中 JDBCExample.Insert 方法的包装:
CREATE PROCEDURE JDBCInsert( IN arg1 INTEGER, IN arg2 CHAR(50) ) EXTERNAL NAME 'JDBCExample.Insert(ILjava/lang/String;)V' LANGUAGE JAVA; |
如下所示调用 JDBCExample.Insert 方法:
CALL JDBCInsert( 202, 'Southeastern Sales' ); |
Insert 方法用以调用 InsertDynamic 方法。
确认 Departments 表中已添加一行。
SELECT * FROM Departments; |
示例程序会在数据库服务器消息窗口中显示 Departments 表的更新内容。
在示例类中有一个称为 DeleteDynamic 的类似方法,用于显示如何删除刚刚添加的行。
定义一个名为 JDBCDelete 的存储过程,该存储过程充当类中 JDBCExample.Delete 方法的包装:
CREATE PROCEDURE JDBCDelete( in arg1 integer ) EXTERNAL NAME 'JDBCExample.Delete(I)V' LANGUAGE JAVA; |
如下所示调用 JDBCExample.Delete 方法:
CALL JDBCDelete( 202 ); |
Delete 方法用以调用 DeleteDynamic 方法。
确认该行已从 Departments 表中删除。
SELECT * FROM Departments; |
示例程序会在数据库服务器消息窗口中显示 Departments 表的更新内容。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |