java实现sql 语句实现同一列上两个值互换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现sql 语句实现同一列上两个值互换相关的知识,希望对你有一定的参考价值。

sql 语句实现同一列上两个值互换
我用两条update语句但是第一个更新以后,值已经不是以前的值,是第二个值,所以第二个不更新
String sql = "update s_student set sushehao=(select sushehao from s_student where studentnum='"+xuehao2+"') where studentnum=?";
String sql1 = "update s_student set sushehao=(select sushehao from s_student where studentnum='"+xuehao1+"') where studentnum=?";
ConnDb db = ConnDb.createInstance();
db.setPs(sql);
db.setString(1,xuehao1);
db.update();
db.setPs(sql1);
db.setString(1,xuehao2);
db.update();
请高手帮忙啊,怎么实现??
String xuehao1 = tfXuehao1.getText();
String xuehao2 = tfXuehao2.getText();
String sushehao1="select sushehao from s_student where studentnum=xuehao1";
String sushehao2="select sushehao from s_student where studentnum=xuehao2";
String sql = "update s_student set sushehao=sushehao2 where studentnum=xuehao1";
String sql1 = "update s_student set sushehao=sushehao1 where studentnum=xuehao2";
ConnDb db = ConnDb.createInstance();
db.setPs(sql);
db.update();
db.setPs(sql1);
db.update();
改成这样了,但是还是不对 错误信息是[SQLServer]列名 'sushehao2' 无效。
如果这样sushehao1 sushehao2相当于select整条语句而不是select语句获得的值吧

如果不用存储过程,纯SQL语句的话,你就设两个临时变量把原先的值存起来再更新吧。。
select sushehao1 from s_student where studentnum=<xuehao1>
select sushehao2 from s_student where studentnum=<xuehao2>
update s_student set sushehao=<sushehao2> where studentnum=<xuehao1>
update s_student set sushehao=<sushehao1> where studentnum=<xuehao2>

不是要你照搬SQL呢。。你要替换值啊,比如第一条:
string sushehao1="select sushehao from s_student where studentnum= ‘" + xuehao1 + “’”;
要替换的都在<>里面括起来了

另外下面那个不要中间变量的别照做,就(a=a+b=5;)这句,你一条SQL要多长??你不怕麻烦??
UPDATE ..... SET ? = (SELECT A FROM ....) + (SELECT B FROM ....) WHERE ....????您有这精力去做志愿者,也给祖国做点奉献嘛。。。我多余的精力就给了志愿者协会了
参考技术A 看看这样一个简单的代码:
a = b;
b = a;
这样的代码能完成a和b的互换吗?显然不行
正确的方法之一是temp=a;a=b;b=temp,用sql表达是
select sushehao1 from s_student where studentnum=xuehao1
update s_student set sushehao=(select sushehao from s_student where studentnum=xuehao2) where studentnum=xuehao1
update s_student set sushehao=sushehao1 where studentnum=xuehao2
或者是前面同学提供的方法也可以,而且更直观。
参考技术B 这也就是交换两个变量的值,不引用第三变量,完全可以做到
如a=2,b=3

a=a+b=5;
b=a-b=2;
a=a-b=3;

现在用三条update语句就行了,怎么写,应该很简单了吧
参考技术C pstmt.close() ;
con.close() ;放在后面finally()里面
catch(Exception e)
System.out.println(e.getMessage());
return "failed";
finally(){
pstmt.close() ;
con.close() ;

java实现sql语句批处理

Statement实现批处理:

优点:能够处理多种不同结构的sql语句

缺点:不能预处理,执行效率较差。对于参数不同的同一条sql语句需要多次调用addBatch()

  1. package com.itheima.batch;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.Statement;  
  5.   
  6. import org.junit.Test;  
  7.   
  8. import com.itheima.util.DBUtil;  
  9.   
  10.   
  11. public class StatementBatch {  
  12.   
  13.     /*  mysql数据库: 
  14.         create database batch; 
  15.         use batch; 
  16.         create table mybatch( 
  17.             id int primary key auto_increment, 
  18.             name varchar(50) 
  19.         ); 
  20.         insert into mybatch values (null, ‘1‘); 
  21.         insert into mybatch values (null, ‘2‘); 
  22.         insert into mybatch values (null, ‘3‘); 
  23.         insert into mybatch values (null, ‘4‘); 
  24.      */  
  25.     @Test  
  26.     public void statementBatch() {  
  27.         Connection conn = null;  
  28.         Statement stat = null;  
  29.         try{  
  30.             conn = DBUtil.getConn();  
  31.             stat = conn.createStatement();  
  32.             stat.addBatch("create database batch");  
  33.             stat.addBatch("use batch");  
  34.             stat.addBatch("create table mybatch( id int primary key auto_increment, name varchar(50) )");  
  35.             stat.addBatch("insert into mybatch values (null, ‘1‘)");  
  36.             stat.addBatch("insert into mybatch values (null, ‘2‘)");  
  37.             stat.addBatch("insert into mybatch values (null, ‘3‘)");  
  38.             stat.addBatch("insert into mybatch values (null, ‘4‘)");  
  39.             stat.executeBatch();  
  40.         } catch (Exception e) {  
  41.             e.printStackTrace();  
  42.         } finally {  
  43.             DBUtil.close(conn, stat, null);  
  44.         }  
  45.     }  
  46. }  

PreparedStatement实现批处理:

优点:能够预处理,执行效率高;参数不同的同一条sql语句执行简便

缺点:只能批处理参数不同的同一条sql语句

  1. package com.itheima.batch;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.PreparedStatement;  
  5.   
  6. import org.junit.Test;  
  7.   
  8. import com.itheima.util.DBUtil;  
  9.   
  10. public class PrepBatch {  
  11.   
  12.     @Test  
  13.     public void prepBatch() {  
  14.           
  15.         Connection conn = null;  
  16.         PreparedStatement ps = null;  
  17.         try{  
  18.             conn = DBUtil.getConn();  
  19.             ps = conn.prepareStatement("insert into mybatch value(null, ?)");  
  20.             for(int i = 0; i < 1000; i++) {  
  21.                 ps.setString(1, "name" + i);  
  22.                 ps.addBatch();  
  23.             }  
  24.             ps.executeBatch();  
  25.         } catch (Exception e) {  
  26.             e.printStackTrace();  
  27.         } finally {  
  28.             DBUtil.close(conn, ps, null);  
  29.         }  
  30.     }  

以上是关于java实现sql 语句实现同一列上两个值互换的主要内容,如果未能解决你的问题,请参考以下文章

sql 日期正序 时间倒序

SQL 实现行列互换

关于Java中SQL语句的拼接规则

如何交换两个变量的值

在sql语句实现查询一张表中的同一个属性的不同字段的所有数据

详解一条sql语句的执行过程