Java 实体表错误13037:非法的双PREC常量
在尝试使用Java JDBC代码向SolidDB中添加记录时,出现以下错误 以下是引发异常的方法:Java 实体表错误13037:非法的双PREC常量,java,jdbc,ibm-soliddb,Java,Jdbc,Ibm Soliddb,在尝试使用Java JDBC代码向SolidDB中添加记录时,出现以下错误 以下是引发异常的方法: public void addData(User data) { Connection conn = null; try { conn = dataSource.getConnection(); if (conn == null || conn.isClosed()) { throw new RuntimeExcept
public void addData(User data) {
Connection conn = null;
try {
conn = dataSource.getConnection();
if (conn == null || conn.isClosed()) {
throw new RuntimeException("Could not open connection");
}
String query="INSERT INTO USER "
+ "(ID, NAME, PASSWORD, ENABLED, REQUIRE_RESET)"
+ "VALUES (?, ?, ?, ?, ?);";
PreparedStatement ps = conn.prepareStatement(query);
// "ID" column is INTEGER, and partition field in UserData is int.
ps.setString(1, data.getId());
ps.setString(2, data.getName());
ps.setString(3, data.getPassword());
// "ENABLED" column is INTEGER, and enabled field in UserData is boolean.
ps.setInt(4, data.isEnabled()? 1:0);
ps.setString(5, data.isRequireReset()?"Y":"N");
if (ps.executeUpdate() < 1) {
throw new RuntimeException("Could not save User, executeUpdate() returned a value < 1");
}
} Catch (SQLException e) {
throw new DataLayerException("Could not save the User Data.", e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
}
public void addData(用户数据){
连接conn=null;
试一试{
conn=dataSource.getConnection();
如果(conn==null | | conn.isClosed()){
抛出新的RuntimeException(“无法打开连接”);
}
String query=“插入用户”
+(ID、名称、密码、已启用、需要重置)
+“值(?,?,?,?);”;
PreparedStatement ps=conn.prepareStatement(查询);
//“ID”列是整数,UserData中的分区字段是int。
ps.setString(1,data.getId());
ps.setString(2,data.getName());
ps.setString(3,data.getPassword());
//“ENABLED”列为整数,UserData中的ENABLED字段为布尔值。
ps.setInt(4,data.isEnabled()?1:0);
ps.setString(5,data.isRequireReset()?“Y”:“N”);
如果(ps.executeUpdate()<1){
抛出新的RuntimeException(“无法保存用户,executeUpdate()返回的值<1”);
}
}捕获(SQLE异常){
抛出新的DataLayerException(“无法保存用户数据。”,e);
}最后{
如果(conn!=null){
试一试{
康涅狄格州关闭();
}捕获(SQLE异常){
}
}
}
}
我尝试过直接努力记录这些价值观,但还是失败了。
如果我从insert语句中删除“ID”和“ENABLED”列,则insert将成功
提前谢谢
PreparedStatement
索引为(另请参见)。因为您使用0,并且驱动程序没有警告您,所以导致问题的所有内容都已“移动”
修正:
最后我得到了解决方案,这是因为一个愚蠢的语法错误。
当我在结尾去掉分号时,它起作用了 运行此代码时得到的异常/堆栈跟踪是什么?@Alfabravo我只有以下信息:嵌套异常是java.sql.SQLException:[Solid JDBC 7.0.0.2 Build 2012-04-20]Solid Table Error 13037:非法的DOUBLE PREC常量。我没有访问日志的权限。根据一些用户手册,这个错误意味着你引入了soble双精度数据作为常量,它不是有效的双精度数据。你确定字段的数据类型吗?很好,catch+1,我已经更正了我的代码并重新运行,仍然得到相同的错误!。所以我将用你的更正更新我的问题,谢谢。
ps.setString(1, data.getId());
ps.setString(2, data.getName());
ps.setString(3, data.getPassword());
ps.setInt(4, data.isEnabled()? 1:0);
ps.setString(5, data.isRequireReset()?"Y":"N");