JDBC

使用步骤:

  1. 注册数据库驱动
  2. 通过DriverManager获取数据库连接
  3. 通过Connection对象获取Statement对象
  4. 使用Statement执行SQL语句
  5. 操作ResultSet结果集
  6. 回收数据库资源

案例:

public class Example {public static void main(String[] args) throws SQLException {Statement stmt = null;ResultSet rs   = null;Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/test1";String username = "root";String password = "mysql123";conn = DriverManager.getConnection(url,username,password);stmt = conn.createStatement();String sql = "select * from inf";rs = stmt.executeQuery(sql);System.out.println("id | name | age");while (rs.next()){int id = rs.getInt("id");String name = rs.getString("name");String age  = rs.getString("age");System.out.println(id + "|" + name + "|" + age + "|");}}catch (ClassNotFoundException e){e.printStackTrace();}finally {if (rs != null){try {rs.close();}catch (SQLException e){e.printStackTrace();}rs = null;}if (stmt != null){try {stmt.close();}catch (SQLException e){e.printStackTrace();}stmt = null;}if (conn != null){try {conn.close();}catch (SQLException e){e.printStackTrace();}conn = null;}}}
}

数据库连接池

使用步骤:

  1. 声明静态数据源成员变量
  2. 创建连接池对象
  3. 定义公有的得到数据源的方法
  4. 定义得到连接对象的方法
  5. 定义关闭资源的方法
  6. 具体案例代码:

工具类:

/*** @author Damon Wang* @data 2020/9/15 08:47:26* 1. 声明静态数据源成员变量* 2. 创建连接池对象* 3. 定义公有的得到数据源的方法* 4. 定义得到连接对象的方法* 5. 定义关闭资源的方法*/public class DruidUtils {// Create a static variable ds;private static DataSource ds;// create connector object;static {InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");Properties pp = new Properties();try {// create connector pool and properties's parameter;pp.load(is);ds = DruidDataSourceFactory.createDataSource(pp);}catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}// Create public the way of getting DataSource;public static DataSource getDataSource() {return ds;}// Create object the way of connector;public static Connection getConnection() throws SQLException {return ds.getConnection();}// Create thr way of turning of connector datasource;public static void close(Connection conn, Statement stmt, ResultSet rs){if (rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null){try{stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}}// Reload the way of turning of;public static void close(Connection conn,Statement stmt) {close(conn, stmt);}// Create the test Case;public static void main(String[] args)throws SQLException {System.out.println(ds.getConnection());}}

测试类:

@WebServlet(name = "RegisterServlet",urlPatterns = {"/RegisterServlet"})
public class RegisterServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");PrintWriter out = response.getWriter();String phone = request.getParameter("phone");String password = request.getParameter("password");String sql = "insert into user(phone,password)values(?,?)";PreparedStatement ps = null;ResultSet rs = null;Connection con = null;try {con = DruidUtils.getConnection();ps = con.prepareStatement(sql);ps.setString(1,phone);ps.setString(2,password);int i = ps.executeUpdate();if (i == 1) {String sqlOne = "select * from user where phone = " + phone;ps = con.prepareStatement(sqlOne);rs = ps.executeQuery();while (rs.next()) {String out_phone = rs.getString("phone");String out_password = rs.getString("password");out.println(out_phone);out.println(out_password);out.println("Register is success");}}else {out.println("Register is wrong.");}} catch (SQLException e) {e.printStackTrace();}finally {DruidUtils.close(con,ps);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}

对比分析:数据库连接池相对JDBC操作具有简洁性、高效性、便于后期维护。

  1. 数据库连接池实现功能分离,数据库连接池只负责分配、管理、和释放数据库连接,而CRUD基本操作可直接调用数据库连接池工具,极大减少代码量(简洁性),同时也便于服务器后期维护。
  2. 对于JDBC每次创建和断开都会消耗一定的时间和IO资源。这种频繁操作Connection对象十分影响数据库访问效率。由于在大量的并发访问时(例:十万次),频繁创建必然会影响数据库访问效率。而数据库连接池采用资源分配的理念,用户使用完Connection将其返回,以减少创建和断开数据库连接的次数,提高数据库的访问效率(高效性)。

JDBC与数据库连接工具对比分析相关推荐

  1. pg与msql的数据库调研对比分析

    简介 MySQL的口号是"世界上最流行的开源关系型数据库",而PostgreSQL的Slogan则是"世界上最先进的开源关系型数据库",一看这两位就是老冤家了. ...

  2. JDBC实现数据库的增删改查

    本文主要讲解: JDBC的概念 JDBC的原理 创建用于测试的数据库 使用JDBC操作数据库 思考与分析 关于JDBC JDBC(Java DataBase Connectivity,java数据库连 ...

  3. Jdbc访问mysql查询聚合函数_JDBC连接参数设置对Oracle数据库的影响分析

    一次数据库性能问题处理引发的JDBC参数设置思考 近期某环境下系统,出现大面积页面访问缓慢情况,每个页面交易响应时间2-5秒,严重超过平日访问阈值. 经排查分析,问题主要出现在数据库,生成AWR得到3 ...

  4. 数据库防护技术对比分析

    过去,信息安全工作主要围绕着网络层.主机层等边界防护采取了一系列的安全措施,已建立起相对安全的数据应用环境,但由于技术局限和相关安全产品匮乏等原因,数据库安全建设一直未能得到有效开展,这就造成了数据能 ...

  5. 以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全?

    以云数据库产品为例深度对比分析:华为云更安全还是阿里云更安全? 博主介绍 目前市场云 阿里云 阿里云云原生关系型数据库 PolarDB MySQL引擎 什么是PolarDB 产品优势 产品架构 一写多 ...

  6. mysql bulk update_Django bulk_create()、update()与数据库事务的效率对比分析

    下面以创建10000个对象为例进行测试: # 用for循环挨个创建,共花费37秒 for i in range(10000): name="String number %s"%i ...

  7. 四种分布式数据库场景选型、优缺点对比分析和未来展望 | 趋势解读

    [摘要]随着互联网金融场景的不断拓展,海量的数据访问和处理造成传统的集中式数据库开始表现出性能瓶颈,分布式数据库的研究和场景使用应运而生,而数据的安全和合规也随着企业对数据使用的要求越来越高更加重视. ...

  8. 一点杂感 以及 java8 Streams API 与 C# Linq 简要对比分析

    写在前面的一点小吐槽.一点杂感 学 Haskell 学了一段时间之后,虽说拿他来写东西还是完全不行,但是看别的语言特性时,总是会带着一种"诶,这玩意在哪哪见过"的蜜汁既视感.且不说 ...

  9. hibernate oracle查询最大值_Java大数据:Mybatis和Hibernate对比分析

    在Java企业级平台开发任务当中,持久层框架的选择,Mybatis和Hibernate都占据一定的市场.从大趋势来说,传统企业偏爱Hibernate,而互联网更偏爱Mybatis.今天的大数据基础分享 ...

最新文章

  1. 磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制
  2. dijkstra+堆优化
  3. arthas的安装(在线/离线)和卸载
  4. 河北大学计算机在哪学,河北大学计算机科学与技术学院
  5. AspNet Identity 和 Owin 谁是谁
  6. 实现Java监视的12个步骤程序存在缺陷
  7. abstract类中不可以有private的成员_C++ 类:声明成员函数与实现
  8. oracle sql不用distinct去除重复,oracle sql 去重复记录不用distinct如何实现
  9. 用python处理excel表格_使用Python处理excel表格(openpyxl)及表格中的中文处理
  10. Unity 自学与进阶必会目录
  11. java下载图片到本地
  12. 【CentOS8.0开启防火墙放行8081端口】
  13. 建筑CAD基础设计【2】
  14. ASP.NET 班级网站-程序+配置文档
  15. Linux 基本指令 Pt.2
  16. docker--镜像
  17. 100个深度图像分割算法,纽约大学UCLA等最新综述论文
  18. 记一次服务器故障带来的网站降权恢复记录
  19. 计算机重复重启,计算机反复重启
  20. 【ALM】POLARION ALM之需求管理解决方案介绍02

热门文章

  1. dataframe 拆分 分裂
  2. 输入输出导入导出问题
  3. LeetCode简单题之子数组最大平均数 I
  4. OpenCL,OpenGL编译
  5. 光谱投影颜色感知器件与围栅多桥沟道晶体管技术
  6. MindSpore技术理解(下)
  7. CUDA运行时Runtime(三)
  8. Android中出现内存泄露的原因
  9. 2021年大数据Hadoop(三):Hadoop国内外应用
  10. Laravel Dcat Admin 安装