我试图选择一个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行?
1条答案
按热度按时间yi0zb3m41#
尝试以下操作。您可能还引入了resultSet.getIndex()从1而不是0索引的问题。