我正在尝试将PreparedStatement用于我的SQLite搜索。声明工作正常,但我遇到了PreparedStatement的问题。
这是我的搜索方法:
public void searchSQL(){
try {
ps = conn.prepareStatement("select * from ?");
ps.setString(1, "clients");
rs = ps.executeQuery();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
但是我收到了这个错误:
java.sql.SQLException:near“?”:语法错误 org.sqlite.DB.throwex(DB.java:288)at org.sqlite.NestedDB.prepare(NestedDB.java:115)at org.sqlite.DB.prepare(DB.java:114)at org.sqlite.PrepStmt。(PrepStmt.java:37)at org.sqlite.Conn.prepareStatement(Conn.java:231)at org.sqlite.Conn.prepareStatement(Conn.java:224)at org.sqlite.Conn.prepareStatement(Conn.java:213)
THX
答案 0 :(得分:4)
列参数可以吗?不是表名; 您的方法必须如下所示:
public void searchSQL()
{
try
{
ps = conn.prepareStatement("select * from clients");
rs = ps.executeQuery();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
如果我这样做,它工作正常,请看这个函数:
public void displayContentOfTable()
{
java.sql.ResultSet rs = null;
try
{
con = this.getConnection();
java.sql.PreparedStatement pstatement = con.prepareStatement("Select * from LoginInfo");
rs = pstatement.executeQuery();
while (rs.next())
{
String email = rs.getString(1);
String nickName = rs.getString(2);
String password = rs.getString(3);
String loginDate = rs.getString(4);
System.out.println("-----------------------------------");
System.out.println("Email : " + email);
System.out.println("NickName : " + nickName);
System.out.println("Password : " + password);
System.out.println("Login Date : " + loginDate);
System.out.println("-----------------------------------");
}
rs.close(); // Do remember to always close this, once you done
// using it's values.
}
catch(Exception e)
{
e.printStackTrace();
}
}
使ResultSet成为局部变量,而不是实例变量(就像在您身边一样)。完成后,通过撰写rs.close()
和rs = null
来关闭它。
答案 1 :(得分:3)
无法在预准备语句中传递表名。
方法setString
是您希望在where子句中传递变量的时间,例如:
select * from clients where name = ?
答案 2 :(得分:1)
thx for replylies guys ,,, 现在它的工作正常。 我注意到sql查询不能保持?也是专栏。 所以,这个对PreparedStatement的SQL查询正在运行:
String sql = "select * from clients where name like ?";
ps = conn.prepareStatement(sql);
ps.setString(1, "a%");
rs = ps.executeQuery();
但是,如果我尝试将列用作setString,它就不起作用:
String sql = "select * from clientes where ? like ?";
ps = conn.prepareStatement(sql);
ps.setString(1, "name");
ps.setString(2, "a%"):
rs = ps.executeQuery();
我说错了吗?或者我该如何绕过这个? 再次