使用java读取SQL行的问题

时间:2018-05-01 16:52:37

标签: java sql jdbc

我正在开发一个带有sql数据库的java程序,这是一个口袋妖怪。我将数据库的一行放入数组时遇到问题。这是我的代码中导致问题的部分。

String query2 = "SELECT * " + 
                  "FROM Pokedex.typea, Pokedex.Pokemon where Pokemon.ID = " + pk +
                  " AND type1 = type_name";

java.sql.Statement st2 = con.createStatement();   
ResultSet rs2 = st2.executeQuery(query2);

int i = 2
    while(rs2.next() && i<19) {
        weaka[i-2] = rs2.getInt(i);
        System.out.println(weaka[i-2]);
        i++;
    }

这里是query2返回的行(我用mysql workbench测试过这个):

Fire    1   0   0   0   1   0   1   0   0   1   -1  1   0   0   0   -1  1   -1  4   Charmander  39  52  43  60  50  65  309 Fire    null    Blaze   null    Solar Power NULL

我希望这段代码会将第2列到第18列的值放入数组“weaka”中,但所有代码都会不断地执行

weaka[i-2] = rs2.getInt(i);
System.out.println(weaka[i-2]);

但它永远不会增加i,永远不会读取任何其他列的内容,也永远不会结束。该程序只打印“1”几百次然后崩溃。为什么我不迭代?

有人可以帮我弄清楚如何让我的代码排成行并将第2列到第18列的内容读入数组吗?感谢

编辑:谢谢你的回答。他们都努力让数组读取行,但是这个过程仍然比两个答案都要长。就像它多次读取行一样。我给你的代码不在循环中,为什​​么它多次读取行?

此外,Pokemon.ID是我的架构的主键,因此查询只会返回一行。

1 个答案:

答案 0 :(得分:0)

ResultSet.next()方法尝试从结果集中读取,如果它管理则返回true。你在做什么:

while(rs2.next() && i<19) {
    weaka[i-2] = rs2.getInt(i);
    System.out.println(weaka[i-2]);
    i++;
}

正在读取一行,将第一个值放入一个数组中,然后读取下一行。但是没有下一行,所以执行会在那里停止。

相反,这样做:

if (rs2.next()) {
    for (int i=2; i < 19; i++){
        weaka[i-2] = rs2.getInt(i);
        System.out.println(weaka[i-2]);
    }
}

如果要读取多行,您也需要处理它。