mysql setstring_JAVA + Mysql PreparedStatement.setString()ArrayStoreException

我一直在我的代码中获取此ArrayStoreException从一个MySQL表中加载记录到另一个。我试着截断目标表并重新运行我的代码,它似乎随机地遇到了所述异常。

我打算在单元测试期间遇到ArrayStoreException时实现基于(Spring)JdbcTemplate的DAO。我试图用普通的JDBC代码重新创建它,但仍然遇到错误。

对于我的DDL:

所有列都是varchar类型,除了类型为Date的brthdate和birthdate。 DEFAULT CHARSET = utf8

我的代码片段:

employeesSql = "select id_no, " +

"lastname, " +

"frstname, " +

"mdlename, " +

"brthdate,sex, " +

"sss_no, " +

"tin_no " +

"from lms.pms_empf " +

"where length(trim(id_no)) > 0 " +

"and id_no <> '000000' " +

" ORDER BY id_no";

employeeSql = "select count(*) "

+ "from dim_employees "

+ "where id_no=?";

updateSql = "update dim_employees " +

"set last_name = ?, " +

"first_name = ?, " +

"middle_name = ?, " +

"birthdate = ?, " +

"sex = ?, " +

"sss_no = ?, " +

"tin_no = ? " +

"where id_no = ?";

insertSql = "insert into dim_employees " +

"(id_no, last_name, first_name, " +

"middle_name,birthdate, sex, sss_no, tin_no) " +

"values (?,?,?,?,?,?,?,?)";

employeesStmt = con.createStatement();

employeeStmt = con.prepareStatement(employeeSql);

updateStmt = con.prepareStatement(updateSql);

insertStmt = con.prepareStatement(insertSql);

employeesCursor = employeesStmt.executeQuery(employeesSql);

while (employeesCursor.next()) {

idNo = new String(employeesCursor.getBytes(1), "UTF-8");

lastName = new String(employeesCursor.getBytes(2), "UTF-8");

firstName = new String(employeesCursor.getBytes(3), "UTF-8");

middleName = new String(employeesCursor.getBytes(4), "UTF-8");

birthDate = employeesCursor.getDate(5);

sex = new String(employeesCursor.getBytes(6), "UTF-8");

sssNo = new String(employeesCursor.getBytes(7), "UTF-8");

tinNo = new String(employeesCursor.getBytes(8), "UTF-8");

employeeStmt.setString(1, idNo);

employeeCursor = employeeStmt.executeQuery();

while (employeeCursor.next()) {

if (employeeCursor.getInt(1) > 0) {

//update

updateStmt.setString(1, lastName);

updateStmt.setString(2, firstName);

updateStmt.setString(3, middleName);

updateStmt.setDate(4, birthDate);

updateStmt.setString(5, sex);

updateStmt.setString(6, sssNo);

updateStmt.setString(7, tinNo);

updateStmt.setString(8, idNo);

updateStmt.executeUpdate();

updateStmt.executeUpdate();

}

else {

//insert

insertStmt.setString(1, idNo);

insertStmt.setString(2,lastName);

insertStmt.setString(3, firstName);

insertStmt.setString(4, middleName);

insertStmt.setDate(5, birthDate);

insertStmt.setString(6, sex);

insertStmt.setString(7, sssNo);

***//exception points here** insertStmt.setString(8, tinNo);

insertStmt.executeUpdate();

insertStmt.clearParameters();

}

}

employeeStmt.clearParameters();堆栈跟踪:

......

Caused by: java.lang.ArrayStoreException

at java.lang.String.getChars(String.java:854)

at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4520)

......

at com.vdc.lmsprocs.EmployeeProc.setEmployees(EmployeeProc.java:135)

......我为这篇长文章感到抱歉。我显然无法解释这里发生的事情。这是我第一次遇到这样的缺陷。

提前致谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值