Java读取json数据并存入数据库的操作代码

下面是Java读取Json数据并存入数据库的操作代码的攻略,包含以下四个步骤:

  1. 构建Json数据对象
  2. 读取Json数据
  3. 解析Json数据
  4. 将数据存入数据库

下面进行详细讲解。

步骤一:构建Json数据对象

使用Java构建Json对象可以使用json库的JSONObject类来构建。首先需要导入相应的依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20211205</version>
</dependency>

然后构建Json对象可以这样写:

import org.json.*;

JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "Alice");
jsonObj.put("age", 18);

步骤二:读取Json数据

在读取Json数据之前,需要先将Json数据读入内存。可以从文件或者网络等载体中读入Json数据:

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

// 从文件中读取Json数据
String jsonStr = new String(Files.readAllBytes(Paths.get("data.json")), StandardCharsets.UTF_8);

// 从URL中读取Json数据
URL url = new URL("http://example.com/data.json");
URLConnection conn = url.openConnection();
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String jsonStr = reader.lines().collect(Collectors.joining("\n"));

步骤三:解析Json数据

解析Json数据可以使用json库的JSONObject和JSONArray类来解析。具体方式取决于Json数据的结构。假设Json数据的格式如下:

{
  "name": "Alice",
  "age": 18,
  "address": {
    "city": "Shanghai",
    "street": "Renmin Rd."
  },
  "scores": [80, 90, 95]
}

可以这样解析:

JSONObject jsonObj = new JSONObject(jsonStr);

String name = jsonObj.getString("name");
int age = jsonObj.getInt("age");

JSONObject address = jsonObj.getJSONObject("address");
String city = address.getString("city");
String street = address.getString("street");

JSONArray scores = jsonObj.getJSONArray("scores");
List<Integer> scoreList = new ArrayList<>();
for (int i = 0; i < scores.length(); i++) {
    scoreList.add(scores.getInt(i));
}

步骤四:将数据存入数据库

将数据存入数据库可以使用JDBC或者ORM框架。这里以JDBC为例。假设要将上面解析出来的数据存入一个名为"person"的表中,表结构如下:

Field Type Null Key Default Extra
name varchar(255) NO NULL
age int(11) NO NULL
city varchar(255) YES NULL
street varchar(255) YES NULL
score int(11) YES NULL

可以这样写JDBC代码:

import java.sql.*;

String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String username = "root";
String password = "root";

try (Connection conn = DriverManager.getConnection(url, username, password);
     PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age, city, street, score) VALUES (?, ?, ?, ?, ?)")) {

    stmt.setString(1, name);
    stmt.setInt(2, age);
    stmt.setString(3, city);
    stmt.setString(4, street);

    for (int score : scoreList) {
        stmt.setInt(5, score);
        stmt.executeUpdate();
    }

} catch (SQLException e) {
    e.printStackTrace();
}

这样就完成了将Json数据存入数据库的操作。下面给出两个示例:

示例一

假设Json数据如下:

{
  "name": "Tom",
  "age": 23,
  "scores": [80, 78, 92]
}

通过上述步骤完成该Json数据的读取、解析并存入数据库的完整代码如下:

import org.json.*;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;
import java.util.*;
import java.util.stream.Collectors;

public class Example1 {
    public static void main(String[] args) {
        // 从文件中读取Json数据
        String jsonStr = "{\"name\": \"Tom\", \"age\": 23, \"scores\": [80, 78, 92]}";

        // 构建Json对象
        JSONObject jsonObj = new JSONObject(jsonStr);

        // 解析Json对象
        String name = jsonObj.getString("name");
        int age = jsonObj.getInt("age");

        JSONArray scores = jsonObj.getJSONArray("scores");
        List<Integer> scoreList = new ArrayList<>();
        for (int i = 0; i < scores.length(); i++) {
            scoreList.add(scores.getInt(i));
        }

        // 存储数据到数据库
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age, score) VALUES (?, ?, ?)")) {

            stmt.setString(1, name);
            stmt.setInt(2, age);

            for (int score : scoreList) {
                stmt.setInt(3, score);
                stmt.executeUpdate();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

执行完该程序后,可以在MySQL数据库中查看如下数据:

name age city street score
Tom 23 NULL NULL 80
Tom 23 NULL NULL 78
Tom 23 NULL NULL 92

示例二

假设Json数据如下:

{
  "name": "Jerry",
  "age": 25,
  "address": {
    "city": "Beijing",
    "street": "Haidian"
  },
  "scores": [85, 92, 88, 90]
}

通过上述步骤完成该Json数据的读取、解析并存入数据库的完整代码如下:

import org.json.*;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;
import java.util.*;
import java.util.stream.Collectors;

public class Example2 {
    public static void main(String[] args) {
        // 从文件中读取Json数据
        String jsonStr = "{\"name\": \"Jerry\", \"age\": 25, \"address\": {\"city\": \"Beijing\", \"street\": \"Haidian\"}, \"scores\": [85, 92, 88, 90]}";

        // 构建Json对象
        JSONObject jsonObj = new JSONObject(jsonStr);

        // 解析Json对象
        String name = jsonObj.getString("name");
        int age = jsonObj.getInt("age");

        JSONObject address = jsonObj.getJSONObject("address");
        String city = address.getString("city");
        String street = address.getString("street");

        JSONArray scores = jsonObj.getJSONArray("scores");
        List<Integer> scoreList = new ArrayList<>();
        for (int i = 0; i < scores.length(); i++) {
            scoreList.add(scores.getInt(i));
        }

        // 存储数据到数据库
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";

        try (Connection conn = DriverManager.getConnection(url, username, password);
             PreparedStatement stmt = conn.prepareStatement("INSERT INTO person (name, age, city, street, score) VALUES (?, ?, ?, ?, ?)")) {

            stmt.setString(1, name);
            stmt.setInt(2, age);
            stmt.setString(3, city);
            stmt.setString(4, street);

            for (int score : scoreList) {
                stmt.setInt(5, score);
                stmt.executeUpdate();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

执行完该程序后,可以在MySQL数据库中查看如下数据:

name age city street score
Jerry 25 Beijing Haidian 85
Jerry 25 Beijing Haidian 92
Jerry 25 Beijing Haidian 88
Jerry 25 Beijing Haidian 90
阅读剩余 82%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java读取json数据并存入数据库的操作代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • spring boot配置ssl实现HTTPS的方法

    首先我们需要了解HTTPS和SSL。 HTTPS是在HTTP协议上加了一层SSL/TLS协议,通过SSL/TLS协议实现了对数据的加密和认证。而SSL(Secure Sockets Layer)是一种标准的安全协议,目前版本为SSLv3和TLSv1,用于保证数据在网络中的安全传输。在spring boot中,我们可以通过配置SSL证书来启用HTTPS服务。 …

    Java 2023年5月20日
    00
  • Android应用中使用TabHost组件继承TabActivity的布局方法

    使用TabHost组件继承TabActivity的布局方法可以让我们在Android应用中快速实现底部切换页面的功能。下面我将详细讲解完整攻略。 准备工作 在使用TabHost组件之前,需要先引入相应的库。在build.gradle文件中添加以下依赖: dependencies{ implementation ‘com.android.support:app…

    Java 2023年6月15日
    00
  • javascript forEach函数实现代码

    JavaScript中的forEach()函数,是一种迭代数组中每个元素的方式,是一种可以使代码更清爽、高效的编程技巧。下面是详细讲解Javascript forEach函数实现代码的完整攻略,包含了基本语法、示例说明以及实际应用场景。 基本语法 forEach()函数是JavaScript中的一个方法,用于迭代一个数组,遍历每个元素并且对其执行一个指定的操…

    Java 2023年6月15日
    00
  • 如何使用Java代码优化工具?

    如何使用Java代码优化工具? Java代码的优化可以提高程序的效率和性能,使得程序的运行更加流畅。下面是使用Java代码优化工具的详细步骤: 1. 选择合适的工具 市面上有很多Java代码优化工具,例如Eclipse JDT、NetBeans Profiler、JProfiler等。每个工具都有其独特的特点和优劣势,所以选择合适的工具非常重要。 2. 分析…

    Java 2023年5月11日
    00
  • 详解java 三种调用机制(同步、回调、异步)

    详解java 三种调用机制(同步、回调、异步) 调用机制的概念 调用机制指的是在进行函数调用时,系统进行操作的方式。针对不同的操作方式,可以分为同步、回调、异步这三种机制。 同步调用机制 同步调用机制指的是在函数调用时,必须等待该函数返回结果之后才能继续执行下一步操作的调用方式。在同步调用过程中,如果该函数阻塞或运行时间较长,那么整个程序的性能就会变得比较低…

    Java 2023年5月26日
    00
  • java利用Ant脚本生成war包全过程

    生成war包是Java Web开发中的重要过程之一。为了优化这个过程,可以使用Ant脚本来自动化这个过程。以下是Java利用Ant脚本生成war包的详细攻略。 1. 创建Ant脚本 首先需要创建一个Ant脚本,脚本需要包含以下几个步骤: 清空目标目录,以准备生成新的war包。 将源代码和依赖库编译成Java字节码。 将字节码打包成war包。 以下是示例Ant…

    Java 2023年5月26日
    00
  • Java如何实现定时任务

    Java中实现定时任务的方式有多种,主要包括使用Timer和TimerTask类、使用ScheduledExecutorService接口、使用cron表达式和使用Quartz框架。 使用Timer和TimerTask类 Timer是一种简单的任务调度器,用于按照指定的时间间隔执行任务。TimerTask是Timer中的任务,可以继承TimerTask类并重…

    Java 2023年5月26日
    00
  • Springboot源码 TargetSource解析

    Springboot源码 TargetSource解析 概述 在Spring框架中,AOP的核心就是AOP代理,而AOP代理的核心就是代理对象,而代理对象有可能是动态生成的,也有可能是预先存在的,在Spring框架中,预先存在的代理对象称为静态代理对象,动态生成的代理对象则使用CGLIB和JDK动态代理技术来实现,这里我们主要介绍CGLIB动态代理实现的过程…

    Java 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部