我正试图将数据从一个数据库迁移到另一个数据库,但由于无法正确处理数据类型而无法迁移。
目标数据库的架构
CREATE TABLE `Report_aggregation` (
`Supplier` varchar(255) DEFAULT NULL,
`Product_code` int(11) DEFAULT NULL,
`Product_Name` varchar(255) DEFAULT NULL,
`Balance_on_Hand` int(11) DEFAULT NULL,
`Pending` int(11) DEFAULT NULL,
`Sale_Yesterday` int(11) DEFAULT NULL,
`Stock_day` decimal(10,0) DEFAULT NULL,
`Sale_avg` decimal(10,0) DEFAULT NULL,
`Stock_day_avg` varchar(255) DEFAULT NULL,
`Lead_time` int(11) DEFAULT NULL,
`Frequency_per_week` int(11) DEFAULT NULL,
`Saftey_stock` int(11) DEFAULT NULL,
`Forecast_order_qty` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;
以下是我如何插入值。
setValues: { ps, i ->
ps.setString(1, contracts[i].Supplier.toString())
ps.setInt(2, contracts[i].Product_code)
ps.setString(3, contracts[i].Product_Name.toString())
ps.setInt(4, contracts[i].Balance_on_Hand)
ps.setInt(5, contracts[i].Pending)
ps.setInt(6, contracts[i].Sale_Yesterday)
ps.setDecimal(7, contracts[i].Stock_day)
ps.setDecimal(8, contracts[i].Sale_avg)
ps.setString(9, contracts[i].Stock_day_avg.toString())
ps.setInt(10, contracts[i].Lead_time)
ps.setInt(11, contracts[i].Frequency_per_week)
ps.setInt(12, contracts[i].Saftey_stock)
ps.setInt(13, contracts[i].Forecast_order_qty)
}
其中contracts
是来自其他数据库的结果集。
我在执行时得到这个异常。
groovy.lang.MissingMethodException: No signature of method: com.jolbox.bonecp.PreparedStatementHandle.setInt() is applicable for argument types: (java.lang.Integer, null) values: [2, null]
我是groovy的新手,无法正确调试,可能是我错过了一些非常基本的东西。任何帮助都将不胜感激。
行中似乎有问题ps.setInt(2, contracts[i].Product_code)
您正在预编译的语句中插入null,groovy无法解析类型,所以它抛出了关于MissingMethodException的异常。
再见尝试:
ps.setInt(2, contracts[i].Product_code as Integer)
它会告诉groovy,您传递的值是Integer类型,即使它是null。
您也可以使用ResultSet的方法,如getLong
或getInt
。它也应该能解决你的问题。
有关这些方法的详细信息:http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getInt%28java.lang.String%29