JDBC_part3_批处理_事务_元数据

本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : luogg的博客园 ** 谢谢配合!

JDBC_day03

    String a = "abc";  **效率高 , 常量池**
    String b = "abc";
	System.out.println(a==b);//true
	System.out.println(a.equals(b));//true
		
	String A = new String("abc");//创建了一个或两个对象(池中有,创建一个,池中没有 创建两个)
	String B = new String("abc");
	System.out.println(A==B);//false
	System.out.println(A.equals(B));//true
	System.out.println(A==b);//false
	System.out.println(A.equals(b));//true


批处理

  • 预编译的批处理执行insert 语句
  • addBatch();

非预编译批处理

    String sql1 = "update copy_emp set salary=salary+'" + count +"'where employee_id='"+empIDA+"'";
	String sql2 = "update copy_emp set salary=salary-'" +count +"' where employee_id='"+empIDB+"'";
	Statement stmt = conn.createStatement();
	stmt.addBatch(sql1);
	stmt.addBatch(sql2);
	int[] arr = stmt.executeBatch();
	System.out.println(arr[0]+","+arr[1]);//1,1

预编译批处理

    String sql  = "insert into t_student(stu_name,stu_age) values(?,?)";
	PreparedStatement pstmt = conn.prepareStatement(sql);
	pstmt.setString(1, "小刚!");
	pstmt.setInt(2, 3);
	pstmt.addBatch();
		
	pstmt.setString(1, "小虎!!");
	pstmt.setInt(2, 4);
	pstmt.addBatch();
		
	int[] arr = pstmt.executeBatch();
	//只要输出不为0,就说明有影响行数
	System.out.println(arr[0] + "," + arr[1]);//-2 , -2

JDBC事务

所谓事务就是所有的sql操作要么一起成功,要么一起失败,类似于银行一个账户给另一个账户转账.

事务的特性 : 原子性,一致性,隔离性或独立性,持久性

步骤:

  1. 取消掉Connection中设置的自动提交方式:conn.setAutoCommit(false) ;
  2. 如果批处理操作成功,则执行提交事务:conn.commit() ;
    如果操作失败,则肯定会引发异常,在异常处理中让事务回滚:conn.rollback() ;
    Connection conn = DBUtil.getConnection();
	try {
	    conn.setAutoCommit(false);
		int i = DBUtil.updateSql("update copy_emp set salary=salary+'" + count +"'where employee_id='"+empIDA+"'");
		int j = DBUtil.updateSql("update copy_emp set salarys=salary-'" +count +"' where employee_id='"+empIDB+"'");
		System.out.println(i+","+j);
		conn.commit();
		} catch (SQLException e2) {
			try {
				conn.rollback();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        }

元数据

就是描述数据库对象的结构的数据。

  • DatabaseMetaData 数据库的元数据,如数据库的名称,版本等
  • ResultSetMetaData 查询结果的元数据, 如查询结果中字段数量(列数), 某字段名称等
    //数据库元数据
    DatabaseMetaData dbmd = conn.getMetaData();
	int i = dbmd.getDatabaseMajorVersion();
	System.out.println("数据库主版本 : " + i);//10
	int j = dbmd.getDatabaseMinorVersion();
	System.out.println("数据库次版本 : " + j);//2
	String name = dbmd.getDatabaseProductName();
	System.out.println("数据库名字 : " + name);//Oracle
	String version = dbmd.getDatabaseProductVersion();
	/*Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options*/
	System.out.println("数据库版本 : " + version);
    //结果集元数据
    stmt = conn.createStatement();
		rs = stmt.executeQuery(sql);
		ResultSetMetaData rsmd = rs.getMetaData();
		int column = rsmd.getColumnCount();
		System.out.println(column);
		for(int i = 1 ; i <= column ; i++) {
			//打印所有字段名称
			System.out.println(rsmd.getColumnName(i));
		}
		while(rs.next()) {
			for(int i = 1 ; i <= column ; i++) {
			    //打印所有数据
				System.out.print(rs.getString(i)+"\t");
			}
			System.out.println();
		}
posted @ 2016-10-14 11:16  洛GG  阅读(223)  评论(0编辑  收藏  举报