日期:2014-05-17  浏览次数:20788 次

一个关于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哪里去了????写掉了吧??