JDBC连接后在Eclipse中执行准备语句后无法检索数据

Posted

技术标签:

【中文标题】JDBC连接后在Eclipse中执行准备语句后无法检索数据【英文标题】:Not able to retrieve data after executing preparatory statement in Eclipse after JDBC Connection 【发布时间】:2014-04-24 20:47:42 【问题描述】:

这是我在建立 jdbc 连接(使用 SQL Developer)后使用的准备语句,但在执行时出现以下错误

resultsetoracle.jdbc.driver.OracleResultSetImpl@762f5aa3

如果不使用预备语句,我可以从数据库中检索数据。不确定我用来查看结果的结果集是否存在问题。

System.out.println("resultset" + rs); 

请帮忙。提前致谢 我正在使用以下 jar (OJDBC6-11.2.0.2.0)

public static void main(String[] argv) 
        Connection conn= null;
        PreparedStatement pstmt = null;
        try
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("connecting to a database");
            //Making JDBC connection
            conn = DriverManager.getConnection(url,userName,password);
            System.out.println("Database connection successfully");
            System.out.println("creating statement");
             String query = "select * from event where externaleventid=?";
              PreparedStatement pstmt = conn.prepareStatement(query); 

            //Bind values into the parameters.
              pstmt.setString(1,"1256294"); 
               ResultSet rs = pstmt.executeQuery();

              System.out.println("resultset" + rs);
              conn.close();


         catch(SQLException se)
            se.printStackTrace();
         catch(Exception e)
            e.printStackTrace();
         finally
            try
                if(stmt!=null)
                    conn.close();
            catch(SQLException se)

            
        try 
            if(conn!=null)
                conn.close();

        catch(SQLException se)
            se.printStackTrace();
           


    

【问题讨论】:

【参考方案1】:

这不是错误。您要打印的是结果集的toString,而不是结果集的内容。尝试循环遍历rs.next()

【讨论】:

感谢您的回复。它确实有帮助。【参考方案2】:

您可以像rs.getString("mycolumn") 一样获取名为“mycolumn”的列的结果,该列是类似字符串的数据(为适当的类型调用适当的方法),但您必须使用next() 循环遍历结果集。 next() 方法返回一个布尔值,让您知道何时完成。所以:

while (rs.next())
   System.out.println(rs.getString("mycolumn"));

列位置 (1,2,3,...) 和列名都是寻址列的合法方式

编辑

如果这有帮助,您如何找出结果集中的列数:

ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();

你也可以这样做

rsmd.getColumnType(1);
rsmd.getColumnLabel(1);
rsmd.getColumnDisplaySize(1);

例如,获取有关第 1 列的更多信息。

【讨论】:

感谢您的回复。我正在使用 while (rs.next()) String externaleventid = rs.getString("externaleventid"); System.out.println("externaleventid : " + externaleventid); 我只得到了列的结果。有没有办法在我们执行查询时显示整个查询结果而不仅仅是列。由于我在查询中使用 * 并且表有超过 10 列。如何在控制台上打印所有列的结果。 我想您可以使用 StringBuilder 并将它们全部附加在一起。在这种情况下,您可能需要 number 选项。这是基于 1 的。因此,如果您知道 10 列,则执行从 1 到 10 的循环。如果您问我如何计算结果集中的列数,请阅读我刚才的编辑。 谢谢!它确实有帮助。

以上是关于JDBC连接后在Eclipse中执行准备语句后无法检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在执行 JDBC 语句时收集警告/通知?

eclipse用jdbc连接SQL server时出现了问题……这是啥情况啊!请大神指教!

eclipse中的MySql(MAMP)jdbc连接错误

Eclipse Java Neon 通过JDBC连接SQL Server2008

Spring JDBC 示例

Spring之JDBC框架