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)而不是对象(Integerand Long),并且会引发a NullPointerException:

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驱动程序不支持此数据类型