JDBC连接数据库封装实现方法分享 (jdbc连接数据库封装)

JDBC是Java Database Connectivity的缩写,即Java数据库连接,是Java的一个标准的接口,定义了一套标准的访问数据库的接口。JDBC提供了一种基于SQL语句进行数据库操作的方式,使得Java程序能够访问各种类型的数据库。

JDBC连接数据库是Java开发中必不可少的一部分,但是每次使用JDBC连接数据库时都需要手动编写大量的重复代码,这不仅繁琐而且容易出错。因此,我们通常会将数据库的连接和操作封装起来,以减少代码的重复性,提高代码的重用性和可维护性。接下来,本文将介绍JDBC连接数据库封装实现方法的详细步骤。

实现步骤

1、定义一个数据库连接池类

为了封装数据库连接,我们需要定义一个连接池类,用于维护数据库连接。在该类中,我们需要定义一个数据库连接池的列表(List)和一个线程池(ExecutorService),在连接池初始化时,我们需要向连接池添加指定数量的数据库连接,同时创建一个线程池用于管理数据库连接的释放。连接池类的代码如下:

“`java

public class ConnectionPool {

private List pool;

private static final int DEFAULT_POOL_SIZE = 5;

private static final int MAX_POOL_SIZE = 10;

private static final int TIMEOUT = 5000;

private ConnectionPool() {

pool = new ArrayList(DEFAULT_POOL_SIZE);

for (int i = 0; i

pool.add(createConnection());

}

}

public static ConnectionPool getInstance() {

return ConnectionPoolHolder.INSTANCE;

}

private static class ConnectionPoolHolder {

private static final ConnectionPool INSTANCE = new ConnectionPool();

}

public synchronized Connection getConnection() {

int index = pool.size() – 1;

Connection connection = pool.remove(index);

try {

if (connection.isClosed()) {

connection = getConnection();

}

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

connection = getConnection();

}

return connection;

}

public synchronized void releaseConnection(Connection connection) {

if (pool.size() >= MAX_POOL_SIZE) {

try {

connection.close();

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

} else {

pool.add(connection);

}

}

private Connection createConnection() {

Connection connection = null;

try {

Class.forName(“com.mysql.jdbc.Driver”);

String url = “jdbc:mysql://localhost:3306/test”;

String user = “root”;

String password = “123456”;

connection = DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException | SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

return connection;

}

public void closePool() {

for (Connection connection : pool) {

try {

connection.close();

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

}

pool.clear();

}

}

“`

在该类中,我们使用了单例模式来保证全局只有一个ConnectionPool对象。在getConnection()方法中,我们从连接池中获取一个数据库连接,若该连接已关闭,则尝试从池中获取另一个连接;在releaseConnection()方法中,我们将数据库连接释放回连接池供其他线程使用;在createConnection()方法中,我们使用DriverManager获取一个数据库连接。

2、定义一个数据库操作类

除了连接池类之外,我们还需要定义一个数据库操作类,用于执行各种SQL语句。在该类中,我们需要定义一个ConnectionPool对象以获取数据库连接,同时定义一系列的执行SQL语句的方法。数据库操作类的代码如下:

“`java

public class DBHelper {

private ConnectionPool connectionPool;

public DBHelper() {

connectionPool = ConnectionPool.getInstance();

}

public ResultSet executeQuery(String sql) {

ResultSet resultSet = null;

try (Connection connection = connectionPool.getConnection();

PreparedStatement statement = connection.prepareStatement(sql)) {

resultSet = statement.executeQuery();

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

return resultSet;

}

public int executeUpdate(String sql) {

int rowsUpdated = 0;

try (Connection connection = connectionPool.getConnection();

PreparedStatement statement = connection.prepareStatement(sql)) {

rowsUpdated = statement.executeUpdate();

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

return rowsUpdated;

}

public int executeUpdate(String sql, List params) {

int rowsUpdated = 0;

try (Connection connection = connectionPool.getConnection();

PreparedStatement statement = connection.prepareStatement(sql)) {

int index = 1;

for (Object obj : params) {

statement.setObject(index, obj);

index++;

}

rowsUpdated = statement.executeUpdate();

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

return rowsUpdated;

}

}

“`

在该类中,我们使用了try-with-resources语句来自动关闭资源。executeQuery()方法用于执行SELECT语句,并返回一个ResultSet对象;executeUpdate()方法用于执行INSERT、UPDATE、DELETE语句,并返回受影响的行数;executeUpdate()方法还提供了一个可变参数的params列表,用于设置PreparedStatement中的参数。

3、测试连接池和数据库操作类

在完成了连接池和数据库操作类的定义之后,我们需要对其进行测试。在测试之前,我们需要在数据库中创建一个名为”test”的数据库,并在该数据库中创建一个名为”users”的表,其结构如下:

“`sql

CREATE TABLE `users` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

`age` int(11) NOT NULL,

PRIMARY KEY (`id`)

);

“`

在测试类中,我们需要通过DBHelper对象来执行各种SQL语句(查询、插入等),同时需要手动释放资源。测试代码如下:

“`java

public class TestJDBC {

public static void mn(String[] args) {

testConnectionPool();

testDBHelper();

}

private static void testConnectionPool() {

ConnectionPool connectionPool = ConnectionPool.getInstance();

for (int i = 0; i

Connection connection = connectionPool.getConnection();

if (connection != null) {

System.out.println(“Success: ” + connection);

} else {

System.out.println(“Fl: ” + i + “, ” + connection);

}

}

connectionPool.closePool();

}

private static void testDBHelper() {

DBHelper dbHelper = new DBHelper();

// insert

String sql = “INSERT INTO `users`(`name`, `age`) VALUES (‘Tom’, 20)”;

int rowsUpdated = dbHelper.executeUpdate(sql);

System.out.println(“Rows updated: ” + rowsUpdated);

// insert with parameters

sql = “INSERT INTO `users`(`name`, `age`) VALUES (?, ?)”;

List params = new ArrayList();

params.add(“Jerry”);

params.add(22);

rowsUpdated = dbHelper.executeUpdate(sql, params);

System.out.println(“Rows updated: ” + rowsUpdated);

// select

sql = “SELECT * FROM `users`”;

ResultSet resultSet = dbHelper.executeQuery(sql);

try {

while (resultSet.next()) {

System.out.println(“ID: ” + resultSet.getInt(“id”)

+ “, Name: ” + resultSet.getString(“name”)

+ “, Age: ” + resultSet.getInt(“age”));

}

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

try {

if (resultSet != null) {

resultSet.close();

}

} catch (SQLException e) {

System.out.println(“Error: ” + e.getMessage());

}

}

}

“`

在测试代码中,我们首先通过testConnectionPool()方法测试连接池的功能,可以看到在连接池已满的情况下,getConnection()方法会返回null。然后我们通过testDBHelper()方法测试DBHelper类的功能,可以看到在执行各种SQL语句时,我们不需要手动获取和释放数据库连接,这些操作已经被封装在DBHelper类的方法中了。

相关问题拓展阅读:

  • java 使用jdbc技术怎样连接同一个数据库,但有多个数据库名?

java 使用jdbc技术怎样连接同一个数据库,但有多个数据库名?

将连接封搭埋装起来 一个工厂类

public class ConnectionFactory {

private static String _url = null;

private static String _user = null;

private static String _pwd = null;

private static String _driver = null;

public ConnectionFactory() {

// TODO Auto-generated constructor stub

}

static {

_driver = DBConfig.getDBConfig().getValue(“driver”);

_user = DBConfig.getDBConfig().getValue(“user”);

_pwd = DBConfig.getDBConfig().getValue(“password”);

_url = DBConfig.getDBConfig().getValue(“url”);

}

public static Connection getConnection() throws SQLException {

try {

Class.forName(_driver);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

System.out.println(“注册驱动失败”);

e.printStackTrace();

throw new SQLException(“注册键租驱动失败”);

}

return DriverManager.getConnection(_url, _user, _pwd);

}

public static void release(Connection con, Statement stm, ResultSet rs) {

try {

if (con != null) {

con.close();

}

if (stm != null) {

con.close();

}

if (rs != null) {

rs.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

然后再写一个配置文稿枝兆件

public class DBConfig {

private static DBConfig instance;

private static Properties info = new Properties();

private static String path = “dbconfig.properties”;

public DBConfig() {

// TODO Auto-generated constructor stub

readDBConfig();

}

private void readDBConfig() {

InputStream inputStream = null;

try {

if (!(new File(path).exists())) {

path = “./bin/” + path;

}

inputStream = new FileInputStream(path);

info.load(inputStream);

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

public synchronized static DBConfig getDBConfig() {

// 注意这里

if (instance == null) {

instance = new DBConfig();

}

return instance;

}

public String getValue(String key) {

return info.getProperty(key);

}

public static void main(String args) {

String driver = DBConfig.getDBConfig().getValue(“driver”);

String user = DBConfig.getDBConfig().getValue(“user”);

String pwd = DBConfig.getDBConfig().getValue(“password”);

String url = DBConfig.getDBConfig().getValue(“url”);

System.out.println(driver + ‘\n’ + user + ‘\n’ + pwd + ‘\n’ + url);

}

}

到时调用的时候

你将DBConfig中放在一个.file文件中 读出来 下面就是DBConfig文件:是sqlserver的

想连接什么数据库 把driver url改一下就OK了 到网上查

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver

url=jdbc:microsoft:

user=sa

password=

ConnectionFactory.getConnection(); 这样一句话就连接上了

ConnectionFactory.release(); 就关闭相关对象了

关于jdbc连接数据库封装的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

数据库运维技术服务 » JDBC连接数据库封装实现方法分享 (jdbc连接数据库封装)

管理员 普通

分享到:



相关推荐

Java轻松实现数据库格式的删除操作 (java里删除数据库格式)

重要性和使用方法 (数据库不能重复的约束条件)

数据库连接关闭判断方法详解 (怎么判断数据库连接connect是否关闭)

05数据库1433:让你的数据管理更高效! (05数据库1433)

如何优化数据库的订单查询? (数据库题 订单)

Java数据库操作:如何插入时间戳? (java数据库插入时间戳)

云端储存数据库数据安全保障与便捷性的平衡选择 (如果将数据库放在云端)

PowerBuilder数据库连接指南,30秒上手! (powerbuilder如何连接数据库)

随机文章

使用jquery操作数据库,让前后端互动更方便。 (jquery 与数据库)

如何配置PL/SQL的数据库连接 (plsql配置数据库连接)

如何正确使用数据库表update语句? (数据库表update语句)

MySQL数据库脚本升级:升级数据库与应用程序版本,提高安全性与性能。 (mysql数据库脚本升级)

如何安全、高效地维护邮件地址数据库? (邮件地址数据库)

le击解决方案 (access数据库 doub)

最近更新
  • SQL Server开启进销存管理(sqlserver进销存)
  • Windows用户学习Linux远程连接命令(linux 远程连接命令)
  • 手把手教你使用MySQL创建数据库(mysql手动创建数据库)
  • Oracle数据库的紧缩之路(oracle 数据库收缩)
  • 为项目构建更优性能: 使用Redis缓存(项目中使用redis缓存)
  • 备份简单又高效——Linux开源备份软件(linux 开源备份软件)
  • 改变MSSQL数据库端口号:一个简单的方法指南(改mssql数据库端口号)
  • MSSQL分区表索引:优化数据存储(mssql 分区表 索引)
  • MSSQL客户端工具:快速下载体验!(mssql客户端工具下载)
  • MSSQL独占模式加速数据库更新(mssql 独占 更新)
  • 话题SQLServer:探索最新技术发展趋势(关于SQLServer的)
  • 用Redis维护IP限制列表(redis ip限制)
  • MySQL如何运行SQL文件(mysql运行sql文件)
  • MSSQL 更新文件组结构:简便、高效、安全(MSSQL修改文件组)
  • 优秀的SQL Server:值得信赖的性能特点(sqlserver 特点)
  • MSSQL与RAVN技术结合,更好地保护数据安全(mssql ravn)
  • MSSQL数据库密码:查看指南(mssql数据库密码查看)
  • MSSQL获取月份数据实现方案(mssql 获取月份)
  • Redis缓解项目压力:细节决定成败(项目加redis)
  • 【mssql中实现多个like查询的方式】(mssql 多个like)
  • 标签

    Linux Linux教程 Linux资讯 MacOS MacOS教程 MacOS资讯 MongoDB MongoDB教程 MongoDB资讯 MSSQL MSSQL错误 MySQL mysql教程 MySQL维护 MySQL资讯 Neo4j Neo4j教程 Neo4j资讯 ORACLE Oracle优化 oracle内部视图 oracle参数 oracle开发 oracle异常修复 oracle故障处理 oracle教程 oracle维护 oracle视图 ORACLE资讯 oracle远程维护 ORA错误码 Redis Redis教程 Redis资讯 SQLServer SQLServer报错 SQLServer教程 SQLServer资讯 SQL修复 SQL异常 SQL远程处理 Windows 技术文档 操作系统 数据库

    技术标签:安装配置、性能优化、备份恢复、异常处理、数据迁移、咨询服务。

    本站导航
    • 服务范围
    • 关于我们
    • 隐私政策
    技术文章
    • 数据库技术
    • 操作系统技术
    • 教程服务
    快速搜索

    数据恢复、异常处理、MySQL、Oracle

    本站部分资源来自互联网收集,仅供用于学习和交流,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站站长删除

    © 2020 Theme by – 数据服务 . All rights reserved 苏ICP备15021567号




    • 登录
    • 注册

    安全登录
    立即注册 忘记密码?

    香港服务器首选树叶云,2H2G首月10元开通。
    树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

    文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/236141.html<

    (0)
    运维的头像运维
    上一篇2025-04-21 21:16
    下一篇 2025-04-21 21:17

    相关推荐

    • 个人主题怎么制作?

      制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

      2025-11-20
      0
    • 社群营销管理关键是什么?

      社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

      2025-11-20
      0
    • 香港公司网站备案需要什么材料?

      香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

      2025-11-20
      0
    • 如何企业上云推广

      企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

      2025-11-20
      0
    • PS设计搜索框的实用技巧有哪些?

      在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

      2025-11-20
      0

    发表回复

    您的邮箱地址不会被公开。必填项已用 * 标注