stmt.executeUpdate() 返回 java.sql.SQLException: ORA-01722: 无效



我在预言机中FP_BIOMETRIC_DATA表的主键是CUST_NO和SERIAL_NO。"Blob"列为"FINGER_DATA"。所以我想在这个表中插入一条记录.代码如下:

public void saveFingerToDatabase(String username , String key , byte[] data)
{
try {
connection =  DBConnectionHandler.getConnection();
PreparedStatement stmt = connection.prepareStatement("insert into FP_BIOMETRIC_DATA (CUST_NO,SERIAL_NO,FINGER_DATA,KEY_VALUE) values (?,?,?,?)");
stmt.setInt(1, Integer.parseInt(username));
stmt.setInt(2, 1);
stmt.setBytes(3, data);
stmt.setString(4, key);
stmt.executeUpdate();
connection.commit();
} catch (SQLException ex) {
Logger.getLogger(SaveDataToDatabase.class.getName()).log(Level.SEVERE, null, ex);
}
try {
connection.close();
} catch (SQLException ex) {
Logger.getLogger(SaveDataToDatabase.class.getName()).log(Level.SEVERE, null, ex);
}
}

但是当我运行此代码时,它给了我以下错误:

java.sql.SQLException: ORA-01722: invalid number
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:213)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:952)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
at com.Futronic.WorkedEx.SaveDataToDatabase.saveFingerToDatabase(SaveDataToDatabase.java:43)
at com.Futronic.WorkedEx.DbRecord.Save(DbRecord.java:184)
at com.Futronic.WorkedEx.MainForm.OnEnrollmentComplete(MainForm.java:159)
at com.futronic.SDKHelper.FutronicEnrollment.run(FutronicEnrollment.java:234)
at java.lang.Thread.run(Thread.java:745)

我不明白错误在哪里?请帮助我.

错误代码 ORA-01722 指出您正在将字符串值转换为 int,而 SQL 抛出错误

检查 (字符串) 键是否声明为 STRING 或 INTEGER

描述

当您遇到 ORA-01722 错误时,出现以下错误消息 将出现:

ORA-01722:无效号码

原因

您执行了一个 SQL 语句,该语句尝试将字符串转换为 数,但没有成功。

分辨率

解决此 Oracle 错误的选项包括:

选项 #1

仅数值字段或包含数值的字符字段 可用于算术运算。确保所有表达式 评估为数字。

选项 #2

如果要对日期进行加减,请确保 从日期添加/减去数值。

https://www.techonthenet.com/oracle/errors/ora01722.php

显示FP_BIOMETRIC_DATA的表结构,检查'CUST_NO''SERIAL_NO',查看它们的类型是varchar还是number

相关内容

最新更新