• 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)+"	");
    			}
    			System.out.println();
    		}
    
  • 相关阅读:
    PHP设计模式
    PHP 面向对象
    MYSQL 覆盖索引
    MYSQL IOPS、QPS、TPS
    MySQL 事务嵌套
    MySQL 慢查询优化
    MySQL 查询状态
    MySQL 乐观锁和悲观锁
    MySQL 分库、分表
    Spring Boot 全局异常捕捉,自定义异常并统一返回
  • 原文地址:https://www.cnblogs.com/luogg/p/5959681.html
Copyright © 2020-2023  润新知