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

Java 如何解决com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表'task4DB.tst'不存在异常,java,mysql,jdbc,Java,Mysql,Jdbc,我是一名学生,我试图编写这段代码,以显示存储在mysql服务器上的数据库中的员工的名字,我得到了这些异常,尽管表存在!!: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表'task4DB.tst'不存在 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:936 位于com.mysql.jdbc.MysqlIO.checkErrorPacketMysqlIO.java:29

我是一名学生,我试图编写这段代码,以显示存储在mysql服务器上的数据库中的员工的名字,我得到了这些异常,尽管表存在!!:

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表'task4DB.tst'不存在 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:936 位于com.mysql.jdbc.MysqlIO.checkErrorPacketMysqlIO.java:2985 位于com.mysql.jdbc.MysqlIO.sendCommandMysqlIO.java:1631 位于com.mysql.jdbc.MysqlIO.sqlQueryDirectMysqlIO.java:1723 位于com.mysql.jdbc.Connection.execSQLConnection.java:3283 位于com.mysql.jdbc.PreparedStatement.executeInternalPreparedStatement.java:1332 位于com.mysql.jdbc.PreparedStatement.executeQueryPreparedStatement.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));

      }

}
它应该是con.prepareStatement\u SQL\u QUERY

Well createStatement不返回preparedStatement-它返回一个语句。您需要将SQL传递给prepareStatement方法:

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

虽然您仍然可以调用接受SQL的executeQuery重载,但通常不应该这样做。我认为把准备好的声明扩展成声明可能是一个错误

请注意,还应在finally块中关闭连接、语句和结果集。另外,我已经重命名了RS变量,以在某种程度上遵循Java命名约定,尽管我可能只是将其称为results或类似的名称

此外,您的循环已中断-fName为空,因此在其上循环没有意义。您可能想要:

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

类似这样的内容:PreparedStatement st=con.PreparedStatement;prepareStatement没有无参数重载-OP需要向prepareStatement提供SQL,然后在调用executeQuery时不提供它。换言之,我认为这个答案不够详细,没有什么帮助。即使在更改之后,OP的代码还需要做很多工作。看看我的答案。是的。。下次我会详细说明:我想我不需要在你的详细答案之后编辑我的答案谢谢,我认为这个答案很有用,但是当我修改了代码,我有这些例外,见帖子plz@Akari:这个异常对我来说似乎是不言自明的-你试图查询的表不存在。但是它已经存在了:在task4DB中,我用mysql填充了这个表workbench@Akari例例例外情况并非如此。仔细检查表名。我们帮不了你多少忙。
while (rs.next()) {
    fName.add(rs.getString("fName"));
}