📄 autoinsertkey.java
字号:
/**
JDBC3.0的一个应用例子。
来源:见..\JDBC 3_0 有什么新特性.mht
为了解决对获取自动产生的或自动增加的关键字的值的需求,JDBC 3.0 API 现在将获取
这种值变得很轻松。要确定任何所产生的关键字的值,只要简单地在语句的 execute() 方法
中指定一个可选的标记,表示您有兴趣获取产生的值。您感兴趣的程度可以是 Statement.RETURN_GENERATED_KEYS ,
也可以是 Statement.NO_GENERATED_KEYS 。在执行这条语句后,所产生的关键字的值就会通过
从 Statement 的实例方法 getGeneratedKeys() 来检索 ResultSet 而获得。 ResultSet 包含
了每个所产生的关键字的列。清单 1 中的示例创建一个新的作者并返回对应的自动产生的关键字。
Microsoft的SQL Server2005的JDBC3.0的驱动程序只有一个文件是必须的,即sqljdbc.jar。
运行该例子时必须使用该驱动程序。
*/
import java.sql.*;
import java.math.*;
public class AutoInsertKey{
public static void main( String[] args){
Connection con=null;
Statement stat;
String url = "jdbc:sqlserver://localhost:1433;databaseName=studentdb;"; // JDBC3.0格式。 注意与JDBC2.0中的不一致
// String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=studentdb;"; // 微软JDBC2.0驱动中的url
String usr = "student";
String pwd = "student";
try {
// 1、装载microsoft的SQLServer的JDBC驱动程序
Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" ); // JDBC3.0驱动。 注意与JDBC2.0中的不一致
// Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" ); // 微软JDBC2.0驱动中的类名
// 2、建立与数据库的连接,创建Statement对象
con = DriverManager.getConnection(url, usr, pwd );
Statement stmt = con.createStatement(); // 创建JDBC Statement
//3、向表user中插入数据
stmt.executeUpdate("insert into users( name, pwd) values('wang1', '1234')", Statement.RETURN_GENERATED_KEYS );
//4、得到自动生成的Key
ResultSet rs = stmt.getGeneratedKeys();
if ( rs.next() ) {
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount() ;
System.out.println( "cols="+cols ) ;
String tname = rsmd.getColumnTypeName( 1 ); // 在SQL 2000中,该列的类型名字是numeric
System.out.println( "column type name=" + tname );
String name = rsmd.getColumnName( 1 );
System.out.println( "column name=" + name );
// Retrieve the auto generated key(s).
int key = rs.getBigDecimal(1).intValue();
System.out.println( "key="+ key ) ;
/*
// 也可以按如下的方式获得对自动数值列的值的获取
Object obj = rs.getObject(1);
String key = obj.toString();
System.out.println( "key="+ key ) ;
*/
}
}catch ( ClassNotFoundException e ) {
System.err.println( "装载 JDBC/ODBC 驱动程序失败。" );
e.printStackTrace();
System.exit( 1 );
}catch ( SQLException sqlex ) {
System.err.println( "数据库操作失败" );
sqlex.printStackTrace();
if (con != null) {
try{
System.err.print("Transaction is being rolled back");
con.rollback(); // ***** rollback *****
}catch(SQLException excep) {
System.err.print("SQLException: "+ excep.getMessage());
}
}
System.err.print("Transaction should be rolled back");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -