注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

等闲识得东风面,万紫千红总是春!

 
 
 

日志

 
 

三种获得自动生成主键的方法,getGeneratedKeys,专用SQL和可更新的结果集  

2009-03-19 16:56:21|  分类: JDBC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 三种获得自动生成主键的方法。
 * 
 * @author 赵学庆 www.java2000.net


 * 
 */
public class TestGetPK {

  public static void main(String[] args) throws Exception {
    Class.forName("com.gbase.jdbc.Driver");
    String url = "jdbc:gbase://localhost/mytest";
    Connection con = DriverManager.getConnection(url, "root", "111111");

    System.out.println(getPK1(con));
    System.out.println(getPK2(con));
    System.out.println(getPK3(con));
  }

  /**
   * 使用JDBC 3.0提供的 getGeneratedKeys。推荐使用
   * 
   * @param con
   * @return
   * @throws Exception
   */
  public static long getPK1(Connection con) throws Exception {
    Statement stmt = con.createStatement();
    stmt.executeUpdate("INSERT INTO t_type (name) values ('Can I Get the Auto Increment Field?')",
        Statement.RETURN_GENERATED_KEYS);

    int autoIncKeyFromApi = -1;
    ResultSet rs = stmt.getGeneratedKeys();
    if (rs.next()) {
      autoIncKeyFromApi = rs.getInt(1);
    }
    return autoIncKeyFromApi;
  }

  /**
   * 使用数据库自己的特殊SQL.
   * 
   * @param con
   * @return
   * @throws Exception
   */
  public static long getPK2(Connection con) throws Exception {
    Statement stmt = con.createStatement();
    stmt.executeUpdate("INSERT INTO t_type (name) values ('Can I Get the Auto Increment Field?')",
        Statement.RETURN_GENERATED_KEYS);

    int autoIncKeyFromFunc = -1;
    ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
    if (rs.next()) {
      autoIncKeyFromFunc = rs.getInt(1);
    }
    return autoIncKeyFromFunc;
  }

  /**
   * 使用可更新的结果集。
   * 
   * @param con
   * @return
   * @throws Exception
   */
  public static long getPK3(Connection con) throws Exception {
    Statement stmt = con.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
        java.sql.ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = stmt.executeQuery("SELECT * FROM t_Type");
    rs.moveToInsertRow();
    rs.updateString("name", "AUTO INCREMENT here?");
    rs.insertRow();
    rs.last();
    int autoIncKeyFromRS = rs.getInt("id");
    return autoIncKeyFromRS;
  }
}

 

  评论这张
 
阅读(323)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017