JDBC看一看瞧一瞧
JDBC看一看瞧一瞧
一、基础知识
1、简介
JAVA Database Connectivity java 数据库连接
2、基本步骤
(1)注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
(2)建立连接
conn = DriverManager.getConnection( 协议 + 访问的数据库 , 用户名 , 密码)
(3)创建statement
st = conn.createStatement();
(4)执行sql
rs = st.executeQuery(sql)
(5)释放资源
st.close()
conn.close()
3、工具类构建
(1)驱动防止二次注册
Class.forName("com.mysql.jdbc.Driver");
(2)配置文件
- src下
xxx.properties(driverClass,url,name,password)
- 代码
//创建一个属性配置对象
Properties properties = new Properties();
InputStream is = new FileInputStream("jdbc.properties"); //对应文件位于工程根目录
//使用类加载器,去读取src底下的资源文件。 后面在servlet //对应文件位于src目录底下
//InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("xxx.properties");
//导入输入流。
properties.load(is);
//读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");
(3)注意事项
url:指定连接的路径
-
语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称
-
jdbc:mysql://localhost:3306/day06
协议 子协议 IP : 端口号 数据库 -
细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
4、核心对象
DriverManager:用于注册驱动
Connection: 表示与数据库创建的连接
Statement: 操作数据库sql语句的对象
ResultSet: 结果集或一张虚拟表
5、Statement
(1)int executeUpdate(String sql); --执行insert update delete语句
(2)ResultSet executeQuery(String sql); --执行select语句
(3)boolean execute(String sql); --仅当执行select并且有结果时才返回true,执行其他的语句返回false
6、处理结果集
(1)Object getObject(int index) / Object getObject(String name) 获得任意对象
(2)String getString(int index)/ String getString(String name) 获得字符串
(3)int getInt(int index)/int getInt(String name) 获得整形
(4)double getDouble(int index)/ double getDouble(String name) 获得双精度浮点型
7、预处理对象
(1)PreparedStatement预处理对象,处理的每条sql语句中所有的实际参数,都必须使用占位符?替换
(2)代码
1.PreparedStatement预处理对象代码:
#获得预处理对象,需要提供已经使用占位符处理后的SQL语句
PreparedStatement psmt = conn.prepareStatement(sql)
2.设置实际参数
void setXxx(int index, Xxx xx) 将指定参数设置指定类型的值
参数1:index 实际参数序列号,从1开始。
参数2:xxx 实际参数值,xxx表示具体的类型。
例如:
setString(2, "1234") 把SQL语句中第2个位置的占位符?替换成实际参数 "1234"
3.执行SQL语句:
int executeUpdate(); --执行insert update delete语句.
ResultSet executeQuery(); --执行select语句.
boolean execute(); --执行select返回true 执行其他的语句返回false.
二、数据库连接池
1、数据库连接池技术
(1) C3P0:数据库连接池技术
(2) Druid:数据库连接池实现技术,由阿里巴巴提供的
2、C3P0
(1)jar包:
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.12.jar
(2)配置文件(src)
c3p0.properties 或者 c3p0-config.xml
(3)核心对象
数据库连接池对象ComboPooledDataSource
(4)代码
//1.创建数据库连接池对象
DataSource ds = new ComboPooledDataSource`在这里插入代码片`();
//2. 获取连接对象
Connection conn = ds.getConnection();
4、Druid
(1)jar包:druid-1.0.9.jar
(2)获取数据库连接池对象:通过工厂来来获取 DruidDataSourceFactory
(3)代码
//加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//获取连接
Connection conn = ds.getConnection();
三、DBUtils增删改查
1、简介
DBUtils就是JDBC的简化开发工具包
2、JavaBean组件
(1)JavaBean就是一个类,在开发中常用于封装数据。
(2)组成
1.需要实现接口:java.io.Serializable ,通常偷懒省略了。
2.提供私有字段:private 类型 字段名;
3.提供getter/setter方法:
4.提供无参构造
3、Dbutils三个核心功能
QueryRunner中提供对sql语句操作的API.
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
4、QueryRunner核心类
QueryRunner(DataSource ds) ,提供数据源(连接池),DBUtils底层自动维护连接connection
update(String sql, Object... params) ,执行更新数据 insert update delete
query(String sql, ResultSetHandler<T> rsh, Object... params) ,执行查询 select
5、ResultSetHandler结果集处理类
(1)ArrayHandler ----- 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
(2)ArrayListHandler ----- 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
(3)BeanHandler ----- 将结果集中第一条记录封装到一个指定的javaBean中。
(4)BeanListHandler ----- 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
(5)ColumnListHandler ----- 将结果集中指定的列的字段值,封装到一个List集合中
(6)KeyedHandler ----- 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
(7)MapHandler ----- 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
(8)MapListHandler ------ 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
(9)ScalarHandler ----- 用于单个数据。例如select count(*) from 表操作
四、JDBC事务
1、mysql事务操作
(1)start transaction-----开启事务
(2)commit;-----提交事务
(3)rollback;------回滚事务
2、ThreadLocal
(1)简介:java.lang.ThreadLocal 该类提供了线程局部 (thread-local) 变量,用于在当前线程中共享数据
(2)ThreadLocal工具类底层就是一个Map,key存放的当前线程,value存放需要共享的数据。
(3)
map.put(Thread.currentThread(),conn); //以当前线程对象作为key