以下代码执行时没有问题但是数据库没有更新,发现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();
}
{
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();
}
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();
}
select和update操作的同一张表,select会把表锁住,所以update无效,你把两条语句合并在一起试试。
update patienttb set Temp="+41+",HeartRate="+73+",Power="+52+" where DevID=(select....)"
我和我的小伙伴表示震惊了
+------+------+
| 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>
{
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语句。