java sql语句后返回值_Java执行sql语句并获取指定返回值

当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用。我们通常的做法有如下几种: 1、先 select max(id) +1 ,然后将+1后的值作为主键插入数据库;2、使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值;3、对于Oracle,使用 sequence 获取值。对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性。现记录以下几种获取数据库主键值方法:1、数据库原生支持的sql方法:SQLServer:INSERT INTO table_name (.....) VALUES(......) SELECT @@IDENTITY AS aliasname;上面的语句相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。Oracle:INSERT INTO table_name(......) VALUES(......) RETURNING[primaryKey INTO]:aliasname;也是相当于查询语句,从结果集中使用 getXXX(aliasname) 方法获取主键值。2、java.sql.Statement 返回键获取:a: 使用JDBC 3.0提供的 getGeneratedKeys(推荐使用)Statement stmt = ... ;stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS);ResultSet rs = stmt.getGeneratedKeys();int keyValue = -1;if (rs.next()) {keyValue = rs.getInt(1);}b:使用特定数据库特有的SQLStatement stmt = ... ;stmt.executeUpdate("INSERT INTO table_name(......) VALUES(......)", Statement.RETURN_GENERATED_KEYS);ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");int keyValue = -1;if (rs.next()) {keyValue = rs.getInt(1);}那么现在我就一个例子来看一下原生的sql怎么能得到执行的返回结果项目背景:数据库是oracle数据库,id生成规则是通过触发器插入数据的时候自动增长,所以在插入数据的时候在sql中就不需要指明id值。但是另外一张表需要引用这个id值作为外键,那么就必须获得被引用的这个表的ID,为了避免并发问题,我们只能在插入前面那张表的时候就获得他的ID,所以我使用了下面的方法来处理。Connection con = DBConnector.getconecttion(); // 取得一个数据库连接CallableStatement cst = null;con.setAutoCommit(false);String insertSql = "begin insert into TABLE (field_0,field_1) values (value_0,value_1) returning id into ?;end; ";try {cst = con.prepareCall(insertSql); //执行存储过程cst.registerOutParameter(1, Types.INTEGER); //为存储过程设定返回值int count = cst.executeUpdate(); //得到预编译语句更新记录或删除操作的结果int id = cst.getInt(1); //得到返回值System.out.println("成功执行了:" + count + "条数据,其ID值:" + id);} catch (SQLException e1) {con.rollback();con.setAutoCommit(true);}finally{con.commit();con.close();}

posted on 2012-09-20 00:50 奋斗成就男人 阅读(1165) 评论(0)  编辑  收藏

可以使用Java中的JDBC来执行SQL查询语句并返回值。以下是一个示例代码: ```java import java.sql.*; public class SQLQueryExample { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; // JDBC驱动程序 static final String DB_URL = "jdbc:mysql://localhost:3306/exampledb"; // 数据库URL static final String USER = "username"; // 数据库用户名 static final String PASS = "password"; // 数据库密码 public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册JDBC驱动程序 Class.forName(JDBC_DRIVER); // 打开一个连接 System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println("Creating statement..."); stmt = conn.createStatement(); String sql = "SELECT id, name, age FROM employees"; ResultSet rs = stmt.executeQuery(sql); // 处理查询结果 while(rs.next()){ // 通过列名获取值 int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); // 打印结果 System.out.print("ID: " + id); System.out.print(", Name: " + name); System.out.println(", Age: " + age); } // 关闭连接 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理JDBC错误 se.printStackTrace(); }catch(Exception e){ // 处理其他错误 e.printStackTrace(); }finally{ // 关闭资源 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ } try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } } ``` 在这个示例中,我们首先注册了MySQL的JDBC驱动程序。然后,我们使用DriverManager.getConnection()方法打开一个连接,并创建一个Statement对象。接下来,我们使用Statement.executeQuery()方法执行SQL查询,并将结果存储在ResultSet对象中。最后,我们通过ResultSet.next()方法遍历结果集,并使用ResultSet.getXXX()方法获取每个列的值。 以上示例仅供参考,您可以根据您的具体情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值