我是学生,我已经尝试编写此代码,以显示存储在“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));
}
}
答案 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"));
}