JDBC

概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库
* JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

基本入门

* 代码实现:Statement stmt = null;Connection conn = null;try {//1. 注册驱动Class.forName("com.mysql.jdbc.Driver");//2. 定义sql//account表 添加一条记录String sql = "insert into account values(null,'王五',3000)";//account表 修改记录String sql  = "update account set balance = 1500 where id = 3";//account表 删除一条记录String sql  = "delete from account where id = 3";//3.获取Connection对象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//4.获取执行sql的对象 Statementstmt = conn.createStatement();//5.执行sqlint count = stmt.executeUpdate(sql);//影响的行数//6.处理结果System.out.println(count);if(count > 0){System.out.println("添加成功!");}else{System.out.println("添加失败!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {//stmt.close();//7. 释放资源//避免空指针异常if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}

DriverManager:驱动管理对象

1. 注册驱动:告诉程序该使用哪一个数据库驱动jarstatic void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。 写代码使用:  Class.forName("com.mysql.jdbc.Driver");这段代码会初始化下面的静态代码块通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。
2. 获取数据库连接:* 方法:static Connection getConnection(String url, String user, String password) * 参数:* url:指定连接的路径* 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称* 例子:jdbc:mysql://localhost:3306/db3* 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称* user:用户名* password:密码 //获取数据库连接对象//Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");Connection conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");

Connection:数据库连接对象

功能:1. 获取执行sql 的对象,获取执行平台,一个预编译的执行平台* Statement createStatement()* PreparedStatement prepareStatement(String sql)  注意:* 一定要保证处于同一个事物中的所有材质使用的是同一个connection对象* 一个事务中的多次操作必须是同一个连接2. 管理事务:* 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务* 提交事务:commit() * 回滚事务:rollback()

Statement:执行sql的对象

1. boolean execute(String sql) :可以执行任意的sql 了解,因为这个方法可以执行任意的sql语句,如果执行的是查询语句,执行完成之后需要我们自己去获取查询结果
2. int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句* 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
3. ResultSet executeQuery(String sql)  :执行DQL(select)语句,只能执行查询语句

ResultSet:结果集对象,封装查询结果

* boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
* getXxx(参数):获取数据* Xxx:代表数据类型   如: int getInt() , String getString()* 参数:1. int:代表列的编号,从1开始   如: getString(1)2. String:代表列名称。 如: getDouble("balance")* 注意:* 使用步骤:1. 游标向下移动一行2. 判断是否有数据3. 获取数据//循环判断游标是否是最后一行末尾。while(rs.next()){//获取数据//6.2 获取数据int id = rs.getInt(1);String name = rs.getString("name");double balance = rs.getDouble(3);System.out.println(id + "---" + name + "---" + balance);}

PreparedStatement:执行sql的对象

1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题1. 输入用户随便,输入密码:a' or 'a' = 'a2. sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'
2. 解决sql注入问题:使用PreparedStatement对象来解决
3. 预编译的SQL:参数使用?作为占位符
4. 注意:建议使用PreparedStatement来完成增删改查的所有操作1. 可以防止SQL注入2. 效率更高

数据库连接池

1. 概念:其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。2. 好处:1. 节约资源2. 用户访问高效3. 实现:1. 标准接口:DataSource   javax.sql包下的1. 方法:* 获取连接:getConnection()* 归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接2. 一般我们不去实现它,有数据库厂商来实现1. C3P0:数据库连接池技术2. Druid:数据库连接池实现技术,由阿里巴巴提供的

C3P0:数据库连接池技术

* 步骤:1. 导入jar包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,2. 定义配置文件:* 名称: c3p0.properties 或者 c3p0-config.xml* 路径:直接将文件放在src目录下即可。3. 创建核心对象 数据库连接池对象 ComboPooledDataSource4. 获取连接: getConnection
* 代码:/* * 创建数据库连接池对象,c3p0是一个开源的JDBC连接池,* 它相对于Druid来说有一个更方便的配置连接方式,就是自动读取配置文件**/DataSource ds  = new ComboPooledDataSource();// 获取连接对象Connection conn = ds.getConnection();

Druid:数据库连接池实现技术,由阿里巴巴提供的

1. 导入jar包 druid-1.0.9.jar
2. 定义配置文件:* 是properties形式的* 可以叫任意名称,可以放在任意目录下
3. 加载配置文件。Properties
4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory
5. 获取连接:getConnection//加载配置文件Properties pro = new Properties();InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//获取连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(pro);//获取连接Connection conn = ds.getConnection();

抽取JDBC工具类 : JDBCUtils

1. 定义一个类 JDBCUtils
2. 提供静态代码块加载配置文件,初始化连接池对象
3. 提供方法1. 获取连接方法:通过数据库连接池获取连接2. 释放资源3. 获取连接池的方法

代码:

/*
* 1. 声明静态数据源成员变量
* 2. 创建连接池对象
* 3. 定义公有的得到数据源的方法
* 4. 定义得到连接对象的方法
* 5. 定义关闭资源的方法
**/
public class JDBCUtils {// 1.   声明静态数据源成员变量private static DataSource ds;// 2. 创建连接池对象static {// 加载配置文件中的数据InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");Properties pp = new Properties();try {pp.load(is);// 创建连接池,使用配置文件中的参数ds = DruidDataSourceFactory.createDataSource(pp);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}// 3. 定义公有的得到数据源的方法public static DataSource getDataSource() {return ds;}// 4. 定义得到连接对象的方法public static Connection getConnection() throws SQLException {return ds.getConnection();}// 5.定义关闭资源的方法public static void close(Connection conn, Statement stmt, ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException e) {}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {}}if (conn != null) {try {conn.close();} catch (SQLException e) {}}}// 6.重载关闭方法public static void close(Connection conn, Statement stmt) {close(conn, stmt, null);}
}

4,SpringJDBC框架

1,步骤

* Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
* 步骤:1. 导入jar包2. 创建JdbcTemplate对象。依赖于数据源DataSource* JdbcTemplate template = new JdbcTemplate(ds);3. 调用JdbcTemplate的方法来完成CRUD的操作* update():执行DML语句。增、删、改语句* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合* 注意:这个方法查询的结果集长度只能是1* queryForList():查询结果将结果集封装为list集合* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中* query():查询结果,将结果封装为JavaBean对象* query的参数:RowMapper* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装* new BeanPropertyRowMapper<类型>(类型.class)* queryForObject:查询结果,将结果封装为对象* 一般用于聚合函数的查询

【工具类】JDBCUtils,数据库连接池相关推荐

  1. python数据库连接池工具类_Python数据库连接池DBUtils

    DBUtils简介 DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放 ...

  2. 工具类涉及数据库连接、格式转换、文件操作、发送邮件等等

    工具类涉及数据库连接.格式转换.文件操作.发送邮件等等 数据库连接工具类 数据库连接工具类--仅仅获得连接对象 ConnDB.java import java.sql.Connection; impo ...

  3. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  4. JDBC:JDBC工具类JDBCUtils

    JDBC工具类:JDBCUtils 1.在src目录下创建一个文件:jdbc.properties url=jdbc:mysql://localhost/stu_db ---数据库的url地址 use ...

  5. 工具类JdbcUtils

    /** * 这是一个工具类,一般工具类不能被继承,所以定义成final* * 不需要构造实例,用私有的构造方法* 单例模式或者用static静态代码块,* 本例用static,没有实例* */ pac ...

  6. 常用并发工具类(线程池)

    文章目录 概述 ThreadPoolExecutor ThreadPoolExecutor 的主要属性 Worker 主要属性 线程池的状态 线程池的状态流转 线程池提交任务的执行流程 线程数量的设置 ...

  7. 连接池-DBCPUtils工具类(dbcp)

    一.合建properties文件 在src目录下创建一个名为"dbcpconfig.properties"的文件,里面的内容为: #连接设置 driverClassName=com ...

  8. 连接池-C3P0Utils工具类(c3p0)

    一.创建文件 在src目录下创建一个名为"c3p0-config.xml"的文件,里面的内容为: <?xml version="1.0" encoding ...

  9. java 数据库连接池 实例_java数据库连接池和数据库连接示例

    import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mc ...

  10. estore案例的一些工具类

    JDBCUtils      获得连接池和获得连接 package cn.utils;import java.sql.Connection; import java.sql.SQLException; ...

最新文章

  1. 2017《面向对象程序设计》课程作业八
  2. [usb]usb otg和host
  3. 未来物联网全栈开发 --JavaScript or Python?
  4. Windows下Qt5搭建Android开发环境笔记
  5. baseresponse响应类_Java response响应体和文件下载实现原理
  6. SpringMVC框架使用注解执行定时任务
  7. python解决数据不均衡,上采样方法解决
  8. 连接access时的REGDB_E_CLASSNOTREG(0x80040154)错误
  9. linux shell 命令批量杀死进程
  10. LINUX内核段错误调试详细指南精品培训PPT讲义
  11. 雪球python爬虫炒股_关于雪的作文
  12. Office Timeline一款非常专业好用的PPT插件
  13. linux上的smartsvn图形客户端,linux 下svn图形客户端smartsvn 安装
  14. [Linux用户空间编程-5]:用IPTable实现NAT功能
  15. c语言 笔试 多选题,全国计算机等级考试C语言十六个选择题类高频知识点
  16. OpenAi ChatGPT注册及使用教程
  17. 计算机基础笔记(摘录)
  18. 最佳搜索引擎蜘蛛工具
  19. openlayer+虚线、实线
  20. sql怎么与oracle连接,sql怎么连接oracle数据库

热门文章

  1. 不可思议的#define
  2. Java的反射机制 工厂模式综合讲解【转载自51CTO】
  3. 《认清C++语言》---谈谈const
  4. 浅析Microsoft .net PetShop程序中的购物车和订单处理模块(Profile技术,异步MSMQ消息)转...
  5. Mac下如何显示隐藏文件/文件夹
  6. Android最佳性能实践(二)——分析内存的使用情况
  7. golang中的闭包
  8. 在malloc函数中为什么常用sizeof来设定内存分配的大小?
  9. [微信开发] - 用户获取推广二维码
  10. jQuery 之 [ 动画 ]