以下代码执行时没有问题但是数据库没有更新,发现insert 语句可以执行,update语句不能执行,但是返回正确,没有抛出异常。然后我就selec语句注释掉,update就能执行了,求解,在线等。public static void main(String[] args)
{
update();
} private static void update() {
String url = "jdbc:mysql://localhost/mydb";
try {
Connection con = DriverManager.getConnection(url,"root","root");
Statement stat = con.createStatement();
ResultSet res = stat.executeQuery("select * from patienttb where DevID="+5149012989038001L);
res.next();
String PatinetID = res.getString("PatientID");
String query1 = "update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID="+PatinetID;
String query2 = "insert into PID"+PatinetID+"(Temp,HeartRate,Power) value("+41+","+73+","+52+")";
stat.executeUpdate(query1);
stat.executeUpdate(query2);
stat.close();

} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}

解决方案 »

  1.   

    把close()放在最后面试试:
    public static void main(String[] args)
        {
            update();
        }
     
        private static void update() {
            String url = "jdbc:mysql://localhost/mydb";
            try {
                Connection con = DriverManager.getConnection(url,"root","root");
                Statement stat = con.createStatement();
                ResultSet res = stat.executeQuery("select * from patienttb where DevID="+5149012989038001L);
                res.next();
                String PatinetID = res.getString("PatientID");
                String query1 = "update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID="+PatinetID;
                String query2 = "insert into PID"+PatinetID+"(Temp,HeartRate,Power) value("+41+","+73+","+52+")";
               System.out.println( stat.executeUpdate(query1)); //可以这样看下返回值是否正常.下面相同.
                stat.executeUpdate(query2);
                //stat.close();
                 
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }finally{
    stat.close();
         }
      

  2.   

    试了没有效果啊,这个应该跟close没有关系。
      

  3.   

    我觉得跟你多个sql共用一个  Statement stat有关系,分不同的 Statement试试。
      

  4.   

    我猜测是表锁死的原因。
    select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。
    update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
      

  5.   

    select会锁表?!
    我和我的小伙伴表示震惊了
      

  6.   

    DevId 后面的值加单引号 ‘12343434’
      

  7.   

    你的sql语句看起来怎么这么变扭,插入的表是什么PID
      

  8.   

    同上:MySQL不允许SELECT FROM后面指向用作UPDATE的表。
      

  9.   

    同上:MySQL不允许SELECT FROM后面指向用作UPDATE的表。理由在哪里? MYSQL有这样的不允许?mysql> select *from valutest;
    +------+------+
    | a    | b    |
    +------+------+
    |    2 |    1 |
    +------+------+
    1 row in set (0.00 sec)mysql> update valutest set a =3 where b =1;
    Query OK, 1 row affected (0.12 sec)
    Rows matched: 1  Changed: 1  Warnings: 0mysql>
      

  10.   

    public static void main(String[] args)
        {
            update();
        }
     
        private static void update() {
            String url = "jdbc:mysql://localhost/mydb";
            try {
                Connection con = DriverManager.getConnection(url,"root","root");
                Statement stat1 = con.createStatement();//创建操作数据库的对象
               Statement stat2 = con.createStatement();//创建操作数据库的对象
                Statement stat3 = con.createStatement();//创建操作数据库的对象
                ResultSet res = stat1.executeQuery("select * from patienttb where DevID="+5149012989038001L);
                res.next();
                String PatinetID = res.getString("PatientID");
                String query1 = "update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID="+PatinetID;
                String query2 = "insert into PID"+PatinetID+"(Temp,HeartRate,Power) value("+41+","+73+","+52+")";
    ///////////执行sql语句
                stat2.executeUpdate(query1);
                stat3.executeUpdate(query2);
                 res.close();//关闭结果集
                stat1.close();//用完之后关闭
                 stat2.close();//用完之后关闭
                stat2.close();//用完之后关闭
                   con.close(); //用完之后关闭
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
    这样就没问题了,一个数据库的操作对象只能执行一个sql语句。