当前位置: 首页 > article >正文

常用连接池的使用(jdbc)java 连接数据库

C3P0

导入依赖

    <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

接下来是代码

ComboPooledDataSource dataSource =new ComboPooledDataSource(); 获取c3p0数据源
dataSource.setDriverClass("com.mysql.jdbc.Driver"); 注册驱动
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/db2"); 用你自己的数据库,db2是我的可以改你的
dataSource.setUser("root"); 填你自己的账号
dataSource.setPassword("mmmm"); 填你自己的密码
Connection connection = dataSource.getConnection(); 获取连接池
PreparedStatement ps = connection.prepareStatement("INSERT INTO user VALUES (?, ?, ?)");
ps.setInt(1, 120); // 设置第一个占位符的值为 120,注意索引是从1开始的
ps.setString(2, "l11xxx111"); // 设置第二个占位符的值为 "l11xxx111"
ps.setInt(3, 1051); // 设置第三个占位符的值为 1051
ps.executeUpdate();
ps.close();

Druid

导入依赖

<dependencies>
    <!-- Druid 数据源 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.6</version> <!-- 根据你的需求使用合适的版本 -->
    </dependency>
    
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version> <!-- 根据你的数据库版本使用合适的版本 -->
    </dependency>
</dependencies>

代码

import com.alibaba.druid.pool.DruidDataSource;

// ...

DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/db2");
dataSource.setUsername("root");
dataSource.setPassword("mmmm");

// 设置其他 Druid 数据源属性,根据需要配置

Connection connection = dataSource.getConnection();
PreparedStatement ps = connection.prepareStatement("INSERT INTO user VALUES (?, ?, ?)");
ps.setInt(1, 120);
ps.setString(2, "l11xxx111");
ps.setInt(3, 1051);
ps.executeUpdate();

// 关闭资源
ps.close();
connection.close();
dataSource.close(); // 关闭 Druid 数据源

java 原生连接数据库

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCDemo {

    public static void main(String[] args) {
        // JDBC连接的URL,这里的URL指向你的MySQL数据库
        String url = "jdbc:mysql://localhost:3306/db2";
        String username = "root";
        String password = "mmmm";

        try {
            // 加载驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 获取数据库连接
            Connection connection = DriverManager.getConnection(url, username, password);

            // SQL语句,使用占位符
            String sql = "INSERT INTO user VALUES (?, ?, ?)";

            // 创建 PreparedStatement 对象
            PreparedStatement ps = connection.prepareStatement(sql);

            // 设置占位符的值
            ps.setInt(1, 120);
            ps.setString(2, "l11xxx111");
            ps.setInt(3, 1051);

            // 执行插入操作
            int affectedRows = ps.executeUpdate();

            System.out.println("Inserted " + affectedRows + " row(s).");

            // 关闭资源
            ps.close();
            connection.close();

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

易错bug

dataSource.setDriverClass("com.mysql.jdbc.Driver"); 他可以换成

dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");

原因如下:

在过去的 MySQL 版本中,常用的 JDBC 驱动类是com.mysql.jdbc.Driver。然而,MySQL 在 Connector/J 5.x 版本之后,推荐使用新的驱动类com.mysql.cj.jdbc.Driver,这是 MySQL 8.x 版本及以上的推荐使用的驱动类。

所以,你可能会在一些代码示例中看到使用com.mysql.jdbc.Driver,而在另一些示例中看到com.mysql.cj.jdbc.Driver。为了确保兼容性和推荐性,最好使用最新的 MySQL Connector/J 驱动,并使用com.mysql.cj.jdbc.Driver

如果你使用的是 MySQL 8.x 版本,建议使用com.mysql.cj.jdbc.Driver。如果使用的是较旧的 MySQL 版本,你可能会看到com.mysql.jdbc.Driver,但也建议尽可能升级到较新的驱动版本。


http://www.kler.cn/a/146489.html

相关文章:

  • 【从零开始使用系列】StyleGAN2:开源图像生成网络——环境搭建与基础使用篇(附大量测试图)
  • 三只松鼠携手爱零食,社区零售新高峰拔地而起
  • [系统安全] 六十一.恶意软件分析 (12)LLM赋能Lark工具提取XLM代码的抽象语法树(初探)
  • docker一张图理解
  • 基于 K-Means 聚类分析实现人脸照片的快速分类
  • 手摸手实战前端项目CI CD
  • ubuntu下qtcreator打开大文件时内存占满并闪退的问题
  • Springboot引入分布式搜索引擎Es RestAPI
  • 如何使用cpolar+Jellyfin自建私人影音平台【内网穿透】
  • 【linux】服务器CPU占用50%,top/htop/ps却看不到异常进程?使用unhide可以查看!
  • Codeforces Round 786 (Div. 3) D. A-B-C Sort
  • 马养殖场建设VR模拟实训教学平台具有灵活性和复用性
  • 图论|知识图谱——详解自下而上构建知识图谱全过程
  • 智能电子会议桌牌
  • SWT技巧
  • C++ 红黑树插入详解
  • Calling COBOL Modules 调用COBOL模块
  • 【C/C++】如何不使用 sizeof 求数据类型占用的字节数
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • ArrayList类
  • 编程中的解密之路:挑战、创新与技术难题的探索
  • 二十七、RestClient查询文档
  • 跨链原子交换
  • 《微信小程序开发从入门到实战》学习三十二
  • Spring Boot + hutool 创建海报图片
  • Typescript和Javascript的区别是什么?一文带您了解Typescript排名飙升的原因!