String str = "insert into table(USER,PWD) values(username,password)";
JavaBean bean = new JavaBean();
JavaBean封装了username和password
我想把sql中的username替换成bean.getUsername(),password替换成bean.getPassword()
我用的是sql = sql.replaceAll("username",bean.getUsername());和
        sql = sql.replaceAll("username",bean.getPassword();
这个就有个问题,如果username或password为null,那就会报错
遇到这种情况,我要怎么把bean.getUsername()得到的值就写成null,把sql里的username给替换了(换成null)
注意,这只是个例子,因为bean里有很多属性,我不能挨个判断书否为null再去替换,想一次性替换成功,即有值就替换成得到的值,是null就替换成null
这个,各位大侠,有什么高招?

解决方案 »

  1.   

    你用PreparedStatement呀
    PreparedStatement pstat=con.prepareStatement(insert into table(USER,PWD) values(?,?)"; 
    pstat.setString(0,bean.getUsername());
    pstat.setString(1,bean.getPassword()); 
    pstat.execute();
    你再看有没有错?
      

  2.   

    可以不用判断啊:sql = sql.replaceAll("username",bean.getUsername()+""); 
    sql = sql.replaceAll("username",bean.getPassword()+""); 
      

  3.   

    PreparedStatement 才是王道,看看 1 楼的吧。
      

  4.   


    不能用判断,判断是否为空后,楼主的登陆可以用SQL注入方法攻破,应该用PreparedStatement。
    PreparedStatement肯定能解决,看一楼
      

  5.   

    INSERT INTO cfgdb..CFG_JOB_INPUT(JOB_ID,JOB_NAME,START_DATE,END_DATE,UNIT,COUNTS,
    ENABLED,RUNNING,JOB_TYPE_ID) (SELECT isnull(MAX(JOB_ID),0)+1,'?',
    '?','?','?',?,1,?,7 FROM cfgdb..CFG_JOB_INPUT)PreparedStatement我还不太会用,请帮我看看我这个sql,这是Sybase数据库的
    PreparedStatement pstmt = (PreparedStatement)MyDBConnection.getPreStatement(addtype1toinput);
    pstmt.setString(1, t.getJobname());
    pstmt.setString(2, start);
    pstmt.setString(3, end);
    pstmt.setString(4, unit);
    pstmt.setString(5, count);
    pstmt.setString(7, running);pstmt的连接没问题,t是我定义的JavaBean的对象
    我用了这后,报java.sql.SQLException: JZ0SB: 参数索引超出范围: 3。
    能帮我改一下吗?
      

  6.   

    pstmt.setString(7, running); ???
    总共才6个值啊
      

  7.   

    INSERT INTO cfgdb..CFG_JOB_INPUT(JOB_ID,JOB_NAME,START_DATE,END_DATE,UNIT,COUNTS,
    ENABLED,RUNNING,JOB_TYPE_ID) (SELECT isnull(MAX(JOB_ID),0)+1,'?',
    '?','?','?',?,1,?,7 FROM cfgdb..CFG_JOB_INPUT)
    中的 '?' 什么意思
    预编译语句,?是占位符 ,不需要加‘’呀
      

  8.   

    8楼说的对,那个写错了,不过他报java.sql.SQLException: JZ0SB: 参数索引超出范围: 3。
    这是怎么回事,怎么到3就执行不了了?
      

  9.   

    '?'是不算参数的,那个SQL真正的参数只有二个,所以3就出错了