jdbc问题

oHaiNaBaiChuan 2013-09-09 01:31:08
以下代码执行时没有问题但是数据库没有更新,发现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();
}
...全文
181 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
蟹道人 2013-09-09
  • 打赏
  • 举报
回复
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语句。
摆烂办不到 2013-09-09
  • 打赏
  • 举报
回复
引用 10 楼 yps_leaf 的回复:
[quote=引用 4 楼 Q80470101 的回复:] 我猜测是表锁死的原因。 select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。 update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
同上:MySQL不允许SELECT FROM后面指向用作UPDATE的表。[/quote] 理由在哪里? 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: 0 mysql>
摆烂办不到 2013-09-09
  • 打赏
  • 举报
回复
引用 4 楼 Q80470101 的回复:
我猜测是表锁死的原因。 select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。 update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
当我这样用的时候 并未出现表被锁定现象
fearlessMore 2013-09-09
  • 打赏
  • 举报
回复
引用 11 楼 zakaz168 的回复:
[quote=引用 3 楼 xxhhbb1538 的回复:] 我觉得跟你多个sql共用一个 Statement stat有关系,分不同的 Statement试试。
我觉得也是这个原因[/quote]你的头像真性感 +1
丿Kevin 2013-09-09
  • 打赏
  • 举报
回复
引用 3 楼 xxhhbb1538 的回复:
我觉得跟你多个sql共用一个 Statement stat有关系,分不同的 Statement试试。
我觉得也是这个原因
yps_leaf 2013-09-09
  • 打赏
  • 举报
回复
引用 4 楼 Q80470101 的回复:
我猜测是表锁死的原因。 select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。 update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
同上:MySQL不允许SELECT FROM后面指向用作UPDATE的表。
lfc029 2013-09-09
  • 打赏
  • 举报
回复
你的sql语句看起来怎么这么变扭,插入的表是什么PID
GodisaAVman 2013-09-09
  • 打赏
  • 举报
回复
DevId 后面的值加单引号 ‘12343434’
attach_finance 2013-09-09
  • 打赏
  • 举报
回复
select会锁表?! 我和我的小伙伴表示震惊了。。。
zyrobert 2013-09-09
  • 打赏
  • 举报
回复
引用 4 楼 Q80470101 的回复:
我猜测是表锁死的原因。 select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。 update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
+1
oHaiNaBaiChuan 2013-09-09
  • 打赏
  • 举报
回复
我想这个最有可能,待会试试
家里敷泥呀 2013-09-09
  • 打赏
  • 举报
回复
我猜测是表锁死的原因。 select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。 update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
  • 打赏
  • 举报
回复
我觉得跟你多个sql共用一个 Statement stat有关系,分不同的 Statement试试。
oHaiNaBaiChuan 2013-09-09
  • 打赏
  • 举报
回复
试了没有效果啊,这个应该跟close没有关系。
student-ai 2013-09-09
  • 打赏
  • 举报
回复
把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();
     }


62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧