在 Oracle SQL 上运行的通用语句:使用 Java 的数据库

Posted

技术标签:

【中文标题】在 Oracle SQL 上运行的通用语句:使用 Java 的数据库【英文标题】:Generic Statment Running on Oracle SQL: DB Using Java 【发布时间】:2019-11-20 13:44:16 【问题描述】:

我正在开发一个用 Java 构建并使用 Oracle SQL DB 的系统。 有些用户需要直接在 DB 上运行语句(查询、更新、删除等),而无需自己访问 DB。

因此,我正在尝试开发一个代码,他们将在其中运行一条语句,并将结果从数据库返回给他们。

不幸的是,每个在线示例都要求开发人员了解表格,我需要我的解决方案来适应每个查询或他们将运行的任何其他语句。

提前致谢。

这是一个演示我的问题的代码示例:

ResultSet rs = stmt.executeQuery(query);

    while (rs.next()) 
        String coffeeName = rs.getString("COF_NAME");
        int supplierID = rs.getInt("SUP_ID");
        float price = rs.getFloat("PRICE");
        int sales = rs.getInt("SALES");
        int total = rs.getInt("TOTAL");
        System.out.println(coffeeName + ", " + supplierID +
                           ", " + price + ", " + sales +
                           ", " + total);
    

【问题讨论】:

最好为此类查询提供示例,并用您附加的代码澄清您的问题! 为什么开发人员需要知道表格?这不是每个在线示例的要求。 那么我如何在没有 getInt("SOMTHING") 的 getFloat("SOMTHING") 的情况下检索结果,这显然是非常特定于表@LowKeyEnergy @MohamedSweelam 无法附上我自己的 NDA 原因...但我相信这段代码阐明了对另一个表的查询将完全失败 【参考方案1】:

您正在尝试根据列名获取结果。如果不知道列名,可以通过索引号获取结果。

Object x = resultSet.getObject(0);

您还可以获得有关可用列的信息:

ResultSetMetaData metaData = resultSet.getMetaData();

https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

ResultSetMetaData metaData = resultSet.getMetaData();

while (resultSet.next()) 
    for (int i=1; i < metaData.getColumnCount(); i++) 
        Object x = resultSet.getObject(i);
    

【讨论】:

怎么样?你能分享一个例子吗? 添加了一个例子。 有没有办法获得列名?【参考方案2】:

尝试根据索引号获取结果。

ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();

while (rs.next()) 
    for (int i=1; i<rsmd.getColumnCount(); i++) 
        String result = rs.getString(i);
    

【讨论】:

【参考方案3】:

您正在寻找一个通用的 SQL 接口。当我有这种需要时,我会寻找“开源 java 命令行工具来执行 SQL 语句”或“开源 java 命令行 SQL 客户端”。检查许可证并了解该工具中可用的内容。 将为您节省很多令人讨厌的细节。

如果你很幸运,这样的工具还支持列出所有数据库、表、列表表信息、SQL 语句历史记录等。

这不是您问题的直接答案,但可能会为您节省大量工作。

【讨论】:

以上是关于在 Oracle SQL 上运行的通用语句:使用 Java 的数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 上使用内部联接更新语句

Oracle PL/SQL语句基础学习笔记(上)

oracle用sql语句插入数据,为啥老是显示正在运行

Oracle 12c - 在 REST 调用中使用动态 SQL

Oracle SQL:从大型文本文件运行插入语句

选择语句在 Oracle 11 上给出 ora-03113