【问题标题】:Get Resultset from db2从 db2 获取结果集
【发布时间】:2017-04-22 22:06:18
【问题描述】:

这是我使用 db2 查询数据库以获取结果集的代码

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class Db2{
    public static void main(String[] argv) {
        try {
            Class.forName("com.ibm.db2.jcc.DB2Driver");
        }
        catch (ClassNotFoundException e) {
            System.out.println("Please include Classpath  Where your DB2 Driver is located");
            e.printStackTrace();
            return;
        }
        System.out.println("DB2 driver is loaded successfully");
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs=null;
        Statement stmt = null;
        boolean found=false;
        String name = "";
        try {
            conn = DriverManager.getConnection("jdbc:db2://server:900/MyDB"
                    +":user=user1;password=swim;"+
                     "traceLevel=" +
                     (com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL) + ";");
            if (conn != null)
            {
                System.out.println("DB2 Database Connected");
            }
            else
            {
                System.out.println("Db2 connection Failed ");
            }

            // Create the Statement
            stmt = conn.createStatement();                                            
            System.out.println("**** Created JDBC Statement object");

            // Execute a query and generate a ResultSet instance
            rs = stmt.executeQuery("SELECT * FROM VIRTUALMACHINE");                    
            System.out.println("**** Created JDBC ResultSet object");

            device
            while (rs.next()) {
              name = rs.getString(2);
              System.out.println("Name = " + name);
            }
            System.out.println("**** Fetched all rows from JDBC ResultSet");
            // Close the ResultSet
            rs.close();
            System.out.println("**** Closed JDBC ResultSet");



        } catch (SQLException e) {
            System.out.println("DB2 Database connection Failed");
            e.printStackTrace();
            return;
        }
    }

}

这是我运行它时得到的结果。

DB2 驱动加载成功 DB2 数据库已连接 **** 创建的 JDBC 语句对象 DB2 数据库连接失败 com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误: SQLCODE=-204,SQLSTATE=42704,SQLERRMC=user1.MyDB,驱动程序=3.71.22 在 com.ibm.db2.jcc.am.gd.a(gd.java:813) 在 com.ibm.db2.jcc.am.gd.a(gd.java:66) 在 com.ibm.db2.jcc.am.gd.a(gd.java:140) 在 com.ibm.db2.jcc.am.gp.c(gp.java:2788) 在 com.ibm.db2.jcc.am.gp.d(gp.java:2776) 在 com.ibm.db2.jcc.am.gp.a(gp.java:2220) 在 com.ibm.db2.jcc.t4.bb.i(bb.java:148) 在 com.ibm.db2.jcc.t4.bb.b(bb.java:41) 在 com.ibm.db2.jcc.t4.p.a(p.java:32) 在 com.ibm.db2.jcc.t4.vb.i(vb.java:145) 在 com.ibm.db2.jcc.am.gp.ib(gp.java:2189) 在 com.ibm.db2.jcc.am.gp.a(gp.java:3286) 在 com.ibm.db2.jcc.am.gp.a(gp.java:711) 在 com.ibm.db2.jcc.am.gp.executeQuery(gp.java:690) 在 db2.main(Db2.java:46)

我想知道为什么我运行它时它没有返回任何东西。当我将查询字符串从 select VIRTUALMACHINE from MyDB 更改为 "SELECT * FROM SYSCAT.COLUMNS WHERE TABSCHEMA= 'GGA' AND TABNAME= 'VIRTUALMACHINE' fetch first 10 rows only" 时,我得到了一个结果。在这种情况下

DB2 驱动加载成功 DB2 数据库已连接 **** 创建 JDBC 语句对象 **** 创建的 JDBC ResultSet 对象名称 = GGA 名称 = GGA 名称 = GGA 名称 = GGA
**** 从 JDBC ResultSet 中获取所有行 **** 关闭 JDBC ResultSet

这几乎是列的描述。我想知道为什么select VIRTUALMACHINE from MyDB 什么也没产生。 DB2不就是这样查询的吗?

【问题讨论】:

  • 你确定不是SELECT * FROM VIRTUALMACHINE
  • 我的错……这就是我的意思。我一直在玩它。更改它以查看有效的方法。我只是复制并粘贴而没有将其更改回来。谢谢。
  • SELECT * FROM VIRTUALMACHINE 是我使用的。起初它不起作用,所以我只是在玩其他东西。我修好了。
  • GGA.VIRTUALMACHINE 呢?
  • @Kayaman 非常感谢!!

标签: java database jdbc db2


【解决方案1】:

当对象不存在时抛出 SQLSTATE 42704。

FROM 子句引用表名,而不是数据库。表名可以是合格的或不合格的;从技术上讲,合格的表名可以包括远程数据库名。

你说这行得通:

SELECT * 
FROM SYSCAT.COLUMNS 
WHERE TABSCHEMA= 'GGA' AND TABNAME= 'VIRTUALMACHINE' 
fetch first 10 rows only

请注意,正在查询SYSCAT 架构中的COLUMNS 表。

所以以下应该可以工作:

select *
from GGA.VIRTUALMACHINE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多