JDBC学习

1. 基本概念

概念:Java DataBase Connectivity, Java数据库连接,使用Java语言操作数据库。

JDBC本质:官方定义的一套操作所有关系型数据库的规则,及接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实习类。

2. 快速入门

* 步骤:
  1. 导入驱动jar包
     1. 复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
     2. 右键-->Add As Library
  2. 注册驱动
  3. 获取数据库连接对象Connection
  4. 定义sql
  5. 获取执行sql语句的对象Statement
  6. 执行sql,接收返回结果
  7. 处理结果
  8. 释放资源

3. 详解各个对象

  1. DriverManager:驱动管理器对象

     * 功能:
     	1. 注册驱动
     	static vodi registerDriver(Driver driver):注册与给定的驱动程序DriverManager
     	代码中写的: Class.forName("com.mysql.jdbc.Driver");
     	通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
     	static {
     			try {
     					java.sql.DriverManager.registerDriver(new Driver());
     			} catch {
     					throw new RuntimeException("Can't register driver!")
     			}
     	}
     	注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。
     	2. 获取数据库连接
     		* 方法:static Connection getConnection(String url, String user, String password)
     		* 参数:
     				* url:指定连接的路径
     						* 语法:jdbc:mysql://ip地址:端口号/数据库名称
     						* 细节:如果连接的是本机mysql服务器,可以省略ip地址和端口号
     				* user:用户名
     				* password:密码
    
  2. Connection:数据库连接对象

     1. 功能:
     		1. 获取执行sql的对象
     				* Statement createStatement()
     				* PreparedStatement prepareStatement(String sql)
     		2. 管理事务
     				* 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
     				* 提交事务:commit()
     				* 回滚事务:rollback()
    
  3. Statement:执行sql的对象

     1. 执行sql
     		1. boolean execute(String sql):可以执行任意的sql了解
     		2. int executeUpdate(String sql):执行DML(insert, update, delete)语句、DDL(create, alter, drop)语句
     			* 返回值:影像的行数,可以通过这个影响的行数判断DML语句是否执行成功;返回值>0的则执行成功,反之则失败
     		3. ResultSet executeQuery(String sql):执行DQL(select)语句
    
  4. ResultSet:结果集对象,封装结果

     * boolean next():游标向下移动一行,判断当前行是否有数据
     * getXxx(参数):获取数据
     	* Xxx:代表数据类型 ,如:int getInt(),String getString()
     	* 参数:
     		1. int:代表列的编号,从1开始	如:getString(1)
     		2. String:代表列名称		如:getDouble("balance")
     	* 使用步骤:
     		1. 游标向下移动一行
     		2. 判断是否有数据
     		3. 获取数据
    
  5. PrepareStatement:执行sql的对象

4. JDBC工具类

  • 目的:简化书写

  • 分析:

      1. 抽取注册驱动
      2. 抽取一个方法获取连接对象
      	* 需求:不想传递参数,还得保证工具类的通用性
      	* 解决:配置文件
      			jdbc.properties
      					url=
      					user=
      					password=
      					driver=
      3. 抽取一个方法释放资源
    

5. 数据库连接池

  1. 概念:其实就是一个容器(集合),存放数据连接的容器。

     当系统初始化后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
    
  2. 好处:

     1. 节约资源
     2. 用户访问高效
    
  3. 实现:

     1. 标准接口:java.sql.DataSource
     	方法:
     		* 获取连接:getConnection()
     		* 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close() 方法不会关闭连接,而是归还连接
     2. 一般我们不去实现它,由数据库厂商来实现
     	1. C3P0:数据库连接池实现技术
     	2. Druid:数据库连接池实现技术,由阿里巴巴提供
    
  4. C3P0:

     * 步骤:
     	1. 导入jar包(两个)c3p0-0.9.5.2.jar,mchange-commons-java-0.2.12.jar
     		* 注意:还要导入数据库驱动jar包
     	2. 定义配置文件:
     		* 名称:c3pp0.properties或者c3p0-config.xml
     		* 路径:直接将文件放在src目录下即可
     	3. 创建核心对象,数据库连接池对象 ComboPooledDateSource
     	4. 获取连接:getConnection
    
  5. Druid:数据库连接池实现技术

     * 步骤:
      	1. 导入jar包
      	2. 定义配置文件
      	3. 加载配置文件
      	4. 获取连接池对象:通过工厂类DruidDataSourceFactory来获取
      	5. 获取连接
    
     * 定义工具类
     	1. 定义一个工具类JDBCUtils
     	2.  提供静态代码块加载配置文件,初始化连接池对象
     	3. 提供方法
     		1. 获取连接方法:通过数据库连接池获取连接
     		2. 释放资源
     		3. 获取连接池的方法
    

6. Spring JDBC

  • Spring框架对JDBC的简单封装。提供了一个JDBCTemplate的方法完成CRUD的操作

  • 步骤:

      1. 导入jar包
      2. 创建JdbcTemplate对象,依赖于数据源DataSource
      	* JdbcTemplate template = new JdbcTemplate(ds);
      3. 调用JdbcTemplate的方法来完成CRUD的操作
      	* update():执行DML语句,增、删、改语句
      	* queryForMap():查询结果将结果集封装为Map集合
      		* 注意:这个方法查询的结果集长度只能是1
      	* queryForList():查询结果将结果集封装为lsit集合
      		* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
      	* query():查询结果,将结果封装为JavaBean对象
      		* query的参数:RowMapper
      			* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到javaBean的自动封装
      			* new BeanPropertyRowMapper<类型>(类型.class)
      	* queryForObject():查询结果,将结果封装为对象
      		* 一般用于聚合函数的查询
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值