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

**转载请注明 出自 : 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();
}

JDBC_part3_批处理_事务_元数据的更多相关文章

  1. MySQL数据库_索引_事务_优化 _锁_存储引擎_存储过程_CAP

    ##一.基础 ## *    插入                   INSERT INTO table_name ( field1, field2,...fieldN )              ...

  2. 事务_基本演示和事务_默认自动提交&手动提交

    事务的基本介绍 概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败 操作: 开启事务:start transaction; 回滚:rollback; 提交:co ...

  3. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  4. Oracle学习总结_day03_day04_条件查询_排序_函数_子查询

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day03_条件查询_排序_函数 清空回收站: PUR ...

  5. C Primer Plus_第6章_循环_编程练习

    1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...

  6. 迅为4412开发板Linux驱动教程——总线_设备_驱动注册流程详解

    本文转自:http://www.topeetboard.com 视频下载地址: 驱动注册:http://pan.baidu.com/s/1i34HcDB 设备注册:http://pan.baidu.c ...

  7. 3.IP地址分类_规划_子网掩码

    IP地址分类_规划_子网掩码 3.1MAC地址 网卡的身份证号———MAC地址 MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20: ...

  8. 宏定义中的##操作符和... and _ _VA_ARGS_ _

    1.Preprocessor Glue: The ## Operator 预处理连接符:##操作符 Like the # operator, the ## operator can be used i ...

  9. 宏 #,##,_ _VA_ARGS_ _

    宏里面使用: 一.#  转为字符串 #define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x)) ...

随机推荐

  1. 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)

    在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...

  2. CentOS7使用firewalld打开关闭防火墙与端口(转载)

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disabl ...

  3. 自己实现简单Spring Ioc

    IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...

  4. GOF23设计模式归类

    创建型模式:-单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式结构型模式:-适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式行为型模式:-模板方法模式.命令模式.迭代器模式 ...

  5. git多账号登录问题

    作者:白狼 出处:http://www.manks.top/git-multiply-accounts.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...

  6. 【Java并发编程实战】----- AQS(二):获取锁、释放锁

    上篇博客稍微介绍了一下AQS,下面我们来关注下AQS的所获取和锁释放. AQS锁获取 AQS包含如下几个方法: acquire(int arg):以独占模式获取对象,忽略中断. acquireInte ...

  7. Java线程池解析

    Java的一大优势是能完成多线程任务,对线程的封装和调度非常好,那么它又是如何实现的呢? jdk的包下和线程相关类的类图. 从上面可以看出Java的线程池主的实现类主要有两个类ThreadPoolEx ...

  8. React-Native 渲染实现分析

    前言 React Native与传统的HybirdApp最大区别就是抛开WebView,使用JSC+原生组件的方式进行渲染,那么整个App启动/渲染流程又是怎样的呢? React Native启动流程 ...

  9. git 使用

    三个状态 文件由 git 维护三中状态 modified:文件被改动,但还没有被提交 staged:标记被改动的文件到下次需要提交的文件快照 committed:文件已经被安全保存到本地 可以使用命令 ...

  10. JRebel Windows RegCreateKeyEx(...) returned error code 5.

    作为一个JRebel的深度用户,在win10下用JRebel的eclipse插件使用的时候遇到了如下问题: java.util.prefs.WindowsPreferences <init> ...