String sql1= "insert into revlet" + "(rname,rmid,rcontent,rDate) values('" + rname + "'," + rmid+ ",'" + rcontent + "','" + rDate+ "');";
String sql2="update message set mnumber=mnumber+1 where mid="+ rmid;
try {
pst = getConn().prepareStatement(sql1+sql2);
pst.executeUpdate();
    } catch (SQLException e) {

e.printStackTrace();
    } finally {
close();
    }
问一下这样把sql1和sql2语句加在一起`程序运行后没数据库操作没有成功``可是这SQL语句是对的呀`在mysql命令行可以把sql1+sql2的内容一起运行`
但是把sql1或者sql2放到pst = getConn().prepareStatement()里数据库操作也可以成功`
可是我现在想让这2条数据库操作语句一起运行了该怎么改呀?

解决方案 »

  1.   

    sql语句有一个注入的风险和其他的一些个安全问题,所以PrepareStatement类会对传入的sql语句进行一定的安全检查,一般对sql语句只检查到第一个‘;’号为止,若后面还有字符串则可能就不会执行。
      

  2.   

    你可以在百度或者谷歌上去搜一搜PreparedStatement类的用法
      

  3.   

    你写成一个事务 SQL1,SQL2一个commit; 这样不就相当于2个都执行了么
      

  4.   

    Connection   conn   =   ServiceLocator.getInstance().getConnection(); 
    conn.setAutoCommit(false); 
    ps   =   conn.prepareStatement(sql); 
    for(int   i=0;   i <roomids.length;   i++)           ps.setString(1,ksid); 
            ps.setString(2,roomids[i]); 
            ps.addBatch(); 

    ps.executeBatch();   
    conn.setAutoCommit(true); 给你段代码,你看看吧。主要的核心是 executeBatch() 方法,这个方法可以进行批量的进行数据库语句的执行。 
      

  5.   

    批处理指的是一条sql语句,很多组参数,和楼主描述的问题不一样
    我觉得写个存储过程可以解决楼主的问题
      

  6.   

    一个prepareStatement不能同时执行两个sql语句  LZ只能创建两个prepareStatement来实现