这是使用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 Database Connected ****创建的JDBC语句对象DB2数据库连接失败com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL错误: SQLCODE = -204,SQLSTATE = 42704,SQLERRMC = user1.MyDB,DRIVER = 3.71.22 在com.ibm.db2.jcc.am.gd.a(gd.java:813)at com.ibm.db2.jcc.am.gd.a(gd.java:66)at com.ibm.db2.jcc.am.gd.a(gd.java:140)at com.ibm.db2.jcc.am.gp.c(gp.java:2788)at com.ibm.db2.jcc.am.gp.d(gp.java:2776)at com.ibm.db2.jcc.am.gp.a(gp.java:2220)at com.ibm.db2.jcc.t4.bb.i(bb.java:148)at com.ibm.db2.jcc.t4.bb.b(bb.java:41)at com.ibm.db2.jcc.t4.p.a(p.java:32)at com.ibm.db2.jcc.t4.vb.i(vb.java:145)at com.ibm.db2.jcc.am.gp.ib(gp.java:2189)at com.ibm.db2.jcc.am.gp.a(gp.java:3286)at com.ibm.db2.jcc.am.gp.a(gp.java:711)at com.ibm.db2.jcc.am.gp.executeQuery(gp.java:690)at 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 Database Connected ****创建了JDBC Statement对象 ****创建的JDBC ResultSet对象名称= GGA名称= GGA名称= GGA名称= GGA
****从JDBC ResultSet中获取所有行 ****关闭JDBC ResultSet
这几乎是对列的描述。我想为什么select VIRTUALMACHINE from MyDB
什么都不产生。是不是如何在DB2中进行查询?
答案 0 :(得分:1)
当对象不存在时抛出SQLSTATE 42704。
FROM
子句引用表名,而不是DB。表名可能是合格的或不合格的;从技术上讲,限定表名称可以包含远程数据库名称。
你说这有效:
SELECT *
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA= 'GGA' AND TABNAME= 'VIRTUALMACHINE'
fetch first 10 rows only
请注意,正在查询COLUMNS
架构中的SYSCAT
表。
所以以下内容应该有效:
select *
from GGA.VIRTUALMACHINE