boolean autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

int rootId = -1;
String sql = "insert into article values(null,?,?,?,?,now(),?)";//pid,rootId,title,cont,pdate,isleaf

PreparedStatement pre = DB.preparedStatement(conn, sql,Statement.RETURN_GENERATED_KEYS);


pre.setInt(1,0);
pre.setInt(2,rootId);
pre.setString(3, title);
pre.setString(4, content);
pre.setInt(5, 0);
pre.executeUpdate();
ResultSet rs = pre.getGeneratedKeys();
rs.next();
rootId = rs.getInt(1);
System.out.println("rootId "+rootId);

Statement stmt = DB.getStatement(conn);
stmt.executeUpdate("update article set rootid =" + rootId +"where id ="+ rootId);
    

conn.commit();
conn.setAutoCommit(autoCommit);
DB.close(conn);

以上代码每次运行都报一个错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id =42' at line 1
我查了半天,我数据库中自动生成的id号才36而有程序打印输出的id号已经41了,可能是我前面操纵数据库的时候有问题,但是Statement.RETURN_GENERATED_KEYS这个值好像每次都是自增一的,所以导致了以上错误,我该怎么解决呢?请大神帮忙!我已经想了很久了!没有办法!

解决方案 »

  1.   

    String sql = "insert into article values(null,?,?,?,?,now(),?)";
    指定插入的字段列String sql = "insert into article(rootId,title,cont,pdate,isleaf
    ) values(?,?,?,?,now(),?)";
    id让其自增。
      

  2.   

    stmt.executeUpdate("update article set rootid =" + rootId +"where id ="+ rootId);
        这个有问题,应该是
    stmt.executeUpdate("update article set rootid =" + rootId +" where id ="+ rootId);
    注意where前面有空格的。
        
      

  3.   

    你的字段有6 个 你插值得时候怎么给7 个 你给个null干什么呢??pre.setInt(1,0);
     pre.setInt(2,rootId);
     pre.setString(3, title);
     pre.setString(4, content);
     pre.setInt(5, 0);你的这只有5 个啊  isleaf哪里去了????写掉了吧??