sql准备语句和java

时间:2015-04-08 13:11:19

标签: java sql

我正在使用一份准备好的声明如果我跑

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);

感谢您的帮助

3 个答案:

答案 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()