这个错误 java.sql.SQLSyntaxErrorException: ORA-01722: 数字无效
通常发生在尝试将一个非数字字符串转换为数字类型时失败。以下是关于这个错误的基础概念、原因、解决方法以及相关应用场景的详细解释:
确保插入或更新的数据是有效的数字格式。
String value = "123"; // 确保这是一个有效的数字字符串
int number = Integer.parseInt(value);
使用PreparedStatement可以有效防止SQL注入,并且在编译时进行类型检查。
String sql = "INSERT INTO my_table (id, value) VALUES (?, ?)";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setInt(1, 1);
pstmt.setString(2, "123"); // 确保这是一个有效的数字字符串
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
在插入或更新之前,对数据进行验证。
public boolean isValidNumber(String str) {
try {
Double.parseDouble(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
使用正则表达式验证输入是否为有效数字。
public boolean isValidNumber(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}
以下是一个完整的示例,展示了如何在插入数据之前进行验证和处理:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DatabaseExample {
public static void main(String[] args) {
String value = "123"; // 假设这是从某处获取的值
if (isValidNumber(value)) {
try (Connection connection = getConnection();
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO my_table (id, value) VALUES (?, ?)")) {
pstmt.setInt(1, 1);
pstmt.setString(2, value);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
System.out.println("Invalid number format: " + value);
}
}
private static boolean isValidNumber(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}
private static Connection getConnection() throws SQLException {
// 这里应该是获取数据库连接的代码
return null;
}
}
通过以上方法,可以有效避免 ORA-01722
错误,确保数据的正确性和完整性。
领取专属 10元无门槛券
手把手带您无忧上云