1、Class.forName("com.mysql.jdbc.Driver");
这句话执行了什么?如不看Driver的源码,则必然是创建了一个Class实例,可以调用这个实例的静态方法和全局变量。
public class Driver extends NonRegisteringDriver implements java.sql.Driver
{
static
{
try
{
DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
这段源码中,static执行了创建对象的动作,即在类初始化阶段就创建了一个实例,不是单例的。
2、Connection conn= DriverManager.getConnection(url,user,password);
获取与数据库的连接,这两步都有可能异常,一个是找不到Driver异常,一个是连接异常,
3、创建Statement 实例
要执行SQL语句,必须创建Statement实例;
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
prep.setString(1, "Gandhi");
prep.setString(2, "politics");
prep.addBatch();
prep.setString(1, "Turing");
prep.setString(2, "computers");
prep.executeBatch();
4、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、boolean execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
5、ResultSet结果集
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
6、释放JDBC对象
操作完成以后要把
所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
rs.close() ;
stmt.close() ;
conn.close() ;
正常的情况下,操作应该顺利进行,与操作相关的所有数据库信息也成功地更新;但是,如果在这一系列过程中任何一个环节出了差错,导致操作失败了,数据库中所有信息都必须保持操作前的状态不变。否则,数据库的信息将会一片混乱而不可预测。
一个逻辑工作单元要称为事务,必须满足ACID(原子性,一致性,隔离性和持久性)
原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性
隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
持久性
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
事务的结束只能有两种形式:提交和回滚。操作完全成功则提交,产生永久性的修改;操作不完全成功则回滚,恢复到事务开始前的状态。它们将结束一个事务。
首先我们要注意,在JDBC中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作。操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回退。在提交过程中,
try{
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:myfisrt.db");
stat = conn.createStatement();
//关闭jdbc自动事务
conn.setAutoCommit(false);
int rs = stat.executeUpdate("insert into exceptionTest('数字','字符')values(null,'we');");
//执行成功,提交事务
conn.commit();
}catch (Exception e)
{
e.printStackTrace();
System.out.println("回滚");
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
jdbc默认提供了事务管理,所以就不用担心事务没提交;但是进行多表操作或者多语句操作时,要求多语句同时提交和回滚时,就必须取消自动提交改为手动提交或回滚。
try{
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:myfisrt.db");
stat = conn.createStatement();
conn.setAutoCommit(false);
stat.executeUpdate("insert into exceptionTest('数字','字符')values(122,'we');");
stat.executeUpdate("insert into exceptionTest('数字','字符')values(null,'we');");
conn.commit();
}catch (Exception e)
{
conn.rollback();
System.out.println("回滚");
}finally
{
stat.close();
conn.close();
}
分享到:
相关推荐
- **Transaction Management**:JDBC支持事务管理,可以确保数据的一致性和完整性。 在使用这些驱动时,开发者需要按照特定的步骤进行操作: 1. 加载和注册驱动:通过Class.forName()方法加载对应的JDBC驱动类。 2....
该驱动遵循JDBC 4.0规范,提供了四种类型的JDBC驱动:类型1(纯Java驱动),类型2(JNI驱动),类型3(网络协议驱动)和类型4(纯Java的TCP/IP驱动)。sqljdbc4-4.0.jar属于类型4驱动,也称为“协议驱动”,它完全用...
7. **Transaction Management**:JDBC提供了事务控制功能,允许开发者控制数据的一致性和完整性。 8. **Error Handling**:通过SQLException类处理数据库操作中出现的错误。 在阅读JDBC官方文档时,开发者会学习...
1. JDBC是一套协议,定义了Java开发者与数据库通信的接口和方法。 2. 实现JDBC的是各个数据库厂商,它们提供了符合JDBC规范的驱动程序,通常以JAR文件的形式提供。 3. 在使用JDBC之前,需要先加载相应的数据库驱动,...
6. **Transaction管理**:JDBC支持事务控制,通过`Connection.setAutoCommit()`关闭自动提交,然后使用`commit()`和`rollback()`方法来管理事务。 7. **批处理**:对于多个相似的SQL操作,可以使用批处理API提高...
**JDBC(Java Database Connectivity)**是Java编程语言中用于标准连接关系型数据库的API,它使得Java开发者能够编写数据库应用程序。JDBC提供了一种标准的接口,使得开发者可以使用相同的代码来访问不同的数据库,...
1. 下载微软的JDBC驱动程序(如sqljdbc4.jar)。 2. 将JDBC驱动添加到项目的类路径中,这可能涉及将jar文件放入项目lib目录、Tomcat的lib目录,或者在IDE(如MyEclipse)中设置类路径。 3. 在代码中,使用`Class.for...
5. **事务(Transaction)**:JDBC支持事务管理,允许一组操作作为一个单元,要么全部成功,要么全部失败。 6. **批处理(Batch Processing)**:对于大量的数据插入或更新,批处理可以提高效率,一次性提交多条SQL...
1. **JDBC基础**:首先,项目会介绍JDBC的基本概念,包括JDBC驱动、Connection对象、Statement对象、PreparedStatement对象和CallableStatement对象。了解这些是使用JDBC的基础。 2. **数据库连接**:通过...
1. **JDBC连接池配置** - **配置连接池**:在WebLogic等应用服务器中,JDBC连接池用于管理数据库连接,以提高效率和资源利用率。配置包括选择适合的数据库驱动类型,设置连接属性如URL、用户名和密码,以及服务名。...
1. **TRANSACTION_NONE**:不支持事务隔离。 2. **TRANSACTION_READ_UNCOMMITTED**:允许读取未提交的数据。 3. **TRANSACTION_READ_COMMITTED**:只能读取已提交的数据。 4. **TRANSACTION_REPEATABLE_READ**:除了...
- **Transaction**:JDBC支持事务处理,可以确保一组数据库操作的原子性。 在实际开发中,为了提高性能和资源管理,通常会使用连接池,如C3P0、HikariCP或Apache DBCP等。连接池预先创建一定数量的数据库连接,供应...
1. **Transaction控制**:利用Connection对象的setAutoCommit()和commit()、rollback()方法进行事务的开启、提交和回滚。 ### 错误处理与异常处理 1. **SQLException**:所有JDBC相关的错误都会抛出SQLException,...
- **JDBC驱动**:JDBC驱动是Java代码与数据库之间的桥梁,分为四种类型:类型1(JDBC-ODBC桥接)、类型2(部分Java驱动)、类型3(纯Java网络协议驱动)和类型4(纯Java数据库API驱动)。 - **JDBC连接过程**:加载...
1. **驱动程序管理器(Driver Manager)**:它是JDBC的核心组件,负责加载数据库驱动程序,并管理与数据库的连接。Java应用程序使用`Class.forName()`方法加载特定数据库的JDBC驱动,然后通过`DriverManager.get...
1. **JDBC驱动**:连接Java应用程序与数据库的关键桥梁。主要有四种类型的JDBC驱动: - JDBC-ODBC桥接驱动:将Java应用程序连接到ODBC数据源。 - 网络协议驱动:直接与数据库服务器通信,如JDBC-Net Pure Java驱动...
1. JDBC驱动方式: Java Database Connectivity (JDBC) 是Java平台的标准API,用于与各种类型的数据库进行通信。要使用JDBC,首先需要在项目中添加对应数据库的JDBC驱动jar包。连接数据库的关键代码如下: ```java...
- **JDBC驱动类型**:JDBC驱动分为四种类型,分别是Type 1、Type 2、Type 3 和 Type 4。Type 1 驱动基于纯Java实现,依赖于数据库厂商的本地API;Type 2 驱动部分依赖本地库;Type 3 驱动通过中间件与数据库通信;...
JDBC提供了对数据库事务的控制,如beginTransaction()、commit()和rollback()方法,用于确保数据的一致性和完整性。 9. 游标和批处理: ResultSet中的游标允许按需读取数据,避免一次性加载大量结果集导致内存...