java 如何使用SQL“select *”查询的jdbc ResultSet创建二维数组并将其填充为真值表

vnjpjtjt  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(169)

我试图选择一个MSSQL Server表的全部内容,并将其作为一个"真值表"。目标是选择整个SQL表,并将其作为一个二维数组填充到Java中。下面是我正在使用的一个令牌源表(表名为SANITIZED):SQLServerTable I的行数可能是可变的,但列数是固定的(因此数组不是交错数组)。表中使用标记值作为种子,以表示先行后列,从而便于故障排除(13表示第1行,第3列,24表示第2行,第4列...)
下面是我尝试过的代码(匿名消毒):

public class SANITIZED {

private static String url = "jdbc:sqlserver://SANITIZED:SANITIZED;DatabaseName=SANITIZED;encrypt=true;trustServerCertificate=true";
    
public static void main(String[] args) {

int numRows = 0;
                
try {
Connection conn = DriverManager.getConnection(url, "SANITIZED", "SANITIZED");
//  Establish Connection Object
Statement statement = conn.createStatement();
//  Create a SQL statement object to send to the database
ResultSet resultSet = statement.executeQuery("select count (*) from SANITIZED");  //  Execute the statement object
//  Process the result
if (resultSet.next()) { // just in case
numRows = resultSet.getInt(1); // note that indexes are one-based
}
} catch (SQLException e) {
e.printStackTrace();
}

int[][] truthTable = new int[numRows][27];
        
try {
Connection conn = DriverManager.getConnection(url, "SANITIZED", "SANITIZED");  //  Establish Connection Object
Statement statement = conn.createStatement();
//  Create a SQL statement object to send to the database
ResultSet resultSet = statement.executeQuery("select * from SANITIZED");  //  Execute the statement object
//  Process the result
while(resultSet.next()) {

System.out.println("resultSet: " + (resultSet.getInt(1)));
System.out.println("resultSet: " + (resultSet.getInt(2)));
System.out.println("resultSet: " + (resultSet.getInt(3)));
System.out.println("resultSet: " + (resultSet.getInt(4)));
            
truthTable[numRows - 2][0] = resultSet.getInt(1);
truthTable[numRows - 2][1] = resultSet.getInt(2);
truthTable[numRows - 2][2] = resultSet.getInt(3);
truthTable[numRows - 2][3] = resultSet.getInt(4);
}

println语句的输出为:结果集:11个结果集:12个结果集:13个结果集:14个结果集:21个结果集:22个结果集:23个结果集:24
但是,当我尝试填充一个二维数组时,Eclipse调试器显示SQL表的第二行填充到数组的第一行,尽管getInt()方法的columnIndex作为1传递。即使我注解掉println语句,也会出现这种情况。x一个月一个x一个月一个x一个月一个x一个月二个x一个月三个x一个月四个x一个x一个月五个x一个x一个
上面的代码对数组的行进行硬编码([numRows-2]),但理想情况下,目标是根据需要迭代ResultSet,希望从DB中只返回int值的单个SQL 'select *'查询(具有特定数目的列但具有可变数目的行)可以用来创建和填充一个列数固定、行数可变的数组。我感谢社区在理解如何实现这一点方面提供的任何帮助。
给定索引的println语句打印SQL表第一行中的值。
尝试使用相同的索引填充数组(在缺少println语句的情况下)会填充数组第二行的值。为什么在使用相同的索引时,它会打印第一个DB行,但存储第二个DB行?

yi0zb3m4

yi0zb3m41#

尝试以下操作。您可能还引入了resultSet.getIndex()从1而不是0索引的问题。

List<int[]> orderedTruthTableList = new ArrayList<>();
    try {
        Connection conn = DriverManager.getConnection(url, "SANITIZED", "SANITIZED"); // Establish Connection Object
        Statement statement = conn.createStatement();
        // Create a SQL statement object to send to the database
        ResultSet resultSet = statement.executeQuery("select * from SANITIZED"); // Execute the statement object

        // Process the result
        while (resultSet.next()) {

            orderedTruthTableList.add(new int[] {resultSet.getInt(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4)});

        }
    } finally {

    }

    int[][] truthTable = orderedTruthTableList.toArray(new int[0][0]);

相关问题