0

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

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: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));

      }

}
4

2 回答 2

4

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

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

然后:

ResultSet rs = st.executeQuery();

虽然您仍然可以调用需要 SQL 的重载executeQuery,但通常不应该这样做。(我认为进行PreparedStatementextend可能是一个错误Statement。)

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

此外,你的循环被打破了 -fName是空的,所以没有必要循环它。你可能想要:

while (rs.next()) {
    fName.add(rs.getString("fName"));
}
于 2013-06-18T13:41:05.313 回答
4

它应该是con.prepareStatement("THE_SQL_QUERY")

于 2013-06-18T13:40:03.733 回答