首页 > 解决方案 > SQL 到 Java 二维矩阵

问题描述

我不明白为什么它会关闭连接并且不将结果集中的信息提供给int[][]某人可以帮助我,我被卡住了谢谢

public void InsertBoredFromSQL()
{
    Connection conn = null;
    Statement st = null;
    ResultSet rs1 = null;
    int[][] Arr = new int[8][8];
    String Query = "select A,B,C,D,E,F,G,H from Games where GameID =" + this.res;
    //this is a variable to help from the outside (globale) 

    try
    {
        //crate connection
        conn = getConnection();
        //crate statement and execute query
        st = conn.createStatement();
        rs1 = st.executeQuery(Query);
        //from here it jumps to the exeption and i don't know why it wont run
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                rs1.next();
                char c = 'A';
                char column = (char) (i + c);
                Arr[i][j] = rs1.getInt(column);
            }
        }
    }
    catch (Exception ex)
    {
        System.out.println(ex);
    }
}

标签: javasql

解决方案


你的部分问题是:

 char c = 'A';
 char column = (char) (i + c);
 Arr[i][j] = rs1.getInt(column);

在这里您使用的是 method ResultSet#getInt(int),没有将 achar作为参数的方法,因此在您的情况下,对于第一次迭代,将char转换为 an which is which is intA65

要么使用从 1 开始的索引来获取结果集的第一列,要么将列 char 转换为字符串以按名称获取列。

对结果集使用 while 循环可能会更好 - 考虑一下如果查询返回意外的行数会发生什么。你可以这样做:

while(rs.next())
{
    // Do your row operations
}

ResultSet#next()将前进到下一行,并根据是否还有其他行返回真或假。

这也给您的代码带来了另一个问题 - 您的rs.next()调用在您的内部循环中 - 这意味着您将为每次迭代推进一行和一列,然后可能会得到一个新的异常。

如果您使用,您还可以从异常中获得更好的详细信息

catch(Exception ex) {
     ex.printStackTrace()
}

推荐阅读