我越來越對我對運行使用JDBC數據庫的函數一個奇怪的SQLException。 的SQLException:列「消息」未找到。奇怪的SQLException:列未找到
我有這個在我的功能:
st = con.prepareStatement("SELECT NotificationID,UserIDFrom,UserIDTo,Message,Timestamp,isNotified FROM notification WHERE UserIDTo=? AND isNotified=?");
st.setInt(1, _UserID);
st.setBoolean(2, false);
System.out.println("st is: " + st);
rs = st.executeQuery();
而且我得到了這個錯誤,所以我說這個st.executeQuery()
後:
ResultSetMetaData meta = rs.getMetaData();
for (int index = 1; index <= meta.getColumnCount(); index++) {
System.out.println("Column " + index + " is named " + meta.getColumnName(index));
}
當我跑我的代碼再次,這是我得到結果:
Column 1 is named NotificationID
Column 2 is named UserIDFrom
Column 3 is named UserIDTo
Column 4 is named Message
Column 5 is named TimeStamp
Exception in thread "main" java.sql.SQLException: Column 'Message' not found.
Column 6 is named isNotified
這裏是我的表的設計截圖,從我的SQL工作臺
而在表中的數據
我真的想不通這是怎麼回事一個在這裏....任何人都可以幫幫忙?
編輯
我已經取代了*
在SELECT
聲明只是添加一些,我才注意到這個問題。
如果我從選擇刪除Message
列然後我得到了TimeStamp
列同樣的錯誤。如果我刪除這兩列,那麼我就不會有錯誤。
EDIT2
OK,這是我得到的錯誤的部分,我得到兩個關於信息和時間戳:
while (rs.next()) {
NotificationID = rs.getInt("NotificationID");
System.out.println("NotificationID: " + NotificationID);
SenderID = rs.getInt("UserIDFrom");
System.out.println("SenderID: " + SenderID);
From = findUserName(SenderID);
try {
body = rs.getString("Message");
System.out.println("body: " + body);
} catch (Exception e) {
System.out.println("Message error: " + e);
e.printStackTrace();
}
try {
time = rs.getString("Timestamp");
System.out.println("time: " + time);
} catch (Exception e) {
System.out.println("Timestamp error: " + e);
e.printStackTrace();
}
}
我上getString()
方法爲每列
堆棧跟蹤的錯誤TimeStamp
(同爲Message
):你isNotified的
java.sql.SQLException: Column 'TimeStamp' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5733)
at NotifyMe_Server.Database.getUnNotified(Database.java:444)
at tests.Tests.main(Tests.java:39)
你有沒有觸發器在桌子上? – BevynQ
如果您在SQL語句中手動設置Int/Boolean,是否會出現錯誤?即,嘗試「選擇*從通知WHERE UserIDTo = 1 AND isNotified = 0」並執行它,而不設置PreparedStatement變量。 – hotforfeature
可以在列名中包含一些空格或奇怪的字符嗎? – Taylor