设置 PreparedStatement 的参数
需要使用 set*
方法设置查询字符串中的占位符:
String sql = "SELECT * FROM EMP WHERE JOB = ? AND SAL > ?";
//Create statement to make your operations
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, "MANAGER"); // String value
statement.setInt(2, 2850); // int value
特别案例
设置 NULL 值:
使用例如 setInt
和 setLong
方法无法设置空值,因为这些方法使用原始类型(int
和 long
)而不是对象(Integer
和 Long
),并且会导致 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
//setting a NULL for an integer value
statement.setNull(2, java.sql.Types.INTEGER);
设置 LOB
LOB 需要使用特殊对象。
Clob longContent = connection.createClob();
Writer longContentWriter = longContent.setCharacterStream(1); // position: beginning
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 驱动程序不支持此数据类型