【问题标题】:JDBC - MultiDimensional Array and Parsing ResultsJDBC - 多维数组和解析结果
【发布时间】:2012-07-01 07:18:33
【问题描述】:

在公开我的问题之前,我必须说我从未学习过 Java,甚至没有进行过开发研究。很抱歉,如果我的问题看起来“愚蠢”...

我必须将来自 derby 数据库的几列的结果显示到面板中。

为了做到这一点,我有一个方法可以返回一个列数组和一个结果集:

public String[] toStringArray(ResultSet resultSet, int columnIndex) {
    LinkedList<String> resultList = new LinkedList<String>();
    try {
        while (resultSet.next()) {
            resultList.add(resultSet.getString(columnIndex));
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return resultList.toArray(new String[0]);
}

这是我的第二个方法,它通过第一个方法从我的数据库的第一列和第二列返回一个二维数组...

public String[][] GetArray() {
String[] arrayone = new String[0];
String[] arraytwo = new String[1];
String[][] array = new String[2][];

try {
    String getInfo =
                     "SELECT ONE, TWO FROM APP.DB ";

ResultSet listR = s.executeQuery(getInfo);
arrayone = toStringArray(listR,1);
arraytwo = toStringArray(listR,2);
   array [0] = arrayone; 
   array [1] = arraytwo; 

} } }catch (SQLException ex) {
            Logger.getLogger(CalendarPanelTest.class.getName()).log(Level.SEVERE, null, ex);
        }}
      return array;

}

所以我返回一个二维数组维度,其中包含数据库中两列的结果...

现在我像这样显示它(考虑到两列结果查询的结果数量相同 - 或者必须输入空值才能显示):

String[][] result = GetArray();

int nb = array.length;
for(int a=0; a < nb; a++) 
{
System.print.ln(result[0][a]+result[1][a])
}

我认为问题出在

return resultList.toArray(new String[0]); 

我尝试更改此对象但没有结果...

这似乎只将数据推送到第一列...

或者形成我的方法或者在列数组的声明中:

String[] arrayone = new String[0];
String[] arraytwo = new String[1];
String[][] array = new String[2][];

但是我尝试了所有数字的可能性,当我想显示它时,这个给了我第一列的结果......:

String[][] array = new String[2][];

就算

String[][] array = new String[1][]

String[][] array = new String[0][1]; 

似乎更合乎逻辑......

我很高兴有一些解决方案的建议来正确构造这个二维数组或给我提供另一个更好的解决方案的方法......

数组是最好的方法吗?如果我需要显示 10 个 colmun 的结果,这可能是实现该目标的最佳/快速方法?

最好的问候,对不起我的英语不好......

编辑:我的解决方案是为第二个值添加第二个结果集:

ResultSet listR = s.executeQuery(getInfo);
    ResultSet listR2 = s.executeQuery(getInfo);
    arrayone = toStringArray(listR,1);
    arraytwo = toStringArray(listR2,2);

感谢 Soumyadip Das 的帮助!!!问候,

工作速度第一时间就正常工作...

【问题讨论】:

    标签: arrays string parsing jdbc multidimensional-array


    【解决方案1】:

    我认为你错过了右括号如下:

    public String[] toStringArray(ResultSet resultSet, int columnIndex) {
        LinkedList<String> resultList = new LinkedList<String>();
        try {
            while (resultSet.next()) { // where is the closing bracket ??
                resultList.add(resultSet.getString(columnIndex));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return resultList.toArray(new String[0]);
    }
    

    如果这只是一个发布错误,请检查如下:


    我觉得简单点,可能是我错了,但你可以试试这个:

    public String[] toStringArray(ResultSet resultSet, int columnIndex) {
        ArrayList<String> results = new ArrayList<String>();
        try {
        // COMMENT: please debug your code to be sure the resultSet is not empty.
            while (resultSet.next()) {
                results.add(resultSet.getString(columnIndex));}
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return results.toArray();
    }
    

    以下两行可能会导致问题:

     array [0] = arrayone; 
       array [1] = arraytwo;
    

    建议:始终正确调试您的代码。它可以解决您 80% 的问题。

    【讨论】:

    • 感谢您的回答。对不起括号,我用“while end”括号删除了一些“println”代码。我尝试了您的解决方案,但是是的 array [1] = arraytwo;和数组 [0] = arrayone;导致问题,我不知道如何取回数据...我将向前搜索,如果发现工作问题,我将再次发布。你对“调试你的代码”怎么说,你说“注意”或“使用一些工具,比如 Junit ?”我是一名网络和系统管理员,我的代码写得像我的脚本一样糟糕......
    • Finnaly 上面的代码正在运行,但我必须为第二个值添加第二个结果集...ResultSet listR = s.executeQuery(getInfo);ResultSet listR2 = s.executeQuery(getInfo); arrayone = toStringArray(listR,1); arraytwo = toStringArray(listR2,2);但是你是对的,调试我的代码是第一件事!问候,
    • 很高兴知道它对您有所帮助……祝您一切顺利。请接受答案并投票!! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多