jdbc基础+事务处理

注意:还是和sql基础一样是我以前的笔记。

JDBC基础

JDBC API是java访问数据库的接口规范,各家厂商根据接口规范,提供具体的实现类。这些实现类被封装为jar包,以jdbc驱动程序供开发者使用。

Jdbc可以完成3个基本工作:(1)建立与数据库的连接。(2)执行sql语句。(3)获得sql语句的执行结果。

应用JDBC

jdbc编程步骤

加载驱动

Class.forName(“com.mysql.jdbc.Driver”); Class.forName(“oracle.jdbc.driver.OracleDriver”);

通过DriverManager获得数据库连接。

DriverManager.getConnection(String URL,String user,String pass)

Mysql数据库的URL写法:

jdbc:mysql://hostname:port/databasename;

Oracle的URL写法:

jdbc:oracle:thin:@hostname:port:databasename

通过数据库连接创建statement对象。Connection创建Statement的方法有如下三种:

createStatement():创建基本的statement对象。

prepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象。

prepareCall(String sql):根据传入的sql语句创建CallableStatement对象。

使用Statement执行sql语句,有三种方法执行sql语句:

execute()可以执行热播和类型的sql,结果处理麻烦

executeUpdate()主要用来执行,dml和ddl语句,返回受sql语句影响的条数

executeQuery()只能执行查询语句,返回结果集resultset对象

操作结果集。操作resultset对象

两类方法

A、移动resultset的记录指针:next()previous()first()last(),beforefirst()afterlast()等

B、getxxx()

执行sql语句方式

(1)执行ddl和dml语句

(2)使用execute执行任何sql语句

使用PreparedStaatement执行sql查询语句

在插入数据时可以使用?占位符代替sql中的值

jdbc提供了PreparedStaatement执行预编译的sql语句。PreparedStaatement是statement接口的子接口然后使用该对象多次高效执行该语句

在sql前,使用setxxx(int index,xxx value)方法设置参数值

PreparedStaatement对象的execute()executeUpdate()executeQuery()

 优势:

(1)、使用预编译方式,不用拼接sql。降低了编写sql的复杂性。

(2)、预防sql注入。

SELECT * from student_table WHERE student_id = 20 and student_password='' or TRUE or '';

 处理Blob类型的数据

Blob(Binary Long Object)是二进制长对象的意思,Blob可以存储大文件,可以存储图片、声音、视频文件。将Blob数据插入数据库需要使用PreparedStatement,调用setBinaryStream(int index,InputStream x),该方法可以为执行参数传入二进制输入流。

取出时从ResultSet中取出Blob数据,调用getBlob(int index),返回Blob对象,调用该对象的getBinaryStream()方法获取该Blob数据的输入流。

事物处理

事物有4个特征:原子性:事物是应用中执行的最小单位,事物中的任务要么都执行成功,否则都不执行;一致性:事务的执行结果,必须使数据库从一个一致性状态变为另外一个一致性状态;隔离性:各个事务的执行互不干扰;持续性:持久性,指事务一旦提交,对数据所做的任何改变都记录到永久存储中。

这4个特性简称ACID性。

数据库的事物由以下语句组成:

(1)一组dml语句(2)一条ddl语句(3)一条dcl语句

当事务所包含的全部数据库操作执行成功后,应该提交事务。使这些修改永久的生效。提交事物2种方式:显示提交:commit;自动提交:当执行一条ddl或dcl自动提交

当事务中所包含的任意一个数据库操作执行失败后,应该回滚事务。使该事务中所做的修改全部失效。回滚方式:显示回滚rollback;自动回滚:系统错误和强制退出。mysql默认是关闭事务的。set autocommit=0|1设置事务是否打开。0关自动提交,开启事务

jdbc提供了事务支持JDBC连接的事务支持是Connection提供。默认打开自动提交,即关闭事务。

Con.setAutoCommit(false);

Con.commit();

Com.rollback();

6、使用连接池管理连接

数据库连接的建立及关闭是很耗费系统资源的操作。

数据库连接池的解决方案是:当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池。每次应用程序请求数据库时,不需要重新打开连接,从连接池中取已经存在的连接。使用完毕后,不关闭连接,而是将连接归还给连接池。

数据库连接池是Connection对象的工厂。数据库连接池的常用参数如下:

(1)、连接池的初试连接。

(2)、连接池的最大连接。

(3)、连接池的最小连接。

(4)、连接池每次增加的容量。

JDBC的数据库连接池使用javax.sql.DataSource。DataSource是一个接口,该接口通常由厂商提供具体实现。

6、DBCP数据源

DBCP是Apache软件下的开源连接池实现。如果需要使用该连接池,需要使用两个jar包:

commons-pool.jar:连接池实现的依赖库。

commons-dbcp.jar:连接池的实现。

Tomcat的连接池是采用该连接池实现的。

使用DBCP获得数据库连接的方式:

//创建数据源对象

BasicDataSource ds = new BasicDataSource();

//设置连接池所需要的驱动

ds.setDriverClassName(“com.mysql.jdbc.Driver”);

//设置连接数据库的URL

ds.setUrl(“jdbc:mysql://IP:port/数据库名”);

//设置用户名

ds.setUsername(“root”);

//设置密码

ds.setPassword(“root”);

//设置初试连接数

ds.setInitialSize(5);

//设置最大连接数

ds.setMaxActive(20);

//设置最小连接数

ds.setMinIdle(2);

//获得数据库连接

Connection con = ds.getConnection();

//释放数据库连接

con.close();

6.2C3P0数据源

C3P0性能更好一些,Hibernate就推荐使用该连接池。可以自动清理不再使用的Connection,Statement,ResultSet。C3p0.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值