从ResultSet获取值会挂起



我正在构建一个Java应用程序来查询远程SQL数据库。除了一个专栏外,我能读懂所有的专栏。当我尝试读取该列时,我的应用程序只是永远挂起,没有触发任何异常或错误。有人知道为什么吗?以下是所有细节:

  • 我使用的驱动程序是sun.jdbc.odbc.JdbcOdbcDriver和Java版本6更新35;
  • 那一栏(#214)和其他的没有什么不同。为了确保这一点,我执行了如下System.out命令:
    • System.out.println("t" + resultset.getMetaData().getColumnName(i) + "t" + resultset.getMetaData().getColumnDisplaySize(i) + "t" + resultset.getMetaData().getColumnType(i) + "t" + resultset.getMetaData().getColumnTypeName(214) + "t" + resultset.getMetaData().getColumnClassName(i));
    • 结果为:214 WorkLog 65535 -1 LONGVARCHAR java.lang.String
  • 我尝试用resultset.getString(),resultset.getASCIIStream(),resultset.getCharacterStream()读取值,没有任何成功;
  • 最后,代码如下:

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
    con = DriverManager.getConnection("jdbc:odbc:AR");  
    Statement stmt = con.createStatement();  
    ResultSet rs = stmt.executeQuery("SELECT * FROM HPD:HelpDesk WHERE "CaseID+" = '000000008815267'");  
    while (rs.next()) {  
        for (int i = 1;i<rs.getMetaData().getColumnCount();i++){  
            System.out.println(i + "t" + rs.getMetaData().getColumnName(i) + "t" + rs.getString(i));  
        }  
    }
    

    编辑:当试图读取列时,应用程序挂起。在本例中,rs.getString()

    longvarchar基本上就是CLOB。根据我的理解,你需要用一个流来读取:

    BufferedInputStream bufferedIn = new BufferedInputStream( rs.getBinaryStream( longvarcharColumnIndex ) );
    ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
    int index;
    while ( ( int index = bufferedIn.read() ) != -1 )
    {
        byteArrayOut.write( ( byte ) index );
    }
    bufferedIn.close();
    byteArrayOut.close();
    

    你不能说代码挂起的例子。它在read()上吗?它在可用()上吗?您必须非常小心如何调用这些方法,否则当没有更多的字节可供读取时,代码将冻结在read()状态。

    相关内容

    • 没有找到相关文章

    最新更新