Java 奇怪的SQLException:找不到列
我在使用JDBC对数据库运行的函数上遇到了一个奇怪的SQLException。 SQLException:未找到“消息”列 我的职能是:Java 奇怪的SQLException:找不到列,java,mysql,sqlexception,Java,Mysql,Sqlexception,我在使用JDBC对数据库运行的函数上遇到了一个奇怪的SQLException。 SQLException:未找到“消息”列 我的职能是: st=con.prepareStatement(“选择NotificationID、UserIDFrom、UserIDTo、Message、Timestamp、isNotified FROM notification,其中UserIDTo=?和isNotified=?”; st.setInt(1,_UserID); st.setBoolean(2,假); Sy
st=con.prepareStatement(“选择NotificationID、UserIDFrom、UserIDTo、Message、Timestamp、isNotified FROM notification,其中UserIDTo=?和isNotified=?”;
st.setInt(1,_UserID);
st.setBoolean(2,假);
System.out.println(“st为:+st”);
rs=圣执行机构();
我得到了那个错误,所以我在st.executeQuery()之后添加了这个:
ResultSetMetaData meta=rs.getMetaData();
对于(int index=1;index将isNotified列的数据类型更改为数据库中的TINYINT,然后重试插入
isNotified TINYINT(1)
Bool,Boolean:这些类型是TINYINT(1)的同义词。零值被视为false。非零值被视为true。如果您观察代码
try {
time = rs.getString("Timestamp");
System.out.println("time: " + time);
} catch (Exception e) {
System.out.println("Timestamp error: " + e);
e.printStackTrace();
}
}
您在这种格式中使用了“Timestamp”,但如果您将其更改为数据库中指定的“Timestamp”,希望它能正常工作。您能更改吗
System.out.println("Column " + index + " is named " + meta.getColumnName(index));
到
这样我们就可以看到“Message”列名中是否有空格了
我认为,错误消息出现在第5列和第6列之间这一事实并不重要,因为一个是标准输出,另一个是标准错误,它们不是同步的输出流
(另请参见前面关于时间戳与时间戳的回答。)听起来表元数据已损坏。您应该能够通过删除并重新创建表来纠正此问题,尽管如果元数据确实损坏,您可能无法删除表。如果是这种情况,或者您需要保留数据,备份和恢复整个数据库是可行的方法,但请检查SQL转储文件b在删除损坏的数据库之前,请先还原和/或还原到另一个数据库名称。根据具体的错误,转储中可能缺少问题列
如果不选择刷新数据库,则有一些方法可以执行有针对性的修复,但我不是专家,因此无法就此向您提供建议。再次备份数据库并验证备份是否完整(即,它包含所有列)在继续之前。如果这是一个生产数据库,我会非常小心地从互联网上获取有关操作元数据的建议。版本、存储引擎和环境的细微差异可能会影响您的操作,并且鉴于问题的性质,您不能进行试运行。您有任何触发器吗?您有吗如果在SQL语句中手动设置Int/Boolean,则会出现错误?例如,尝试“从通知中选择*,其中UserIDTo=1,isNotified=0”并在不设置PreparedStatement变量的情况下执行它。列名中是否有一些空格或奇怪的字符?@abmitchell我已经按照您所说的方式尝试过了,但仍然遇到了相同的错误我建议您调试jdbc代码,以找出引发异常的位置,并尝试跟踪未达到预期效果的比较成功。问题可能出在您的代码/配置中,但调试到jdbc将帮助您了解哪些不符合要求。我在数据类型中没有看到布尔选项,在MySQL EDIT btw中,我在另一个表中有相同类型的字段,并且我使用了'setBoolean()'在我的java代码中,它可以很好地工作,您使用的是哪个版本的MSQL?不确定您为什么建议这样做,我到处使用Bit(1),并且没有出现问题。从MySQL命令行:服务器版本:5.6.13-log MySQL社区服务器(GPL)
System.out.println("Column " + index + " is named '" + meta.getColumnName(index) + "'");