我正在使用一份准备好的声明如果我跑
Select * from users where name = 'john' and sName = sName
我得到一个名叫约翰的人的名单。但是,如果我执行查询
Select * from users where name= ? and sName = ?
查询没有返回任何内容,我认为是因为它将''添加到正在传递的字符串中?
//n value is passed through GUI interface.
String s = "sName";
PreparedStatement prep = "Select * from users where name= ? and sName= ?";
prep.setString(1, n);
prep.setString(2, s);
感谢您的帮助
答案 0 :(得分:2)
你做错了。 您必须先创建一个 PreparedStatement 变量,然后使用查询对其进行初始化,然后使用 PreparedStatement 的 executeQuery()方法执行它。
看起来像......
String s = "surname";
String query = "Select * from users where name= ? and surname = ?";
PreparedStatement prep = connection.prepareStatement(query);
prep.setString(1, n);
prep.setString(2, s);
ResultSet rs = prep.executeQuery();
答案 1 :(得分:1)
首先,请注意
Select * from users where name = 'john' and sName = sName
sName=sName
如果sName
是列名或不起作用,则不执行任何操作。
然后,当你有一个陈述
Select * from users where name= ? and surname = ?
您必须使用PreparedStatement#setXxx()
方法设置这两个参数。由于您使用String s = "surname"
设置了2d参数,因此您将获取具有姓氏值(字符串"surname"
)的所有用户,以及您在第一个参数中设置的名称。看起来不太可能,这就是为什么你没有结果。
注意1:使用此语句,您无法仅根据用户的名称获取用户。您必须定义另一个语句,例如
Select * from users where name= ?
注意2:如果数据库中有用户,没有姓氏,即surname
值为NULL
,那么您可以使用第一个语句
// n variable contains the name
String query = "Select * from users where name= ? and surname = ?";
PreparedStatement prep = connection.prepareStatement(query);
prep.setString(1, n);
prep.setNull(2, Types.VARCHAR);
ResultSet rs = prep.executeQuery();
答案 2 :(得分:0)
使用executeQuery()而不是execute()