繁体   English   中英

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

[英]stmt.executeUpdate() returns java.sql.SQLException: ORA-01722: invalid number

我在oracle中有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)

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

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

错误代码ORA-01722指出您正在将字符串值转换为int,并且SQL引发错误

检查(String)键是否声明为STRING或INTEGER

描述

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

ORA-01722:编号无效

原因

您执行了一条SQL语句,该语句试图将字符串转换为数字,但未成功。

解析度

解决此Oracle错误的选项是:

选项1

在算术运算中只能使用数字字段或包含数字值的字符字段。 确保所有表达式的计算结果均为数字。

选项#2

如果要从日期中添加或减去日期,请确保已从日期中添加/减去了一个数值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM