编程时遇到登录的处理:用username作为查找条件来获取password,判断从数据库中获得的password与用户输入的password是否一致,一致就跳转到成功页面,不一致就跳转到失败页面。可问题是Oracle中字符串的查找要加引号,数据库中的username,password都是加引号的,怎么才能和用户的相匹配的,我的sql语句是语句是这样写的

public boolean checkUser(String username,String password){
boolean b=false;
try {
psm=con.prepareStatement("select password from test where username='username'");
rs=psm.executeQuery();
while(rs.next()){
String dbpassword=rs.getString(1);
if(dbpassword.equals(password)){
b=true;
}
}
但这样得到的password不可能会匹配,请高手帮一下忙,怎么才能获得正确的password

解决方案 »

  1.   

    public boolean checkUser(String username,String password){
    boolean b=false;
    try {
    psm=con.prepareStatement("select password from test  where username=?");
    rs=psm.setString(0, username);
    while(rs.next()){
    String dbpassword=rs.getString(1);//这里建议用rs.getString("password");password是数据库的字段名
    if(dbpassword.equals(password)){
    b=true;
    }
    }
      

  2.   


    public boolean checkUser(String username,String password){
    boolean b=false;
    try {
    psm=con.prepareStatement("select password from test  where username=? and password=?");
    psm.setString(0, username);
    psm.setString(1, password);
    rs = psm.executeQuery();
    if(rs.next()){
    b=true;
    }
    return b;这样应该也可以,上面的N多问题,搞糊涂了..
      

  3.   

    psm.setString(1, username);
    psm.setString(2, password);
     这样才对jdbc中序号是从1开始的
      

  4.   

    为什么要吧数据库中的值加引号呢如果这样就转义吧
    username前后加2个或者3个单引号你测试一下
      

  5.   

    太感谢楼上二位了!按照二位的说法的确运行成功了。不过我仍感到有点疑惑,为什么用这种方式就能解决问题呢。比如说,数据库中有个字段是test,我要根据这个字段查找的话,应该写成'test'。但用了这种方式后却可以。
      

  6.   

    我要根据这个字段查找的话,应该写成'test' 这样表示一个普通的字符串,它的内容是test而test = ? 这样表示的是test字段的值等于prep中调用的setString(1, str)中的str的值