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
posted @ 2020-03-05 15:20  李泽坤  阅读(99)  评论(0编辑  收藏  举报