JDBC_part3_批处理_事务_元数据
2024-10-08 20:32:41
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.
**转载请注明 出自 : 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操作要么一起成功,要么一起失败,类似于银行一个账户给另一个账户转账.
事务的特性 : 原子性,一致性,隔离性或独立性,持久性
步骤:
- 取消掉Connection中设置的自动提交方式:conn.setAutoCommit(false) ;
- 如果批处理操作成功,则执行提交事务: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();
}
最新文章
- ASP.NET的六大内置对象
- Android笔记:蓝牙
- 浅析.NET的反射特性
- 简单MVC项目搭建--Java1.7+Eclipse luna + Maven 3.2.5 +spring 4.1.4
- 防止多次领取红包进行ID锁
- win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
- STM32时钟理解
- centos7命令
- 转载:C# Word操作实现代码
- Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)
- Ural 1068 - Sum
- UITextField(一)监听输入内容的变化(开发笔记)
- mysql 查询各数据库的占用大小
- asp.net core 2.0集成signalr
- CAN通信要注意的问题
- python矩阵的切片(或截取)
- Pandas重塑和轴向旋转
- python—切片
- Web Deploy远程部署配置图解
- JustOj 1927: 回文串