You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java或SQLite中按<ar>开头行分组插入SQLite行

我来帮你拆解这个需求,其实核心是先完成文本块的分组逻辑,再将分组后的内容写入SQLite数据库。下面分Java代码实现和SQLite操作两部分详细说明,你可以直接参考调整:

一、Java端文本分组与入库逻辑

首先我们需要把从SQLite读取的文档行数据,按照<ar>开头的规则分组,再批量插入到目标表中。以下是完整的代码示例:

import java.util.ArrayList;
import java.util.List;

public class ArContentProcessor {
    // 1. 从SQLite原表读取文档的所有行(按顺序)
    private static List<String> fetchOriginalLinesFromSQLite() {
        List<String> lines = new ArrayList<>();
        String dbUrl = "jdbc:sqlite:your_document_db.db";
        String querySql = "SELECT line_content FROM original_pages ORDER BY line_id"; 
        // 假设original_pages是存储原文档页面的表,line_id是保证顺序的行号字段

        try (var conn = java.sql.DriverManager.getConnection(dbUrl);
             var stmt = conn.createStatement();
             var rs = stmt.executeQuery(querySql)) {
            
            while (rs.next()) {
                lines.add(rs.getString("line_content"));
            }
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
        return lines;
    }

    // 2. 按规则分组:<ar>开头为首行,后续非<ar>行归为同一组
    private static List<String> groupArContent(List<String> rawLines) {
        List<String> groupedContent = new ArrayList<>();
        StringBuilder currentGroup = new StringBuilder();

        for (String line : rawLines) {
            String trimmedLine = line.trim();
            // 遇到<ar>开头的行,先处理上一个已收集的组
            if (trimmedLine.startsWith("<ar>")) {
                if (currentGroup.length() > 0) {
                    groupedContent.add(currentGroup.toString().trim());
                    currentGroup.setLength(0); // 清空当前组,准备新组
                }
                currentGroup.append(line).append("\n"); // 启动新组
            } else {
                // 非<ar>开头的行,追加到当前组(只有当前有正在收集的组时才处理)
                if (currentGroup.length() > 0) {
                    currentGroup.append(line).append("\n");
                }
                // 如果开头就是非<ar>行,这里默认忽略,你可以根据需求调整逻辑
            }
        }

        // 处理最后一个未提交的组
        if (currentGroup.length() > 0) {
            groupedContent.add(currentGroup.toString().trim());
        }
        return groupedContent;
    }

    // 3. 将分组后的内容插入SQLite目标表
    private static void insertGroupsToSQLite(List<String> groups) {
        String dbUrl = "jdbc:sqlite:your_document_db.db";
        String insertSql = "INSERT INTO ar_grouped_content (content) VALUES (?)";
        // 假设ar_grouped_content是存储分组后内容的表,content字段为TEXT类型

        try (var conn = java.sql.DriverManager.getConnection(dbUrl);
             var pstmt = conn.prepareStatement(insertSql)) {
            
            // 批量插入提升效率
            conn.setAutoCommit(false);
            for (String group : groups) {
                pstmt.setString(1, group);
                pstmt.addBatch();
            }
            pstmt.executeBatch();
            conn.commit();
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }

    // 主方法串联整个流程
    public static void main(String[] args) {
        List<String> rawLines = fetchOriginalLinesFromSQLite();
        List<String> groupedContent = groupArContent(rawLines);
        insertGroupsToSQLite(groupedContent);
        System.out.println("分组插入完成,共插入" + groupedContent.size() + "条记录");
    }
}
二、SQLite相关准备
  1. 表结构创建
    如果你还没有目标表,可以用以下SQL创建:

    CREATE TABLE IF NOT EXISTS ar_grouped_content (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        content TEXT NOT NULL
    );
    

    原表(存储原始页面行)的结构建议包含行号字段,保证读取顺序正确:

    CREATE TABLE IF NOT EXISTS original_pages (
        line_id INTEGER PRIMARY KEY AUTOINCREMENT,
        line_content TEXT NOT NULL
    );
    
  2. Java依赖
    操作SQLite需要引入sqlite-jdbc包,Maven项目可以在pom.xml中添加:

    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.45.2.0</version> <!-- 使用最新稳定版本 -->
    </dependency>
    
三、特殊情况处理
  • 连续行:代码会自动将前一个组存入,再启动新组,符合需求
  • 空行:如果原文档有空行,你可以在groupArContent方法中添加判断,跳过无意义的空行
  • 开头非行:当前代码默认忽略,如果你需要保留这些内容,可以添加逻辑将其单独作为一组插入

内容的提问来源于stack exchange,提问作者ShahRukhMlk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:37:25