JDBC:
JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
快速入门:
- 导入驱动jar包,复制到项目中并右键Add as Library
- 注册驱动Class.forName(“com.mysql.jdbc.Driver”);
- 获取数据库连接对象Connection Connection conn = DriverManager.getConnection
- 定义SQL String sql=“UPDATE card SET card=card+500 WHERE NAME=‘li’”;
- 获取执行SQL语句的对象Statement
- 执行SQL,接受返回结果Statement stmt = conn.createStatement();
- 处理结果
- 释放资源conn.close(); stmt.close();
详解各个对象:
- DriverManager:驱动管理对象
功能:注册驱动和获取数据库连接
获取数据库连接的静态方法
注册驱动Class.forName("com.mysql.jdbc.Driver");
static Connection getConnection(String ur1,String user,String password);
url:指定连接的路径 jdbc:mysql://ip地址:端口号/数据库名称
- Connection:数据库连接对象
获取执行SQL的对象
Statement createStatement();
PreparedStatement PreparedStatement(String sql);
管理事务:
开启事务:void setAutoCommit(boolean autoCommit)参数为false时,表示开启事务
提交事务:commit();
回滚事务:rollback();
- Statement:执行SQL的对象
执行SQL
boolean execute(String sql)可以执行任意的SQL语句
int executeUpdate(String sql)执行DML(insert,update,delete),DDL(create,alter,drop)语句,返回值为影响的行数
ResultSet executeQuery(String sql)执行DQL(select)语句
- ResultSet:结果集对象
next()游标向下移动一行
getXXX(参数)获取数据
-
PreparedStatement:执行SQL的对象(比前者强)
SQL注入问题:在拼接SQL时,有一些SQL的特殊关键字参与字符串的拼接。会造成安全性问题
解决SQL注入问题:使用PreparedStatement对象来解决
使用方法:- 定义SQL时,使用?作为占位符 如select * from where username=? and password=?;
- 给?赋值:setxxx(参数1,参数2) 参数1为?的位置,从1开始 参数2:?的值
抽取JDBC工具类:JDBCUtils 简化书写
分析:
-
抽取注册驱动
-
抽取一个方法获取连接对象
-
抽取一个方法释放资源
JDBC控制事务
使用Connection对象来管理事务:
1. 开启事务:setAutoCommit(boolean autoCommit)调用该方法设置参数为false,开启事务
2. 回滚:commit()
3. 提交:rollback()
数据库连接池
概念:就是一个存放数据库连接的容器(集合),可以节约资源,提高用户的访问效率
C3P0:
实现:导入两个c3p0 jar包和数据库驱动jar包,定义配置文件c3p0-config.xml或者c3p0.properties
标准接口:DataSource
获取DataSource ds=new ComboPooledDataSource();不使用参数为默认配置,参数为指定的配置
java.sql包下的
获取连接:getConnection()
归还连接:如果连接对象Connection是从连接池中获取的,那么调用close方法则会归还连接
Druid:
实现:
- 导入druid jar包;
- 定义配置文件properties形式的,名字任意;
- 加载配置文件 Properties.load(InputStream);
- 获取连接池对象DataSource ds=DruidDataSourceFactory.createDataSource(pro);
- 使用getConnection获取连接
Spring JDBC:Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
使用步骤:
1. 导入jar包
2. 创建JdbcTemplate对象。依赖于数据源DataSource
JdbcTemplate template=new JdbcTemplate(ds);
3. 调用JdbcTemplate的方法来完成CURD的操作
- updata()执行DML语句。增删改语句
- queryForMap()查询结果将结果集封装为map集合 注意:这个方法查询的结果集长度只能是1
- queryForList()查询结果将结果集封装为list集合 将每一条记录封装为Map集合,再将Map集合装载到List集合
- query()查询结果,将结果封装为JavaBean对象,一般使用BeanPropertyRowMapper实现类 例子:List<Emp> list=template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
- queryForObject()查询结果,将结果封装为对象,一般用于实现聚合函数