【通过jdbc连接到kingbase数据库插入10w数据】

idea64通过jdbc连接到kingbase数据库

提前在数据库创建好表:

c 复制代码
CREATE TABLE test_table (
    id          INTEGER,
    name        VARCHAR(50),
    age         INTEGER,
    email       VARCHAR(100),
    phone       VARCHAR(20),
    address     VARCHAR(200),
    create_time TIMESTAMP,
    salary      NUMERIC(10,2),
    is_active   BOOLEAN,
    remark      TEXT
);

第一步:新建project项目

第二步:右键project然后点open Moudle Setting添加驱动

第三步:创建java类

内容如下:

c 复制代码
import java.sql.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;

public class BatchInsertDemo {
    // 数据库连接参数(请根据你的实际情况修改)
    private static final String URL = "jdbc:kingbase8://192.168.40.110:54321/db01?optimizeBatchedDML=true"; // 地址:端口/数据库名
    private static final String USER = "system";   // 数据库用户名
    private static final String PASSWORD = "123456"; // 数据库密码
    // 批量插入的 SQL 语句(使用占位符)
    private static final String INSERT_SQL = "INSERT INTO test_table (id, name, age, email, phone, address, create_time, salary, is_active, remark) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

    public static void main(String[] args) {
        // 记录开始时间
        long startTime = System.currentTimeMillis();
        // 1. 加载驱动(JDBC 4.0 以上可以自动加载,但为了保险,手动加载也可以)
        try {
            Class.forName("com.kingbase8.Driver");
        } catch (ClassNotFoundException e) {
            System.err.println("未找到 Kingbase JDBC 驱动,请检查 JAR 是否已添加!");
            e.printStackTrace();
            return;
        }
        // 2. 建立数据库连接
        try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
            // 关闭自动提交,以便手动控制事务
            conn.setAutoCommit(false);
            // 3. 创建 PreparedStatement 对象
            try (PreparedStatement pstmt = conn.prepareStatement(INSERT_SQL)) {
                Random random = new Random();
                int batchSize = 1000; // 每 1000 条执行一次批量提交,防止内存溢出
                int totalCount = 100000; // 总共插入 10 万条
                for (int i = 1; i <= totalCount; i++) {
                    // 为占位符设置值(每个字段都生成随机或递增的数据)
                    pstmt.setInt(1, i);                               // id 从 1 开始递增
                    pstmt.setString(2, "用户" + i);                    // name
                    pstmt.setInt(3, 20 + random.nextInt(40));         // age 20~59 随机
                    pstmt.setString(4, "user" + i + "@example.com");   // email
                    pstmt.setString(5, "138" + String.format("%08d", random.nextInt(100000000))); // phone
                    pstmt.setString(6, "地址" + random.nextInt(1000)); // address
                    pstmt.setTimestamp(7, Timestamp.valueOf(LocalDateTime.now())); // create_time
                    pstmt.setBigDecimal(8, new java.math.BigDecimal(random.nextInt(10000) + 3000)); // salary 3000~12999
                    pstmt.setBoolean(9, random.nextBoolean());         // is_active
                    pstmt.setString(10, "备注信息" + i);                // remark
                    // 将当前参数添加到批处理中
                    pstmt.addBatch();
                    // 达到 batchSize 时执行批处理并清空批处理
                    if (i % batchSize == 0) {
                        pstmt.executeBatch();  // 执行批处理
                        conn.commit();         // 提交事务
                        System.out.println("已插入 " + i + " 条数据");
                    }
                }
                // 处理剩余不足 batchSize 的批次
                pstmt.executeBatch();
                conn.commit();
                long endTime = System.currentTimeMillis();
                System.out.println("批量插入完成!总耗时:" + (endTime - startTime) / 1000.0 + " 秒");
            } catch (SQLException e) {
                // 发生异常时回滚
                conn.rollback();
                System.err.println("插入数据时发生错误,已回滚!");
                e.printStackTrace();
            }
        } catch (SQLException e) {
            System.err.println("数据库连接失败!");
            e.printStackTrace();
        }
    }
}

pom.xml如下:

c 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>project-durid</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- Spring JDBC 基础,如果使用Spring Boot,这个通常已包含 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- KingbaseES 驱动 -->
        <dependency>
            <groupId>com.kingbase8</groupId>
            <artifactId>kingbase8</artifactId>
            <version>8.6.0</version> <!-- 请根据你的数据库版本选择合适的版本 -->
        </dependency>
    </dependencies>
</project>

第四步运行:java类

运行即可

-----------注

当然也可以直接通过idea64工具连接数据库

右键点击database,添加驱动

然后连接数据库

填写连接信息

连接成功:

查询

相关推荐
骇客野人29 分钟前
IntelliJ IDEA 菜单中英对照
java·ide·intellij-idea
我命由我1234529 分钟前
Kotlin 面向对象 - 枚举排序
android·java·开发语言·java-ee·kotlin·android studio·android-studio
Sam_Deep_Thinking1 小时前
用Java 17从0到1写一个mini版RPC,理解远程调用的本质
java·面试·rpc·程序员·系统架构
小张同学a.1 小时前
LAMP架构4——MySQL高可用
linux·运维·服务器·数据库·mysql·架构·负载均衡
敲代码的嘎仔1 小时前
从零搭建微服务:Spring Cloud Alibaba 全家桶踩坑实录(Nacos + OpenFeign + Gateway + Sentinel)
java·spring boot·spring·spring cloud·微服务·gateway·sentinel
一条泥憨鱼2 小时前
苍穹外卖【day7| 对购物车进行操作】
java·后端·mysql·苍穹外卖
Xxtaoaooo11 小时前
工业 IoT 存储引擎选型:多模引擎在数据模型与存储设计上的取舍
数据库·物联网·dolphindb
凌虚13 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
五阿哥永琪13 小时前
MySQL中操作json的函数!
数据库·mysql·json
来者皆善13 小时前
了解Mysql优化吗?如何优化索引?
数据库·mysql