java 读取sq3所有表数据到objectNode
1.实现效果:将sq3中所有表的所有字段读到objectNode 对象中,兼容后期表字段增删情况,数据组织形式如下图所示:

代码截图:

代码如下:
package com.xxx.check.util;import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;public class SQLiteReader {public static void main(String[] args) {String url = "jdbc:sqlite:/Users/tt/Desktop/test_data/310099.sq3";ObjectMapper mapper = new ObjectMapper();ObjectNode rootNode = mapper.createObjectNode();try (Connection conn = DriverManager.getConnection(url)) {if (conn != null) {// 获取所有表名List<String> tableNames = getTableNames(conn);for (String tableName : tableNames) {ObjectNode tableNode = mapper.createObjectNode();// 将表的数据添加到 tableNode 中addTableDataToNode(conn, tableName, tableNode);// 将 tableNode 添加到根节点rootNode.set(tableName, tableNode);}}// 打印最终的 ObjectNodeSystem.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode));} catch (Exception e) {e.printStackTrace();}}/*** 获取数据库中所有表的名称* @param conn 数据库连接* @return 表名列表* @throws SQLException SQL 异常*/private static List<String> getTableNames(Connection conn) throws SQLException {List<String> tableNames = new ArrayList<>();DatabaseMetaData metaData = conn.getMetaData();ResultSet resultSet = metaData.getTables(null, null, null, new String[]{"TABLE"});while (resultSet.next()) {tableNames.add(resultSet.getString("TABLE_NAME"));}resultSet.close();return tableNames;}/*** 将指定表的数据添加到 ObjectNode 中* @param conn 数据库连接* @param tableName 表名* @param tableNode 存储表数据的 ObjectNode* @throws SQLException SQL 异常*/private static void addTableDataToNode(Connection conn, String tableName, ObjectNode tableNode) throws SQLException {String sql = "SELECT * FROM " + tableName;try (Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql)) {ResultSetMetaData metaData = rs.getMetaData();int columnCount = metaData.getColumnCount();while (rs.next()) {// 假设 id 列是第一列String id = rs.getString(1);ObjectNode rowNode = tableNode.putObject(id);for (int i = 1; i <= columnCount; i++) {String columnName = metaData.getColumnName(i);Object value = rs.getObject(i);if (value != null) {if (value instanceof String) {rowNode.put(columnName, (String) value);} else if (value instanceof Integer) {rowNode.put(columnName, (Integer) value);} else if (value instanceof Long) {rowNode.put(columnName, (Long) value);} else if (value instanceof Double) {rowNode.put(columnName, (Double) value);} else if (value instanceof Boolean) {rowNode.put(columnName, (Boolean) value);} else {// 对于其他类型,转换为字符串存储rowNode.put(columnName, value.toString());}} else {rowNode.putNull(columnName);}}}}}}
相关文章:
java 读取sq3所有表数据到objectNode
1.实现效果:将sq3中所有表的所有字段读到objectNode 对象中,兼容后期表字段增删情况,数据组织形式如下图所示: 代码截图: 代码如下: package com.xxx.check.util;import java.sql.*; import java.util.Arr…...
网络计算机的五个组成部分
单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机(如个人计算机、智能手机、ATM机等终端设备)提供计算或者应用…...
jakarta EE学习笔记-个人笔记
WebServlet注解:声明一个类为Servlet Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface WebServlet {// 指定Servlet的影子String name() default ""; // 匹配地址映射(URL)String[] value() default {};// …...
vue3-响应式 toRefs
在Vue 3中,toRefs是一个非常有用的组合式API(Composition API)函数,它主要用于将响应式对象(通常是由reactive创建的对象)转换为单独的响应式引用对象。这样做的好处是可以将这些响应式引用解构出来&#x…...
学习threejs,使用Lensflare模拟镜头眩光
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Lensflare 二、&…...
redis高级数据结构布隆过滤器
文章目录 背景什么是布隆过滤器Redis 中的布隆过滤器布隆过滤器使用注意事项实现原理空间占用估计 背景 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻…...
mysql 5.7安装
基础环境:centos7.9 创建日志存放目录 mkdir -p /opt/supervisor/log安装相关工具 yum install -y perl net-tools numactl gcc python-devel配置yum源 sudo vim /etc/yum.repos.d/mysql-community.repo [mysql-connectors-community] nameMySQL Connectors Com…...
Golang:精通sync/atomic 包的Atomic 操作
在本指南中,我们将探索sync/atomic包的细节,展示如何编写更安全、更高效的并发代码。无论你是经验丰富的Gopher还是刚刚起步,你都会发现有价值的见解来提升Go编程技能。让我们一起开启原子运算的力量吧! 理解Go中的原子操作 在快…...
微信小程序如何使用decimal计算金额
第三方库地址:GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算,偶尔发现这个库也不错,计算简单,目前发现比较准确 上代码 导入js import Decimal from ../../uti…...
最新Modular公司之MAX和Mojo作者 克里斯·拉特纳简介
Chris Lattner(克里斯拉特纳) 是一位著名的计算机科学家和软件工程师,以其在编程语言、编译器技术和软件开发工具领域的贡献而闻名。以下是关于他的详细介绍: 1. 主要成就 (1)LLVM 项目的创始人 Chris La…...
Redis数据库篇 -- Pipeline
一. 什么是Pipeline 在传统的请求-响应模式中,客户端与服务器之间的通信流程如下: 客户端发送一个命令到服务器。服务器接收命令并执行。服务器将执行结果返回给客户端。客户端接收结果后,发送下一个命令 在这种传统的模式下,…...
爬虫自动化(DrissionPage)
目录 ?一.介绍: 下载DrissionPage,还是我们熟悉的pip: 环境准备: ?二.基本代码: 它对于的导包和类使用: 窗口的设置: 和获取的页面的滑动: 3.进一步认识DrissionPage: 浏览器可以多开…...
常见string库中的函数(C语言超详细)
文章目录 strcspnstrcpystrncpystrcatstrncatstrcmpstrncmpstrchrstrrchrstrstrstrtokstrlenstrnlen strcspn 原型: size_t strcspn(const char *str1, const char *str2);功能: strcspn 会扫描 str1,并返回一个整数,表示 str1 中第一个匹配…...
单例模式几种实现
静态内部类holder实现(推荐) public class UniqueIdGenerator {public static final UniqueIdGenerator INSTANCE Holder.INSTANCE;// Private holder class for lazy initializationprivate static class Holder {static final UniqueIdGenerator INS…...
android中关于CheckBox自定义选中图片选中无效问题
在android xml 布局中,使用CheckBox控件设置选中背景图代码如下 <CheckBoxandroid:layout_width"wrap_content"android:layout_height"wrap_content"android:button"drawable/dfrd_common_selecotr_check"android:paddingStart&q…...
虚拟局域网之详解(Detailed Explanation of Virtual Local Area Network)
虚拟局域网之详解 VLAN (virtual localArea network)是一种虚拟局域网技术,它可以将一个物理局域网划分为多个逻辑上的虚拟局域网。 基于交换式以太网的虚拟局域网在交换式以太网中,利用VLAN技术,可以将由交换机连接成的物理网络划分成多个…...
双亲委派(JVM)
1.双亲委派 在 Java 中,双薪委派通常是指双亲委派模型,它是 Java 类加载器的一种工作模式,用于确保类加载的安全性和一致性。以下是其相关介绍: 定义与作用 定义:双亲委派模型要求除了顶层的启动类加载器外…...
第二十一章:考研的艰难抉择与放弃入学的转折
深秋时节,校园宛如被大自然精心雕琢的艺术殿堂。金黄的银杏叶在阳光的轻抚下,闪烁着细碎的光芒,微风拂过,叶片相互摩挲,发出沙沙的轻响,仿佛在低声诉说着岁月的故事。一片片银杏叶悠悠然飘落,宛…...
webpack配置之---output.chunkLoading
output.chunkLoading webpack.output.chunkLoading 配置项用于指定 Webpack 如何加载异步 chunk(即按需加载的代码块)。在现代 Webpack 版本中,异步代码分割成为了非常常见的功能,chunkLoading 配置项就用于控制 Webpack 加载这些…...
升级RAG应用程序与Redis向量库
Redis Vector Library (RedisVL) 简化AI应用开发 几个月前,Redis推出了Redis向量库(RedisVL),以简化人工智能(AI)应用的开发。自那时起,我们引入了强大的新功能,支持大规模的语言模…...
ElevenLabs语音合成效果翻倍的秘密(行业未公开的声学参数调优矩阵)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs英文语音合成效果翻倍的核心洞察 关键瓶颈在于语音上下文建模粒度 ElevenLabs 的高质量语音合成并非单纯依赖更大模型参数量,而是通过细粒度的语义-韵律联合编码实现自然度跃升。…...
终极免费离线OCR解决方案:Umi-OCR完整使用指南
终极免费离线OCR解决方案:Umi-OCR完整使用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。 …...
AI智能体密钥安全管理:AgentVault架构解析与实战指南
1. 项目概述:一个为AI智能体打造的“保险箱”最近在折腾AI智能体(Agent)应用开发的朋友,估计都绕不开一个核心痛点:如何安全、可靠地管理智能体运行过程中需要用到的各种密钥、凭证和敏感数据?无论是调用Op…...
突破存储限制:群晖DSM7下Synology Photos自定义文件夹挂载实战
1. 为什么需要自定义文件夹挂载 很多群晖用户升级到DSM7后都会遇到一个头疼的问题:Synology Photos默认把所有个人照片都存放在/home/Photos目录下,而这个目录实际上位于/homes共享文件夹中。随着照片数量不断增加,/homes所在存储空间很快就会…...
Kafka运维新选择:Offset Explorer(Kafka Tool)在Windows下的详细评测与实战技巧
Kafka运维新选择:Offset Explorer在Windows下的深度评测与高阶实战 当Kafka集群规模从几个节点扩展到数十甚至上百个Broker时,命令行工具kafka-topics.sh和kafka-console-consumer.sh开始显得力不从心。这时,一个得力的可视化工具就像黑暗中的…...
多智能体的协作成本:沟通开销、上下文膨胀与优化手段
多智能体的协作成本:沟通开销、上下文膨胀与优化手段 1. 标题 (Title) 多智能体系统的协作困境:解析沟通开销与上下文膨胀 从理论到实践:优化多智能体协作成本的完整指南 协作的代价:多智能体系统中的沟通、上下文与优化策略 打破协作壁垒:如何有效降低多智能体系统的运行…...
Qdrant客户端库实战:从向量数据库连接到生产级应用开发
1. 项目概述:从向量数据库到应用落地的桥梁如果你最近在折腾大模型应用,或者想给自己的产品加上一个“智能大脑”,那你大概率绕不开一个词:向量数据库。简单来说,它就像一个能理解“意思”的超级搜索引擎,不…...
Apex Legends进阶指南:结构化训练框架与技能模块化拆解
1. 项目概述:一个面向Apex Legends玩家的成长型技能库如果你是一位《Apex Legends》的玩家,并且对提升自己的游戏水平有持续的热情,那么你很可能和我一样,经历过一个漫长的摸索期。从最初落地成盒,到逐渐熟悉地图、枪械…...
告别命令行恐惧:用Docker Compose一键部署EMQX集群(附Web控制台和端口映射配置)
告别命令行恐惧:用Docker Compose一键部署EMQX集群(附Web控制台和端口映射配置) 在物联网和分布式系统开发中,EMQX作为高性能的MQTT消息服务器,已经成为连接海量设备与后端服务的核心枢纽。然而,传统安装方…...
基于Python与Playwright的招聘信息自动化聚合与智能筛选工具实践
1. 项目概述:一个面向求职者的自动化信息聚合与投递工具最近在和一些做开发的朋友聊天,发现大家普遍有个痛点:找工作太费时间了。每天要在几个招聘App之间来回切换,重复筛选岗位、刷新列表、投递简历,机械性的操作占据…...
