首页 > 解决方案 > SqlAnywhere 问题在 jtds Android 中返回多行

问题描述

我在使用 jtds 1.3.1 从 SqlAnywhere 数据库中检索多行时遇到了一些麻烦。我正在使用以下查询SELECT menge_pe, text, plain_text, text_is_rtf FROM hs.vk_beleg_pos WHERE belegnr IN (602397),它在使用“SQL Central”在交互式 SQL 窗口中执行时返回预期结果。为了清楚这些字符在 android studio 中被正确转义,为了清楚起见,它像上面这样写。但是,当我的 android 应用程序执行时,只返回一行并产生如下错误:

I/System.out: 1000.0000 menge_pe,空文本,{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Arial;}} {\colortbl;\red0\green0\blue0;}\viewkind4\ uc1\pard\cf1\lang1031\fs18 Epilox H'e4rter EC 5310\par } plain_text, 4096 text_is_rtf E/Error here 1 :: TDS 协议错误:无效的数据包类型 0xd6

出于测试目的,我暂时使用以下代码处理结果。

  public void purchaseDbLookup(String orderID, List<String> results) {
    SqlAnywhereConnClass cc = new SqlAnywhereConnClass("un", "pass", "db", "ip");
    Connection cn = cc.getConnection();
    Statement st = null;
    ResultSet rs;
    ResultSetMetaData rsmt;
    results.clear();

    try {
      st = (Statement) cn.createStatement();
      rs = st.executeQuery("SELECT menge_pe, text, plain_text, text_is_rtf FROM \"hs\".\"vk_beleg_pos\" WHERE belegnr IN (" + orderID + ")");

      ResultSetMetaData rsmd = rs.getMetaData();
      System.out.println("querying SELECT * FROM XXX");
      int columnsNumber = rsmd.getColumnCount();
      while (rs.next()) {
        for (int i = 1; i <= columnsNumber; i++) {
          if (i > 1) System.out.print(",  ");
          String columnValue = rs.getString(i);
          System.out.print(columnValue + " " + rsmd.getColumnName(i));
        }
        System.out.println("");
      }

SQL Central 交互式窗口结果

我已经被这个问题困扰了一段时间,所以我希望有人能帮忙:)

提前谢谢你,马特

标签: javaandroidsqldatabase

解决方案


这看起来像是连接/驱动程序问题。验证您使用的是正确的驱动程序 - 此线程应该会有所帮助:

如何在Android中使用JTDS驱动连接sql server


推荐阅读