如何解决com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表'task4DB.tst'不存在异常

时间:2013-06-18 13:39:04

标签: java mysql jdbc

我是学生,我已经尝试编写此代码,以显示存储在“mysql”服务器上的数据库中的员工的名字,虽然表存在,但我有这些例外! :

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)     在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)     在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));

      }

}

2 个答案:

答案 0 :(得分:5)

应为con.prepareStatement("THE_SQL_QUERY")

答案 1 :(得分:4)

createStatement不会返回PreparedStatment - 它会返回Statement。您需要将SQL传递给prepareStatement方法:

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

然后:

ResultSet rs = st.executeQuery();

虽然你可以仍然调用带有SQL的executeQuery的重载,但你通常不应该这样做。 (我认为PreparedStatement扩展Statement可能是错误的。)

请注意,您还应该关闭finally块中的连接,语句和结果集。另外,我已经将RS变量重命名为稍微遵循Java命名约定,尽管我可能只是将其称为results或类似的东西。

此外,你的循环被破坏了 - fName是空的,所以循环没有任何意义。你可能想要:

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