什么是JDBC: Java Data Base Connectivity(Java数据库连接)JDBC是Java访问数据库的标准库
JDBC的作用: JDBC是用于执行SQL语句的JAVA API(Java语言通过JDBC可以操作数据库)
JDBC会用到的包:
1.java.sql: JDBC访问数据库的基础包
2.javaX.sql: JDBC访问数据库的扩展包
3.数据库的驱动, 各大数据库厂商实现. 如MySQL的驱动: com.mysql.jdbc.Driver
JDBC四个核心对象, 这几个类都在java.sql包中
1.DriverManager: 用于注册驱动
2.Connection: 表示与数据库创建的连接
3.Statement: 执行SQL语句的对象
4.ResultSet: 结果集或一张虚拟表
JDBC获取连接步骤1.导入驱动jar包 2.注册驱动 3.获取连接
注册驱动
API java.sql.DriverManager
static void registerDriver(Driver Driver)
存在两个问题 1.硬编码 2.驱动被注册了两次
推荐使用Class.forName("com.mysql.jdbc.Driver"); 加载驱动
获取连接
API static Connection getConnection(String url, String user, String password)
连接数据库的URL地址格式: 协议名:子协议://服务器名称或IP地址:端口号/数据库名?参数=参数值
MySQL写法: jdbc:mysql://localhost:3306/db?characterEncoding=utf8
使用步骤 DriverManager. getConnection(url, user, password)
JDBC实现对数据的增、删、改、查
1.实现增、删、改
statement对象API
boolean execute(String sql):可以执行任意sql语句返回boolean值,表示是否返回ResultSet结果集. 仅当执行select语句,且有返回值时返回true
int executeUpdate(String sql):根据执行的DML语句返回受影响的行数
ResultSet executQuery(String sql)根据查询语句返回结果集,只能执行select语句
2.实现对数据库的查询
ResultSet的原理:ResultSet内部有一个指针,刚开始记录开始位置, 调用next方法, ResultSet内部指针会移动到下一行数据, 通过ResultSet得到一行数据getXXX得到某列数据
JDBC事务
API介绍
Connection接口中与事物有关的方法
1.void setAutoCommit(boolean autoCommint) throws SQLException
2.void commit() throws SQLExceptiont提交事务
3.void rollback() throws SQLException
PreparedStateme
执行原理: 先将SQL语句发送给数据库预编译, preparedStatement会引用着预编译后的结果,可以多次传入不同的参数给preparedStatement对象执行,相当于调用方法多次传入不同参数,减少sql语句编译次数,提高执行效率.并且安全性更高, 没有sql注入的隐患
API介绍
java.sql.Connection有获取PreparedStatement对象的方法
PreparedStatement prepareStatement(String sql)
java.sql.PreparedStatement中有设置SQL语句参数,和执行参数化的SQL语句方法; setXXX(int parameterIndex, XXX)
连接池
连接池的概念:连接池是创建和管理数据库连接的缓冲池技术. 连接池就是一个容器,连接池中保存了一些数据库连接,这些连接是可以重复使用的
C3P0连接池:
开源连接池,Hibernate框架
必须项参数:
use 用户名
password 密码
driverClass驱动名
jdbcUrl 数据库url路径
常用的配置参数:
initialPoolSize:初始连接数
maxPoolSize最大连接数
checkoutTimeout最大等待时间
maxIdleTime最大空闲回收时间
C3P0基本使用
配置文件要求
1.文件名: c3p0-config.xml
2.放在源代码即src目录下
3.配置方式一:使用默认配置
4.配置方式二:使用命名配置
...
...
API介绍
com.mchange.v2.c3p0.ComboPooledDataSource表示c3p0的连接池对象. 常用两种创建连接池方式1.无参构造,使用默认配置,2.有参构造,使用命名配置
public ComboPooledDataSource()
public ComboPooledDataSource(String configName).
public Connection getConnection() throws SQLException
使用步骤:
1.导入jar包c3p0-0.9.1.2.jar
2.编写c3p0-config.xml配置文件,配置对应参数
3.将配置文件放在src目录下
4.创建连接池对象ComboPooledDataSource
5.从连接池中获取连接对象
6.使用连接对象操作数据库
7.关闭资源
DRUID连接池
Druid是阿里巴巴开发的号称为监控而生的数据库连接池, 可以很好的监控DB池连接和SQL的执行情况
API介绍
com.alibaba.druid.pool.DruidDataSourcreFactory类有创建连接池的方法
public static DataSource createDataSource(Properties proterties)
DRUID连接池在创建的时候需要一个Properties对象来设置参数,配置文件名随便,建议放在src目录下方便加载
文件内容:
driverClassName=com.mysql.jdbc.Driver
url=com.mysql.jdbc.Driver
username=用户名
password=密码
initialSize=5
...
使用步骤:
1.在src目录下创建一个properties文件,并设置对应参数
2.加载properties文件的内容到Properties对象中
3.创建DRUID连接池,使用配置文件中的参数
4.从DRUID连接池中取出连接
5.执行SQL语句
6.关闭资源
数据库元数据
元数据:数据库,表,列的定义信息
ParameterMetaData可用于获取有关PreparedStatement对象中每个参数标记类型和属性
如何获取ParameterMetaData:通过PreparedStatement的getParameterMetaData()方法获取.
API:
int getParameterCount()获取PreparedStatement的SQL语句参数?的个数
int getParameterType(int param)获取指定参数的SQL类型
ResultSetMetaData
可用于获取有关ResultSet 对象中列的类型和属性的信息,通过resultset的getMetaData()
int get ColumnCount返回次ResultSet对象中的列数
String getColumnName(int column)获取指定列的名称
String getColumnTypeName(int column)获取指定列的数据库特定类型名称
JDBCTemplate
JDBCTemplate是Spring对JDBC的封装目的是 使JDBC更加易于使用,我们只需要提供sql语句和提取结果.
执行sql语句的方法大致分三类
1.execute;可以执行所有SQL语句,一般用于执行DDL语句
2.update:用于执行insert,update,delete等DML语句
3.queryXxx:用于DQL数据查询语句
API
org.springframework.jdbc.core.JdbcTemplate
public JdbcTemplate(DataSource dataSource)创建JdbcTemplate对象,方便执行SQL语句
public void execute(final String sql)
jdbcTemplate实现查询
1.public int queryForInt(Stirng sql)执行查询结果返回一个int类型的值
2.public long queryForLong(String sql)
3.public
4.public Map
5.public List
6.public
使用BeanPropertyRowMapper做映射返回对象,返回的是一个JavaBean