Java 在sql for DB2中将数据插入表之前,如何对列的值进行大小验证?
在将数据实际插入到表中之前,我需要检查该值是否具有适当的大小,以便插入到特定列的表中 e、 g 假设在DB2中有一个列为SMALLINT类型的表'MyTable' 如果我尝试将值插入为Java 在sql for DB2中将数据插入表之前,如何对列的值进行大小验证?,java,sql,database,jdbc,db2,Java,Sql,Database,Jdbc,Db2,在将数据实际插入到表中之前,我需要检查该值是否具有适当的大小,以便插入到特定列的表中 e、 g 假设在DB2中有一个列为SMALLINT类型的表'MyTable' 如果我尝试将值插入为 insert into MyTable(MYSMALLINT) values(12222222222222222222222222222225552); 执行上述查询后,我将得到以下错误: 消息:数字文字“122225552”无效,因为其值超出范围。 在这里,我需要在Java/JDBC中将数据插入到表中之前检查
insert into MyTable(MYSMALLINT) values(12222222222222222222222222222225552);
执行上述查询后,我将得到以下错误:
消息:数字文字“122225552”无效,因为其值超出范围。
在这里,我需要在Java/JDBC中将数据插入到表中之前检查值的大小,以查找具有任何数据类型(CHAR、VARCHAR、INT、BIGINT、TINYINT、DOUBLE、FLOAT、DECIMAL、REAL等)的列。您可以使用
PreparedStatement
:
PreparedStatement statement = connection.prepareStatement("insert into MyTable(MYSMALLINT) values(?);"
for(Integer value:values){
try{
statement.setInt(1,value);
statement.addBatch();
}catch(SQLException e){
System.err.println("Invalid value: " + e.getMessage());
throw e;
}
}
statement.executeBatch();
如果触发器中的before值对您的需求有效,则可以对其进行验证。验证值的方法可以是一个UDF,这样就可以在触发器之外对其进行测试。为什么不将列映射到正确的Java原语呢 Smallint相当于Java中的“short”,因此如果将主机变量定义为short,编译器将在编译时检测到任何错误
insert into MyTable(MYSMALLINT) values(12222222222222222222222222222225552S);
会被java编译器抛出。为什么不尝试插入,如果出现异常,则相应地处理它?如果我正在执行批处理操作,它在100条记录中的第99条记录失败,是否需要回滚该数据?,因此,我不想要插入/滚动的开销-backing@Manikanta_AC您不需要为此类异常回滚。如果您提交,那么记录1-98将被提交,而记录99根本不存在。@玲儿正确,但在我的情况下,如果至少有一条记录插入失败,您希望回滚所有数据。您的应用程序真的很难测试12222222>32768,或者字符串是否长于列的定义长度?当然,这是正确的答案。但是你能告诉我其他的方法吗?