【通过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,添加驱动

然后连接数据库

填写连接信息

连接成功:

查询

相关推荐
Allen_LVyingbo1 分钟前
医疗人工智能项目全生命周期管理系统:监管知识建模、工程实现与实证评估(下)
大数据·数据库·人工智能·python·自然语言处理·自动化
草莓熊Lotso9 分钟前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
YangYang9YangYan25 分钟前
2026 校招市场数据分析 JD 拆解,SQL 要求、工具与面试考点
数据库·人工智能·数据分析
重生之小比特27 分钟前
【Java SE】抽象类和接口
java·开发语言
Lyyaoo.31 分钟前
【设计模型】策略模式
java
风哥2号34 分钟前
数据库教程FGMT40‑MySQL性能优化之性能基准测试
数据库·mysql
譕痕40 分钟前
Idea 集成 智能体开发工具“千问(qwen)”
java·ide·spring·语言模型
苍梧问道44 分钟前
SQL Server阻塞与死锁排查实战:从DMV到根因分析
数据库
用户8181870627461 小时前
第27章 消息丢失/重复消费的全链路排查(生产者→Broker→消费者)
java·后端
shirsl1 小时前
数据开发每日面试题 Day 5
大数据·数据库·sql·big data