package com.xu.test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 数据库连接类 * 说明:封装了 无参,有参,存储过程的调用 * @author iflytek * */ public class ConnectionDB { /** * 数据库驱动类名称 */ private static final String DRIVER = "com.mysql.jdbc.Driver"; /** * 连接字符串 */ private static final String URLSTR = "jdbc:mysql://localhost:3306/website"; /** * 用户名 */ private static final String USERNAME = "root"; /** * 密码 */ private static final String USERPASSWORD = "123456"; /** * 创建数据库连接对象 */ private Connection connnection = null; /** * 创建PreparedStatement对象 */ private PreparedStatement preparedStatement = null; /** * 创建CallableStatement对象 */ private CallableStatement callableStatement = null; /** * 创建结果集对象 */ private ResultSet resultSet = null; static { try { // 加载数据库驱动程序 Class.forName(DRIVER); } catch (ClassNotFoundException e) { System.out.println("加载驱动错误"); System.out.println(e.getMessage()); } } /** * 建立数据库连接 * @return 数据库连接 */ public Connection getConnection() { try { // 获取连接 connnection = DriverManager.getConnection(URLSTR, USERNAME, USERPASSWORD); } catch (SQLException e) { System.out.println(e.getMessage()); } return connnection; } /** * insert update delete SQL语句的执行的统一方法 * @param sql SQL语句 * @param params 参数数组,若没有参数则为null * @return 受影响的行数 */ public int executeUpdate(String sql, List<Object> params) { // 受影响的行数 int affectedLine = 0; try { // 获得连接 connnection = this.getConnection(); // 调用SQL preparedStatement = connnection.prepareStatement(sql); // 参数赋值 if (params != null) { for (int i = 0; i < params.size(); i++) { preparedStatement.setObject(i + 1, params.get(i)); } } // 执行 affectedLine = preparedStatement.executeUpdate(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { // 释放资源 closeAll(); } return affectedLine; } /** * SQL 查询将查询结果直接放入ResultSet中 * @param sql SQL语句 * @param params 参数数组,若没有参数则为null * @return 结果集 */ public ResultSet executeQueryRS(String sql, List<Object> params) { try { // 获得连接 connnection = this.getConnection(); // 调用SQL preparedStatement = connnection.prepareStatement(sql); // 参数赋值 if (params != null) { for (int i = 0; i < params.size(); i++) { preparedStatement.setObject(i + 1, params.get(i)); } } // 执行 resultSet = preparedStatement.executeQuery(); } catch (SQLException e) { System.out.println(e.getMessage()); } return resultSet; } /** * SQL 查询将查询结果:一行一列 * @param sql SQL语句 * @param params 参数数组,若没有参数则为null * @return 结果集 */ public Object executeQuerySingle(String sql, Object[] params) { Object object = null; try { // 获得连接 connnection = this.getConnection(); // 调用SQL preparedStatement = connnection.prepareStatement(sql); // 参数赋值 if (params != null) { for (int i = 0; i < params.length; i++) { preparedStatement.setObject(i + 1, params[i]); } } // 执行 resultSet = preparedStatement.executeQuery(); if(resultSet.next()) { object = resultSet.getObject(1); } } catch (SQLException e) { System.out.println(e.getMessage()); } finally { closeAll(); } return object; } /** * 获取结果集,并将结果放在List中 * * @param sql * SQL语句 * @return List * 结果集 */ public List<Object> excuteQuery(String sql, List<Object> params) { // 执行SQL获得结果集 ResultSet rs = executeQueryRS(sql, params); // 创建ResultSetMetaData对象 ResultSetMetaData rsmd = null; // 结果集列数 int columnCount = 0; try { rsmd = rs.getMetaData(); // 获得结果集列数 columnCount = rsmd.getColumnCount(); } catch (SQLException e1) { System.out.println(e1.getMessage()); } // 创建List List<Object> list = new ArrayList<Object>(); try { // 将ResultSet的结果保存到List中 while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 1; i <= columnCount; i++) { map.put(rsmd.getColumnLabel(i), rs.getObject(i)); } list.add(map); } } catch (SQLException e) { System.out.println(e.getMessage()); } finally { // 关闭所有资源 closeAll(); } return list; } /** * 存储过程带有一个输出参数的方法 * @param sql 存储过程语句 * @param params 参数数组 * @param outParamPos 输出参数位置 * @param SqlType 输出参数类型 * @return 输出参数的值 */ public Object excuteQuery(String sql, List<Object> params,int outParamPos, int SqlType) { Object object = null; connnection = this.getConnection(); try { // 调用存储过程 callableStatement = connnection.prepareCall(sql); // 给参数赋值 if(params != null) { for(int i = 0; i < params.size(); i++) { callableStatement.setObject(i + 1, params.get(i)); } } // 注册输出参数 callableStatement.registerOutParameter(outParamPos, SqlType); // 执行 callableStatement.execute(); // 得到输出参数 object = callableStatement.getObject(outParamPos); } catch (SQLException e) { System.out.println(e.getMessage()); } finally { // 释放资源 closeAll(); } return object; } /** * 关闭所有资源 */ private void closeAll() { // 关闭结果集对象 if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } } // 关闭PreparedStatement对象 if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } } // 关闭CallableStatement 对象 if (callableStatement != null) { try { callableStatement.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } } // 关闭Connection 对象 if (connnection != null) { try { connnection.close(); } catch (SQLException e) { System.out.println(e.getMessage()); } } } }
相关推荐
总结来说,JDBC操作的简单封装是Java开发中的常见实践,它降低了数据库操作的复杂性,提高了代码的可读性和复用性。通过对数据库连接、SQL执行、结果集处理等环节进行抽象和封装,开发者可以更便捷地与数据库进行...
在IT行业中,数据库操作是应用程序开发中的核心部分,而Java JDBC(Java Database ...在实际项目中,还可以考虑使用ORM框架如Hibernate或MyBatis,它们提供了更高级别的抽象,进一步降低了数据库操作的复杂度。
描述:此文章将详细介绍一个用于简化Java中JDBC操作的封装类,该类通过提供一系列方法来加速数据库编程任务,包括建立数据库连接、执行查询、处理结果集以及执行更新操作。 ### 一、JDBC封装类概述 在Java开发中,...
文件`annotation_orm`可能包含了实现这些功能的核心代码,如注解定义、反射处理逻辑以及JDBC操作的封装。通过学习这个案例,开发者可以深入理解如何在实际项目中有效利用Java的注解和反射机制,提升代码质量和可维护...
本资源是对JDBC的封装,方便在项目中使用,其中BaseDao.java是对JDBC操作的封装,使用时让自己的Dao类继承即可,然后调用其中的executeQuery和executeOthe分别执行DQL和DML操作。dbinfo.properties属性文件存储基本...
实现完全的对jdbc对象的封装,只需调用则可对数据库进行CRUD操作
基于spring jdbc的上层封装,底层jdbc操作基于JdbcTemplate,支持MySql、SqlServer、Oracle数据库,强弱类型完美结合 1、mini-jdbc:针对spring jdbc的一些不方便的地方,做了一些封装,大小写不敏感,简化了日常的...
本文将深入探讨对JDBC的封装,旨在提高数据库操作的效率、易用性和可维护性。 首先,理解JDBC的基本流程至关重要。通常包括以下步骤: 1. 加载驱动:使用`Class.forName()`方法加载数据库驱动,使得Java程序能够与...
简单易用的数据库封装操作,包含数据库连接池的基本实现,数据库连接可重用,所有的操作都脱离源生JDBC操作,开发人员只需要熟悉Java集合的用法,会写Sql即可轻松的使用该封装好的JDBC API写出合理的代码。...
封装JDBC操作代码是为了提高代码的复用性,减少重复工作,并且能够更好地管理和控制数据库连接,避免资源泄露。下面我们将详细探讨这个主题。 1. **JDBC基础概念** JDBC是Java API的一部分,它提供了连接数据库、...
描述中的“可以简化jdbc操作数据库的过程”意味着这个jar包通过提供高层次的接口,隐藏了JDBC底层的复杂性,使开发者能够专注于业务逻辑而不是底层的数据库操作。例如,执行SQL可能只需要一行代码,而处理结果集可能...
通过对JDBC的封装,开发者可以更高效地管理数据库连接,同时降低了系统的资源消耗,提升了用户体验。在实际项目中,选择合适的数据库连接池,并进行合理的封装,是游戏服务器开发中的重要工作。
现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...
1. **代码复用**:封装后的JDBC操作可以应用于项目中的任何地方,减少重复代码。 2. **易用性**:通过方法调用的方式,使得数据库操作更简单,降低学习成本。 3. **异常处理**:封装过程中可以添加合适的异常处理,...
- 在封装JDBC操作的类中使用泛型,可以实现对多种数据类型的通用处理。例如,可以定义一个名为`DBUtil<T>`的类,其中`T`代表数据表的实体类。 - 泛型方法如`insert(T entity)`,`update(T entity)`,`deleteById...
在实际开发中,这样的封装类可以大大提高开发效率,减少重复代码,并且便于团队协作和代码复用。通过Map和VO对象,可以轻松地将数据库结果映射到Java对象,简化数据处理流程。不过,为了更好地理解和使用这个库,你...
JavaBean是Java编程中的一种设计模式,主要用于封装数据和业务逻辑。它通常包含一组getter和setter方法,使得数据可以被安全地访问和修改。...对于处理大量数据库操作的项目,这样的工具是不可或缺的。
"jdbc-utils.rar_Utils_jdbc_jdbc封装"这个压缩包提供了一些工具类,用于简化JDBC操作,提高代码的可读性和可维护性。下面我们将详细探讨JDBC封装处理类的原理和实现。 1. **JDBC基础** - JDBC API包括一组Java...
连接池的初始化、创建等仔细看构造函数的doc文档,就知道如何操作。我自己用着很方便。 有两个初始化方法,分别用于初始化多个数据库对象,或者单个数据库对象。 String[] dbPoolName = { "default", "sec" }; ...
这个DEMO对于初学者来说是一个很好的实践,通过它,我们可以了解到JDBC操作的基本流程和最佳实践,如使用PreparedStatement防止SQL注入,以及正确关闭资源以避免内存泄漏。同时,封装工具类和回调函数的设计思路也有...