代码之家  ›  专栏  ›  技术社区  ›  James Oravec

查询数据库并以Json格式返回结果的通用Java方法

  •  3
  • James Oravec  · 技术社区  · 10 年前

    我在寻找的东西对我来说很直接,但我的谷歌已经失败了。

    我想要一个方法,它允许我运行任何查询并以json格式获得结果。

    诀窍是我 不要 希望结果需要java对象作为过程的一部分(DTO、VO等)。

    有什么快速/简单/干净的方法吗?

    5 回复  |  直到 10 年前
        1
  •  5
  •   James Oravec    10 年前

    我接受了DominicEU的回答,因为它为我提供了工作所需的东西。Pheonix在链接中的回答不错,但仍缺少一些细节。下面显示了pom和一个工作示例……(您可能需要重新编写连接以实现实际实现):

    Java代码:

    import com.google.gson.Gson;
    import org.apache.commons.dbutils.DbUtils;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.MapListHandler;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    
    public class DBUtil {
    
        public String resultSetToJson(String query) {
            Connection connection = null;
            List<Map<String, Object>> listOfMaps = null;
    
            try {
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection("jdbc:mysql://server:3306/databasename?user=username&password=password");
            } catch (Exception ex) {
                System.err.println("***exception trying to connect***");
                ex.printStackTrace();
            }
    
            try {
                QueryRunner queryRunner = new QueryRunner();
                listOfMaps = queryRunner.query(connection, query, new MapListHandler());
            } catch (SQLException se) {
                throw new RuntimeException("Couldn't query the database.", se);
            } finally {
                DbUtils.closeQuietly(connection);
            }
            return new Gson().toJson(listOfMaps);
        }
    }
    

    Maven pom公司:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>groupId</groupId>
        <artifactId>dbgeneric</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>commons-dbutils</groupId>
                <artifactId>commons-dbutils</artifactId>
                <version>1.6</version>
            </dependency>
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.5</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
        </dependencies>
    
    </project>
    
        2
  •  1
  •   Community Mohan Dere    9 年前

    杰克逊有一些非常好的方法。以下是一些示例 this answer 这对你来说应该是奇迹。

    或者,如果杰克逊不在你身边,你可以去看看 this

        3
  •  0
  •   Danail Alexiev    10 年前

    我想你有两个选择:

    1. 您可以使用更通用的数据结构来用java表示JSON有效载荷。有点像 Map 例子
    2. 您可以创建一个类来建模结果集,并创建模型实例来存储有效载荷。
        4
  •  0
  •   BValluri    10 年前

    非常有趣的问题。我不确定是否有任何图书馆直接做到这一点。但我们有两种选择。

    1. 通过hibernate和Jackson库,我们可以在 JSON数据。
    2. 我们可以从SQL生成实体 转换为JSON对象。

    我们可以有DataAccessLayer,它可以是通用的数据获取层。为了将实体转换为Json对象,我们需要在特定的实体类(单独的Json生成类)中提供逻辑。

        5
  •  0
  •   marc_s MisterSmith    9 年前

    我和同事们通常这样做的方式是创建线束或控制器类,这些类通常指向SQL连接。线束的工作是将您的信息从SQL数据库拉到json文件中。但是,您需要创建一个存储过程,并且需要在SQL Connection类中调用该存储过程。