请问大家 我在更新数据库时期中id为int类型,在sql中怎么写?如下有错误么?
运行提示是数据库有一条受影响,但是结果却是没有更新,数据还和以前一样
先谢谢大家/******************************修改大类别**************************************/
public static int bigTypeModify(int id, String bigname, String introduce) {
Connection conn = null;
PreparedStatement pstmt = null;
int flag = -1;
String sql = "";
try {
conn = DB.getConn();
sql = "update tb_bigtype set ? = '"+bigname+"',? = '"+introduce+"'where ? = id ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "bigtypename");
pstmt.setString(2, "introduce");
pstmt.setInt(3, id);
flag = pstmt.executeUpdate();
System.out.println(sql); //
System.out.println(flag); //
} catch(SQLException e) {
e.printStackTrace();
} finally {
DB.close(pstmt);
DB.close(conn);
}
return flag;
}

解决方案 »

  1.   

    这个程序的结果是当flag返回一是 更新成功,我在action中接受到得确实是1 但是结果在数据库种没有更新
      

  2.   

    ? = id 改为 id=?。再看看数据库是不是autoCommit设为false了
      

  3.   

    哦,这个问题啊,
    当你是DDL语句的时候必须要考虑到事务,
    也就是说,update,delete,insert
    因为jdbc默认是关闭事务的,
    在这些操作之前,你应该开启,事务,然后操完了之后要在commit!
    否则的话就会出现你上面说说的情况!
    还有,你的Sql语句写的很烂!
    细节很重要!
      

  4.   

    不懂,为什么
    sql = "update tb_bigtype set ? = '"+bigname+"',? = '"+introduce+"'where ? = id ";
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, "bigtypename");
    pstmt.setString(2, "introduce");
    pstmt.setInt(3, id); 
    既然字段名都写死了,不写成把值当问号,而把字段名当问号?
    sql = "update tb_bigtype set bigtypename = ?,introduce=? where id =? ";
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, bigname); 
    pstmt.setString(2, introduce); 
    pstmt.setInt(3, id); 
      

  5.   

    sql语句显示修改成功
    数据库没显示?要commit的  数据库才显示的