一个关于id自增的问题!求帮组!
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这个值好像每次都是自增一的,所以导致了以上错误,我该怎么解决呢?请大神帮忙!我已经想了很久了!没有办法!
------解决方案--------------------不给他ID让它自己给 操作完之后在数据库查回这个对象
------解决方案--------------------String sql = "insert into article values(null,?,?,?,?,now(),?)";
指定插入的字段列String sql = "insert into article(rootId,title,cont,pdate,isleaf
) values(?,?,?,?,now(),?)";
id让其自增。
------解决方案--------------------一般数据库的主键id不是自动生成的么。
------解决方案--------------------
stmt.executeUpdate("update article set rootid =" + rootId +"where id ="+ rootId);
这个有问题,应该是
stmt.executeUpdate("update article set rootid =" + rootId +" where id ="+ rootId);
注意where前面有空格的。
------解决方案--------------------你的字段有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哪里去了????写掉了吧??