⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autoinsertkey.java

📁 解决对获取自动产生的或自动增加的关键字的值的需求
💻 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 + -