jdbc 设置PreparedStatement的参数
示例
查询字符串中的占位符需要使用以下set*方法设置:
String sql = "SELECT * FROM EMP WHERE JOB = ? AND SAL > ?"; //创建语句以进行操作 PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, "MANAGER"); // 字符串值 statement.setInt(2, 2850); // 整数值
特殊情况
设置NULL值:
不能使用例如setIntandsetLong方法来设置空值,因为它们使用原始类型(int和long)而不是对象(IntegerandLong),并且会引发aNullPointerException:
void setFloat(int parameterIndex, float x) void setInt(int parameterIndex, int x) void setLong(int parameterIndex, long x)
这些情况可以使用来处理setNull。
setNull(int parameterIndex, int sqlType)
它是类型化的,因此必须提供第二个参数,请参见java.sql.Types
//为整数值设置NULL statement.setNull(2, java.sql.Types.INTEGER);
设置LOB
LOB需要使用特殊对象。
Clob longContent = connection.createClob(); Writer longContentWriter = longContent.setCharacterStream(1); longContentWriter.write("This will be the content of the CLOB"); pstmt = connection.prepareStatement("INSERT INTO CLOB_TABLE(CLOB_VALUE) VALUES (?)"); pstmt.setClob(1, longContent);
set*方法的例外
SQLException—如果parameterIndex与SQL语句中的参数标记不对应;如果发生数据库访问错误或对关闭的PreparedStatement调用此方法。
SQLFeatureNotSupportedException-如果sqlType是ARRAY,BLOB,CLOB,DATALINK,JAVA_OBJECT,NCHAR,NCLOB,NVARCHAR,LONGNVARCHAR,REF,ROWID,SQLXML或STRUCT数据类型和JDBC驱动程序不支持此数据类型