2013-06-18 47 views
0

我是學生,我試圖編寫此代碼以顯示員工的名字這些數據存儲在「mysql」服務器的數據庫中,儘管表存在這些異常! :如何解決com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表'task4DB.tst'不存在例外

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表 'task4DB.tst' 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)不存在 在com.mysql.jdbc .MysqlIO.checkErrorPacket在(MysqlIO.java:2985) 在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) COM .mysql.jdbc.Connection.execSQL(Connection.java:3283) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467 )

如何解決這些問題:(??

public static void search() throws ClassNotFoundException, SQLException 

{  
    Class.forName("com.mysql.jdbc.Driver"); 

    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/task4DB?" 
       + "user=root&password=123"); 

    PreparedStatement st = con.prepareStatement("select * from tst"); 

    ArrayList<String> fName = new ArrayList<String>(); 
    ArrayList<String> lName = new ArrayList<String>(); 
    ArrayList<Integer> ids = new ArrayList<Integer>(); 


    ResultSet RS=st.executeQuery("select * from tst "); 

     loop1: 
    for(String s : fName) 

    { 

      while (RS.next()) { 
fName.add(RS.getString("fName")); 


    } 

     for(int i=0;i<fName.size();i++) 

     { 
      System.out.println(fName.get(i)); 

     } 

} 

回答

4

createStatement沒有返回PreparedStatment - 它返回一個Statement。您需要將SQL傳遞給prepareStatement方法代替:

PreparedStatement st = con.prepareStatement("select * from tst"); 

然後:

ResultSet rs = st.executeQuery(); 

雖然你可以仍然調用executeQuery超載這需要SQL,你一般不應該。 (我認爲這可能是一個錯誤,使PreparedStatement擴展Statement。)

請注意,您還應該關閉finally塊中的連接,語句和結果集。此外,我已將RS變量重命名爲遵循Java命名約定,儘管我可能會將其稱爲results或類似的東西。

此外,你的循環被打破 - fName是空的,所以循環它沒有意義。你可能想要:

while (rs.next()) { 
    fName.add(rs.getString("fName")); 
} 
+0

謝謝你我認爲這個答案很有幫助,但是當我修改代碼時,我有這些例外「該帖子plz「 – Akari

+0

@Akari:那麼這個異常對我來說似乎是不言自明的 - 你試圖查詢的表不存在。 –

+0

但是它已經存在:( 在task4DB中,我用mysql工作臺填充了這個表格 – Akari

5

應該con.prepareStatement("THE_SQL_QUERY")

+0

這樣的事情: PreparedStatement st = con.PreparedStatement(); – Akari

+1

'prepareStatement'沒有無參數重載--OP需要將SQL提供給'prepareStatement',然後* not *在調用'executeQuery'時提供它。換句話說,我不認爲這個答案足夠詳細,有幫助。 –

+1

即使在更改之後,在OP代碼運行之前還有很多工作要做。看到我的答案。 –

相關問題