Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在sql for DB2中将数据插入表之前,如何对列的值进行大小验证?_Java_Sql_Database_Jdbc_Db2 - Fatal编程技术网

Java 在sql for DB2中将数据插入表之前,如何对列的值进行大小验证?

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中将数据插入到表中之前检查

在将数据实际插入到表中之前,我需要检查该值是否具有适当的大小,以便插入到特定列的表中

e、 g

假设在DB2中有一个列为SMALLINT类型的表'MyTable'

如果我尝试将值插入为

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,或者字符串是否长于列的定义长度?当然,这是正确的答案。但是你能告诉我其他的方法吗?