语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库
生活中,你我一定都看到过这种「xx元爆改出租屋」,「爆改小汽车」之类的文章,做为IT人,折腾的劲头一点也不差。
软件开发过程中,你是否有时候,会拿着业务提供的一个个CSV或者JSON的数据文件,写个解析程序,把它们存到数据库里,再在自己的程序里通过数据库读出来?
其实不用这么麻烦,还绕了一个大圈。
今天,我们一起来「爆改」JSON/CSV这类文件,把它们打造成 MySQL一样的关系型数据库,一套SQL查询走天下。:-)
第一步:代码里加入Maven依赖
org.apache.calcite calcite-file 1.21.0
通过这一步,你大概就看出来,咱们今天的爆改,主要依赖 Calcite,这个Apache的顶级项目。
来张官网截图感受下:
简单介绍的话,它是个数据库查询和优化的引擎,不负责具体的存储。
所以介绍里人家自己也说了,是你高性能数据库的地基。许多的开源项目是基于它做的,比如大名鼎鼎的这些:
第二步:添加配置文件
配置的JSON 文件,一般是下面这样子:
改造的配置文件,就像行军打仗的地图一样,来告诉我们往哪走,这里的配置文件,对应到关系型数据库里,就像是哪个库,哪些表一样。
{ "version": "1.0", "defaultSchema": "SALES", "schemas": [ { "name": "SALES", "type": "custom", "factory": "org.apache.calcite.adapter.file.FileSchemaFactory", "operand": { "directory": "sales" } } ]}
其中schemas 表示都有哪些数据库, defaultSchema 当然是默认数据库了。factory 表示当前的数据文件,我们使用哪种Schema的形式进行解析。因为 Calcite 可以支持多种数据格式,通过这个图你也能感受到几分吧。
第三步:JDBC Style
通过 JDBC 的形式就能连接到我们自己的数据库查询了。代码和一般的JDBC类似,区别只在于连接URL的写法上,需要将配置文件的位置声明一下。
public class Demo { public static void main(String[] args) throws SQLException, ClassNotFoundException { Class.forName("org.apache.calcite.jdbc.Driver"); Properties config = new Properties(); config.put("model", "./src/main/resources/model.json"); String sql = "select * from hello"; try (Connection con = DriverManager.getConnection("jdbc:calcite:", config)) { try (Statement stmt = con.createStatement()) { ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { System.out.println(rs.getString(2)); } } } }}
其中SQL 语句,可以支持条件过滤,join 等所有的标准SQL。
整体项目结构如下:
PS: 忘了提一句,对于CSV文件,第一行需要将各列列名和类型加上,表示数据库表里定义的列。
你说我很忙,不想啰哩啰嗦再写个Java程序,办法也还有。有个程序叫 sqlline,可以方便你在命令行里执行,一个脚本连接到对应的文件数据库之后,就开始你飞一般的SQL表演吧。
sqlline> !connect jdbc:calcite:model=src/main/resources/model.json admin admin
Have fun!
作者:Tomcat那些事儿
原文:https://my.oschina.net/u/4585957/blog/4875292
语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库相关推荐
- 重新打包mysql数据库文件_服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件...
终于让服务器每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件.分享如下: 1. 环境: windows server 2003 + Apache 2.0 + PHP5 + ...
- ubuntu mysql数据储存在哪里_如何更改在Ubuntu下的MySQL数据库存储位置?
在默认的数据库存储位置下就会有个文件夹mysqldb.要操作数据库首先得停止数据库进程: $sudo /etc/init.d/mysql stop 本文以转移到/home/mysql这个位置为例,下面 ...
- 脚本同步mysql数据_windows下数据库文件使用脚本同步到linux下的mysql数据库中
1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...
- linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...
因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客 ...
- C语言实现数据写入文件
向文件中写入数据(C语言) 在分析数据时,首先要解决数据的保存问题,c中提供了相应的函数来实现将数据写入指定文件中的功能 fopen函数 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有 ...
- c语言将数据写入mysql中_用C语言操作MySQL数据库
先看结构体 ---------------------------------------------- 以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql ...
- python数据写入表格生成图片_使用Python制作一个GUI界面,将随机生成的姓名存入到Excel文件中...
前面内容,我们详细介绍了如何使用Python生成一定数量的随机姓名. 生成一些随机姓名 如何用Python生成若干个随机姓名?男女取名有方法,不能千篇一律 之前,也提到过,我们在一些项目中,需要若干个 ...
- ruby 查看csv文件_如何使用CSV和Ruby构建终端游戏
ruby 查看csv文件 by Andrew Bales 通过安德鲁·巴尔斯 如何使用CSV和Ruby构建终端游戏 (How you can build a terminal game with CS ...
- Java 将数据写入磁盘并读取磁盘上的文件
package test; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; i ...
最新文章
- 愿...统一沟通...易行天下!
- java 基本类型内存_java基本数据类型、内存分析、装包拆包
- Discuz X3.1 论坛修改的方法(门户的修改)
- Cloud for Customer的前台请求是怎么发送到后台的
- 借助Apache Hadoop大规模扩展Apache Solr实时实时索引
- linux sybase 自动备份,Linux平台下Sybase数据库备份方法分析.doc
- iOS底层探索之对象的本质和类的关联特性initIsa(上)
- 相分离和长链非编码RNA之间的故事Paraspeckles: Where Long Noncoding RNA Meets Phase Separation
- chrome 打开默认页 被篡改_chrome默认首页被修改如何解决_chrome首页被篡改的处理办法-系统城...
- 最短曼哈顿距离(递推+枚举 C++)
- 用C#开发的一个通用的地铁换乘查询工具
- 快来试试用 Python 将你的照片转化为“速写”
- Redis过期策略 实现原理
- 图像信息隐藏(索引图象)
- DebugView 简单使用
- 山东二本计算机排名大学最新,山东二本大学排名最新
- dya04 js_02
- CTF网络安全比赛简介
- 五、K3 WISE 开发插件《直接SQL报表开发新手指导 - BOM成本报表》
- C语言经典代码(考试自用)
热门文章
- Android studio的设置界面介绍
- m.2接口和nvme区别_m.2 nvme和m.2有区别吗?
- centos6安装mysql并远程连接_MySQL5.7数据库安装与远程连接
- 企业门户网站服务器,企业或个人门户网站对服务器前的重要准备 - 酷番云
- flask get 参数_用它 5 分钟以后,我放弃用了四年的 Flask
- google 浏览器默认打开控制台_chrome浏览器使用 Console(控制台)
- python 画图 线标注_最简洁的Python时间序列可视化实现
- 电脑按f8无法进入安全模式_自已有电脑的人,都会遇到系统死机问题,教大家实用一招自已解决...
- mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...
- python 颜色_如何使用python中matplotlib库分析图像颜色