json大文件导入数据库

json文件导入数据库
使用Navicat的客户端工具也可以实现json文件导入数据库,但是数据量大了之后,字段的值过于冗长可能会导致数据的截取,是的数据导入不是完整的。
所以另辟蹊径使用其他方法
创建一个新的工程用原始的jdbc实现数据的导入

一、创建完项目后导入依赖
<dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.24</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies>

#####二、JDBCUtil工具类

package org.utils;import org.apache.commons.beanutils.BeanUtils;import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class JDBCUtil {static Connection conn = null;//1.加载驱动static {try {Class.forName("com.mysql.cj.jdbc.Driver");try {conn = DriverManager.getConnection("jdbc:mysql://202.107.83.133:23306/datacenter_lingyuan", "clesun", "clesun@123456");} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//2.获取连接public static Connection getConnection() {return conn;}//3.关闭连接public static void close(Connection conn, Statement st, ResultSet rs) {//关闭连接/*if (conn != null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}*///关闭statementif (st != null) {try {st.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//关闭结果集if (rs != null) {try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//-------------------------------封装sql操作------------------------------
//查询返回List集合public static <T> List<T> getList(Class<T> cls, String sql, Object... obj) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {//1.获取连接conn = getConnection();//2.获取预处理对象ps = conn.prepareStatement(sql);//循环参数,如果没有就不走这里for (int i = 1; i <= obj.length; i++) {//注意:数组下标从0开始,预处理参数设置从1开始ps.setObject(i, obj[i - 1]);}//3.执行SQL语句System.out.println(sql);rs = ps.executeQuery();//4.遍历结果集//遍历之前准备:因为封装不知道未来会查询多少列,所以我们需要指定有多少列ResultSetMetaData date = rs.getMetaData();//获取ResultSet对象的列编号、类型和属性int column = date.getColumnCount();//获取列数Field[] fields = cls.getDeclaredFields();//获取本类所有的属性//创建一个list集合对象来存储查询数据List<T> list = new ArrayList<T>();//开始遍历结果集while (rs.next()) {//创建类类型实例T t = cls.newInstance();for (int i = 1; i <= column; i++) {Object value = rs.getObject(i);//每一列的值/***String columnName = date.getColumnName(i);//获取每一列名称* 关于获取每一列名称,如果列取了别名的话,则不能用上面的方法取列的名称* 用下面的方法*/String columnName = date.getColumnLabel(i);//获取每一列名称(别名)//遍历所有属性对象for (Field field : fields) {//获取属性名String name = field.getName();field.setAccessible(true);//打破封装,忽略对封装修饰符的检测/*if (name.equals(columnName)) {String string = date.getColumnTypeName(i);//获取列类型名称//如果列类型是Date类型,转换成字符串表现形式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String d = sdf.format(value);//赋值:将数据库中查询的字段赋值给对应名称的属性field.set(t, d);}else{field.set(t, value);}*/if (name.equals(columnName)) {BeanUtils.copyProperty(t, name, value);break;//增加效率,避免不必要的循环}}}list.add(t);}return list;//5.关闭连接} catch (Exception e) {e.printStackTrace();} finally {JDBCUtil.close(conn, ps, rs);}return null;}/*** 增加、删除、修改** @param sql sql语句* @param obj 参数* @return*/public static boolean getDML(String sql, Object... obj) {Connection conn = null;PreparedStatement ps = null;try {conn = getConnection();ps = conn.prepareStatement(sql);for (int i = 1; i <= obj.length; i++) {ps.setObject(i, obj[i - 1]);}System.out.println(sql);int update = ps.executeUpdate();if (update > 0) {return true;}} catch (Exception e) {e.printStackTrace();} finally {close(conn, ps, null);}return false;}//查询返回单个对象public static <T> T getOneObject(Class<T> cls, String sql, Object... obj) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {//1.获取连接conn = getConnection();//2.获取预处理对象ps = conn.prepareStatement(sql);//循环参数,如果没有就不走这里for (int i = 1; i <= obj.length; i++) {//注意:数组下标从0开始,预处理参数设置从1开始ps.setObject(i, obj[i - 1]);}//3.执行SQL语句System.out.println(sql);rs = ps.executeQuery();//4.遍历结果集//遍历之前准备:因为封装不知道未来会查询多少列,所以我们需要指定有多少列ResultSetMetaData date = rs.getMetaData();//获取ResultSet对象的列编号、类型和属性int column = date.getColumnCount();//获取列数Field[] fields = cls.getDeclaredFields();//获取本类所有的属性//开始遍历结果集if (rs.next()) {//创建类类型实例T t = cls.newInstance();for (int i = 1; i <= column; i++) {Object value = rs.getObject(i);//每一列的值String columnName = date.getColumnName(i);//获取每一列名称//遍历所有属性对象for (Field field : fields) {//获取属性名String name = field.getName();field.setAccessible(true);//打破封装,忽略对封装修饰符的检测if (name.equals(columnName)) {BeanUtils.copyProperty(t, name, value);}}}return t;}//5.关闭连接} catch (Exception e) {e.printStackTrace();} finally {JDBCUtil.close(conn, ps, rs);}return null;}//查询总记录数public static Integer getCount(String sql, Object... obj) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {//1.获取连接conn = getConnection();//2.获取预处理对象ps = conn.prepareStatement(sql);//循环参数,如果没有就不走这里for (int i = 1; i <= obj.length; i++) {//注意:数组下标从0开始,预处理参数设置从1开始ps.setObject(i, obj[i - 1]);}//3.执行SQL语句System.out.println(sql);rs = ps.executeQuery();//开始遍历结果集if (rs.next()) {return rs.getInt(1);}//5.关闭连接} catch (Exception e) {e.printStackTrace();} finally {JDBCUtil.close(conn, ps, rs);}return null;}
}
三、执行程序
package org.example;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONReader;
import org.entity.MapLqdk;
import org.junit.jupiter.api.Test;
import org.utils.JDBCUtil;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 示例JSON格式: [{"xxx":{"yyy":"",...},"zzz":""},...]* @author Administrator*/
public class JsonTest {public static void main(String[] args) throws FileNotFoundException {//sql插入语句String sql = "INSERT INTO map_lqdk (BSM,YSDM,LQPKDM,QYHFLX,LQDKDM,LQDKMC,LQDKMJ,LQDKMJM,SFGBZNT,ZLDJDM,JYZTMC,JYZTLX,BZ,LQLX,FRDBS,QSDWDM,QSDWMC,PDJB,coordinates) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";//需要读取的json文件JSONReader reader = new JSONReader(new FileReader("D:\\个人工作\\工作数据\\地图数据\\两区\\lqdk_new.geojson"));//List dataList = new ArrayList<>();// 开始读取数组reader.startArray();int i = 0;while (reader.hasNext()) {i++;if (i > 0) {//开始读取对象reader.startObject();MapLqdk mapLqdk = new MapLqdk();while (reader.hasNext()) {String key = reader.readString();if ("properties".equals(key)) {// 开始读取对象reader.startObject();Map<String, Object> map = new HashMap<>(16);while (reader.hasNext()) {key = reader.readString();//是键也是字段名//System.out.println("key="+key);String value = reader.readString();//是值//System.out.println("value="+value);map.put(key,value);//dataList.add(map);}String s = JSON.toJSONString(map);mapLqdk = JSON.parseObject(s, MapLqdk.class);// 结束读取reader.endObject();} else {reader.readString();}}// 结束读取reader.endObject();//19个参数JDBCUtil.getDML(sql,mapLqdk.getBSM(),mapLqdk.getYSDM(),mapLqdk.getLQPKDM(),mapLqdk.getQYHFLX(),mapLqdk.getLQDKDM(),mapLqdk.getLQDKMC(),mapLqdk.getLQDKMJ(),mapLqdk.getLQDKMJM(),mapLqdk.getSFGBZNT(),mapLqdk.getZLDJDM(),mapLqdk.getJYZTMC(),mapLqdk.getJYZTLX(),mapLqdk.getBZ(),mapLqdk.getLQLX(),mapLqdk.getFRDBS(),mapLqdk.getQSDWDM(),mapLqdk.getQSDWMC(),mapLqdk.getPDJB(),mapLqdk.getCoordinates());}else{reader.readString();}}// 反序列化完毕后调用reader.endArray();reader.close();}}
四、执行查询程序,等数据往数据库插入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker for Windows使用简介

在上一篇文章中&#xff0c;通过演练指导的方式&#xff0c;介绍了在Docker中运行ASP.NET Core Web API应用程序的过程。本文将介绍Docker for Windows的使用。 先决条件 前两周时间&#xff0c;Docker发布了Docker for Windows的正式版&#xff0c;于是就可以在Windows下运行D…

pagehelper 不分页的解决方法

pagehelper 不分页的解 pagehelper PageHelper.startPage(1, 10);只对该语句以后的第一个查询语句得到的数据进行分页, 就算你在PageInfo pa new PageInfo("",对象);语句里面的对象是写的最终得到的数据,该插件还是只会对第一个查询所查询出来的数据进行分页 第一…

最近流行的12个笑话,好笑又有道理

来源 | 悦读文摘&#xff08;ID&#xff1a;yueduwz&#xff09; 01 一个盲人到亲戚家做客&#xff0c;天黑后&#xff0c;他的亲戚好心为他点了个灯笼&#xff0c;说&#xff1a;“天晚了&#xff0c;路黑&#xff0c;你打个灯笼回家吧&#xff01;” 盲人火冒三丈地说&#x…

java 从jar包中读取资源文件

转载自 java 从jar包中读取资源文件 在代码中读取一些资源文件(比如图片&#xff0c;音乐&#xff0c;文本等等)&#xff0c;在集成环境(Eclipse)中运行的时候没有问题。但当打包成一个可执行的jar包&#xff08;将资源文件一并打包&#xff09;以后&#xff0c;这些资源文件找…

json常用的转换

一、json字符串与map的相互转换 首先要导入依赖&#xff0c;用的是fastjson依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.45</version> </dependency>json转map //第一…

JWT【JSON Web Token】 简述

JWT全称JSON Web Token[http://www.jwt.io/]&#xff0c;用于发送可通过数字签名和认证的东西&#xff0c;它包含一个紧凑的&#xff0c;URL安全的JSON对象&#xff0c;服务端可通过解析该值来验证是否有操作权限&#xff0c;是否过期等安全性检查。由于其紧凑的特点&#xff0…

Android增加自定义监听事件

适配器中 public interface ShippingDelOnClickListener {public void onClickListenerShippingDel(int position); }private ShippingDelOnClickListener mShippingDelOnClickListener;public void setShippingDelOnClickListener(ShippingDelOnClickListener shippingDelO…

BufferedInputStream与ImageInputStream

转载自 BufferedInputStream与ImageInputStreamBufferedInputStream读取图片文件&#xff08;jpg格式&#xff09;,但是图片大小在1M到200M之间都有&#xff0c;由于图片太大&#xff0c;不知道怎么处理好&#xff0c;谢谢各位大哥大姐教教小弟&#xff0c;现在只能读取1M以下读…

List自定义对象集合转List<Map<String,Object>>对象

一、List自定义对象集合转List<Map<String,Object>>对象 public static Map<String,Object> object2Map(Object obj) throws Exception{Map<String,Object> map new HashMap<String, Object>(16);Field[] fields obj.getClass().getDeclaredF…

又一大波笑到肾抽筋,笑出六块腹肌的段子

文章来源于网络&#xff0c;侵删 01 我有一个要强的妈妈&#xff0c;记得小时候&#xff0c;我妈骑自行车带我&#xff0c;我脚卡车轮里了&#xff0c;我妈感觉蹬不动&#xff0c;就站起来蹬。 长到两米算我输 02 “单身两年以上是什么体验&#xff1f;”&#xff0c; “单身20…

登录工程:传统 Web 应用中的身份验证技术

标题中 “传统 Web 应用” 这一说法也并没有什么官方定义&#xff0c;只是为了与“现代化 Web 应用”形成比较而自拟的一个概念。所谓现代化 Web 应用指的是那些基于分布式架构思想设计的&#xff0c;面向多个端提供稳定可靠的高可用服务&#xff0c;并且在需要时能够横向扩展的…

getSerializableExtra

Activity之间通过Intent传递值&#xff0c;支持基本数据类型和String对象及它们的数组对象byte、byte[]、char、char[]、boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、float[]、double、double[]、String、String[]&#xff0c;还有实现Serializable…

Java 读写图像

转载自 Java 读写图像Java中进行图像I/O&#xff08;即读图片和写图片&#xff0c;不涉及到复杂图像处理&#xff09;有三个方法&#xff1a;1. Java Image I/O API&#xff0c;支持常见图片&#xff0c;从Java 2 version 1.4.0开始就内置了。主页&#xff1a;http://java.sun…

powerdesigner在工作时用到的方法

一、所有表中name同步comment的方法&#xff1a; 操作步骤&#xff1a;工具>execute commands>Edit/Run script Option Explicit &#xff1b; 将下面脚本复制进去并执行 ValidationMode True InteractiveMode im_Batch Dim mdl the current modelget the current …

大数据项目实践:基于hadoop+spark+mongodb+mysql开发医院临床知识库系统

一、前言 从20世纪90年代数字化医院概念提出到至今的20多年时间&#xff0c;数字化医院&#xff08;Digital Hospital)在国内各大医院飞速的普及推广发展&#xff0c;并取得骄人成绩。不但有数字化医院管理信息系统&#xff08;HIS)、影像存档和通信系统&#xff08;PACS)、电子…

两个对象集合根据对象的某个属性进行过滤,返回不同的部分

例如&#xff1a; plants 和houses 两个集合&#xff0c;进行对比过滤&#xff0c;取出plants里和houses不同的部分&#xff0c;并返回。 List<ImprovedSeedPlant> plants improvedSeedPlantMapper.selectList(spWrapper); List<StudsheepSheepHouse> houses h…

简历

技术岗&#xff01; 那么你应该写什么&#xff1f; 简单的介绍项目的规模&#xff0c;有多少技术人员&#xff0c;是互联网项目还是企业软件&#xff0c;这些就可以了。 接下来你需要写关于项目技术的那部分。 项目用了什么框架&#xff1f;spring 还是struts2 ,持久化是用的是…

java drawimage()方法

转载自 java drawimage()方法图像使用的支持分布于java.applet, java.awt, 和 java.awt.image包中。每一个图像都用一个 java.awt.Image 对象表示。除了Image 类外&#xff0c;java.awt 包提供了其它的基本的图像支持&#xff0c;例如Graphics 类的 drawImage方法&#xff0c;…

老师不能把你怎样,但外面的世界可以!

来源 | 菁优网 本文是一位老师讲述的三段小故事&#xff0c;告诉各位家长及孩子&#xff1a; 亲爱的孩子&#xff0c;老师是不能把你怎样&#xff0c;但外面的世界可以。 1. 我有一个学生&#xff0c;喜欢钻研奥数&#xff0c;却走路慢慢吞吞总爱迟到&#xff0c;同学给他起了…

TagHelper是怎么实现的

众所周知&#xff0c;在asp.net core中编写Razor视图的时候&#xff0c;用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢? 首先来看看TagHelper的项目位置&#xff0c;它是位于Microsoft.AspNetCore.Mvc.TagHelpers。 如果看到project.json&#xff0c;可以发现&…