优势:1.节省传递时间。 2.并发处理。
PreparedStatement:
1) addBatch()将一组参数添加到PreparedStatement对象内部。
2) executeBatch()将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
Statement:
1) addBatch(String sql)方法会在批处理缓存中加入一条sql语句。
2) executeBatch()执行批处理缓存中的所有sql语句。
注意:PreparedStatement中使用批量更新时,要先设置好参数后再使用addBatch()方法加入缓存。批量更新中只能使用更改、删除或插入语句。
1.数据库的事务:
事务的ACID属性
* 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单 位,事务中的操作要么都发生,要么都不发生。?
* 一致性(Consistency) 事务必须使数据库从一个一致性状态变 换到另外一个一致性状态。(数据不被破坏)
* 隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被 其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他 事务是隔离的,并发执行的各个事务之间不能互相干扰。
* 持久性(Durability) 持久性是指一个事务一旦被提交,它对数 据库中数据的改变就是永久性的,接下来的其他操作和数据库故障 不应该对其有任何影响
package com.saas.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
public class TestTransactionDemo01 {
public static String _STR=" PreparedStatement: 1.addBatch() 将一组参数添加到 PreparedStatement对象内部 2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。* ";
public static String _URL="jdbc:mysql://127.0.0.1:3306/shopping_thpad_com?useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true";
public static String _LOGIN_NAME="root";
public static String _LOGIN_PASSWORD="123456";
private static Connection connect = null;
private PreparedStatement pstmt=null;
private ResultSet rs = null;
public static Connection getConnection() {
try{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
try {
connect = DriverManager.getConnection(_URL, _LOGIN_NAME, _LOGIN_PASSWORD);
}
catch(SQLException e) {
e.printStackTrace();
}
return connect;
}
public void execInsert() {
connect = getConnection();
//添加
String insert_sql ="insert into item_spec(item_spec_id,name,remarks) values(?,?,?)";
try {
connect.setAutoCommit(false);//事务开始,默认设置为false,表示不自动提交
Calendar cal = Calendar.getInstance();
pstmt= connect.prepareStatement(insert_sql);
pstmt.setString(1,String.valueOf(cal.getTimeInMillis()));
pstmt.setString(2, _STR);
pstmt.setString(3, "test333333333");
//pstmt.executeUpdate();
pstmt.addBatch();
Calendar cal1 = Calendar.getInstance();
pstmt.setString(1,String.valueOf(cal1.getTimeInMillis()+2));
pstmt.setString(2, "test_zhudansheng");
pstmt.setString(3, "test_zhudansheng_3333333");
pstmt.addBatch();
Calendar cal2 = Calendar.getInstance();
pstmt.setString(1,String.valueOf(cal2.getTimeInMillis()+3));
pstmt.setString(2, "g_test");
pstmt.setString(3, "test_zhudansheng_test");
pstmt.addBatch();
pstmt.executeBatch(); // 执行批量处理语句。
connect.commit();//执行事务
System.out.println("提交事务成功");
connect.setAutoCommit(true);
this.doClose();
}
catch(SQLException e) {
e.printStackTrace();
try {
if(!connect.isClosed()) {
connect.rollback();
System.out.println("提交事务失败");
connect.setAutoCommit(true);
}
}
catch(SQLException ee) {
ee.printStackTrace();
}
}
finally {
// 抛出异常则关闭所有链接
this.doClose();
}
}
public void execStatement() {
connect = getConnection();
String result_sql = "select * from item_spec ";//where item_spec_id=?
try {
pstmt = connect.prepareStatement(result_sql);
//pstmt.setString(1, "1319729859937");
rs = pstmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("item_spec_id")+"-----------"+rs.getString("name")+"---------------"+rs.getString("remarks"));
}
}
catch(SQLException e) {
e.printStackTrace();
}
finally {
this.doClose();
}
}
public void execUpdate() {
connect = getConnection();
String update_sql ="update item_spec set name=?,remarks=? where item_spec_id=?";
try {
PreparedStatement pstmt = connect.prepareStatement(update_sql);
pstmt.setString(1, "zhudansheng");
pstmt.setString(2, "remarks ssstaskdflasdjfjasdfkljasdaskfjaafkjas手放开垃圾生大幅就 ");
pstmt.setString(3, "1319125327157");
int i_flag=pstmt.executeUpdate();
System.out.println("更新为:"+i_flag);
}
catch(SQLException e) {
e.printStackTrace();
}
finally{
this.doClose();
}
}
/**
*
*/
public void execDelete() {
connect = getConnection();
String delete_sql ="delete from item_spec where item_spec_id=?";
try {
PreparedStatement pstmt = connect.prepareStatement(delete_sql);
pstmt.setString(1, "1319122161343");
int i_flag=pstmt.executeUpdate();
System.out.println("删除为:"+i_flag);
}
catch(SQLException e) {
e.printStackTrace();
}
finally{
this.doClose();
}
}
public void doClose() {
try {
if(null!=rs) {
rs.close();
rs=null;
}
if(null!=pstmt) {
pstmt.close();
pstmt=null;
}
if(null!=connect) {
connect.close();
connect=null;
}
}
catch(SQLException e) {
e.printStackTrace();
}
}
public static void main(String[]args) {
TestTransactionDemo01 test = new TestTransactionDemo01();
test.getConnection();
test.execInsert();
//test.execStatement();
//test.execUpdate();
//test.execDelete();
test.doClose();
}
}
分享到:
相关推荐
本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...
在JDBC实例中,我们可以使用@Transactional注解声明方法需要在事务中执行,Spring会自动管理事务的开始、提交和回滚。 3. **JdbcTemplate方法**:JdbcTemplate提供了一系列的方法来执行SQL,如`update()`用于执行...
**JDBC第五章数据库...总结,JDBC第五章的数据库实例是学习JDBC应用的重要环节,涵盖了从连接数据库、执行SQL语句到处理结果集、事务控制等多个方面。掌握这些内容将为开发高效、稳定的Java数据库应用打下坚实基础。
在“JDBC编程实例”中,可能会涵盖如何使用JDBC连接MySQL数据库,执行基本的CRUD操作,处理批量操作,以及事务管理和连接池的使用。这些实例有助于巩固理论知识,并为实际项目提供实践指导。 总结,JDBC是Java...
2. 批量处理:使用`Statement`或`PreparedStatement`的`addBatch()`和`executeBatch()`方法进行批量SQL操作,减少网络通信次数。 3. 数据库连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统效率...
它允许Java应用程序通过编写Java代码来访问和处理存储在关系数据库中的数据。本实例主要关注如何使用JDBC进行数据库链接操作,我们将深入探讨JDBC的核心概念、数据库连接步骤以及在实际应用中的注意事项。 首先,...
在Java开发中,Spring JDBC是Spring...总的来说,Spring JDBC提供了强大的批量处理能力,通过`NamedParameterJdbcTemplate`的`batchUpdate`方法,我们可以轻松地实现数据的批量插入和更新,有效提升数据库操作的效率。
在这个实例源码中,我们看到的是一个基于`epet`宠物项目的完整实现,该项目可能包括了创建、查询、更新和删除(CRUD)数据库记录的操作。这个项目不仅包含了源代码,还预设了完整的数据库,因此非常适合学习和理解...
4. **JdbcTransactionManager**: 这是Spring提供的事务管理器,它利用JDBC的API来管理事务,支持编程式和声明式事务控制。 5. **DataSource**: Spring JDBC通常与DataSource一起使用,DataSource是Java的JNDI服务的...
本教程将深入探讨JDBC编程实例,通过具体的代码示例帮助你理解和掌握JDBC的核心概念和用法。 ### 1. JDBC基础 - **JDBC驱动类型**:JDBC驱动分为四种类型,分别是Type 1、Type 2、Type 3和Type 4。其中,Type 4...
本文将深入探讨SQLJDBC42 JDBC驱动程序的特性和使用方法,帮助开发者更好地理解和应用这一强大的工具。 一、SQLJDBC42简介 SQLJDBC42是微软SQL Server数据库与Java应用程序之间的桥梁,它实现了Java Database ...
- 深入理解Spring JDBC的源码,可以发现它对JDBC的优化主要体现在批处理、结果集处理和事务控制等方面。 - JdbcTemplate通过PreparedStatementCreator和RowCallbackHandler等接口,实现了SQL的动态生成和结果的...
6. **事务管理**:JDBC支持事务处理,可以使用`Connection`的`setAutoCommit(false)`来手动控制事务,然后通过`commit()`和`rollback()`来提交或回滚事务。 SQL Server JDBC驱动还提供了高级特性,如批量操作、...
4. **事务管理**:支持开始、提交、回滚事务,确保数据的一致性和完整性。 5. **批处理**:使用`BatchUpdateException`批量执行多条SQL语句,提高效率。 6. **游标**:通过设置不同的游标类型,控制数据的读取方式,...
"JDBC Recipes"这本书通过实例解析,详细讲解了这些JDBC技术点,为开发者提供了实际场景下的解决方案,帮助他们在项目开发中更好地利用JDBC进行数据库操作。书中的"Problem-Solution"方法论使得学习更为直观,适合...
Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于...
9. **异常处理**:当发生错误时,JDBC驱动会抛出SQLException,便于开发者捕获和处理。 10. **兼容性**:除了与SQL Server 2005兼容外,也适用于后续版本的SQL Server,如2008、2012等。 在实际开发中,要使用...
JDBC是Java编程语言中用于访问和处理数据库的标准接口,它允许程序员执行SQL语句并处理返回的结果。 在描述中提到的“jdbc学习数据库建立sql”,我们可以推测这个压缩包是为了教学或实践目的,它可能包含了创建、...
总结来说,JDBC是Java开发中与数据库交互的核心技术,它提供了丰富的API用于数据库连接、SQL执行、事务管理和异常处理。在实际项目中,通过JavaBean和JSP的结合,可以构建高效的数据访问层,实现CRUD操作,并通过...
9. **事务管理**:JDBC支持事务处理,通过`Connection`对象的`setAutoCommit(false)`来开启手动提交事务,`commit()`提交事务,`rollback()`回滚事务。 10. **批处理**:批量处理SQL语句可以提高效率。`Statement`...