[英]Copy consecutive (MySQL) resultsets into single multidimensional array
我想將我從MySQL數據庫的幾個表中獲得的幾個結果集復制到一個多維數組中。 使用for循環,我遍歷了一個帶有數據庫中表名的數組。
我已經成功選擇了數據並獲得了一個結果集,並且這些各種結果集與我打算復制到單個多維數組中的表相對應。 當我嘗試打印此多維數組時,它似乎是空的。
如果您想知道多維數組的行數和列數是事先已知的。 所以在下面的代碼中,行數為12,列數為18。
以下是我的編輯代碼:
// Pass array holding existing tables for selection of all data from each array element
String[][] arr = null, current = null;
int i = 0;
int j = 0;
for(int k = 0; k <= existingTablesInDBAsArr.length; k++) {
String sql = "SELECT * FROM " + existingTablesInDBAsArr[k];
try (
//Connection conn = DBUtil.getConnection(DBType.MYSQL);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
){
System.out.println("\nRS as a string buffer: ");
while (rs.next()) {
StringBuffer bf = new StringBuffer();
bf.append(rs.getInt("entryID") + ": ");
bf.append(rs.getString("agentID") +"~ ");
bf.append(rs.getString("company") +"~ ");
bf.append(rs.getString("contact") +"~ ");
bf.append(rs.getString("telephone") +"~ ");
bf.append(rs.getString("fax") +"~ ");
bf.append(rs.getString("address") +"~ ");
bf.append(rs.getString("email") +"~ ");
bf.append(rs.getString("county") +"~ ");
bf.append(rs.getString("postcode") +"~ ");
bf.append(rs.getString("country") +"~ ");
bf.append(rs.getString("admin_notes") +"~ ");
bf.append(rs.getString("agent_notes") +"~ ");
bf.append(rs.getString("enqr_taken_by") +"~ ");
bf.append(rs.getString("enqr_type") +"~ ");
bf.append(rs.getString("enqr_action") +"~ ");
bf.append(rs.getString("enqr_date") +"~ ");
bf.append(rs.getString("enqr_time"));
System.out.println(bf.toString());
}
System.out.println("\nRS as an array:");
try {
try {
rs.beforeFirst();
} catch(Exception ex) {
System.out.println("\nException WRT rs.first(); i.e. \n" + ex.toString());
}
ResultSetMetaData rsmd = rs.getMetaData();
int columnSize = rsmd.getColumnCount();
arr = new String[numbOfRows][columnSize];
System.out.println("\ni outside while but before increment is: " + i);
System.out.println("j outside while but before increment is: " + j);
while(rs.next()) {
System.out.println("\ni inside while but before increment is: " + i);
System.out.println("j inside while but before increment is: " + j);
for(j = 0; j < columnSize; j++) {
arr[i][j] = rs.getString(j + 1).toUpperCase();
System.out.println("arr[" + i + "][" + j + "]: " + arr[i][j]);
}
System.out.println("\n");
i++;
System.out.println("\ni inside while but after increment is: " + i);
System.out.println("j inside while but after increment is: " + j + "\n");
if(i == arr.length) {
System.out.println("\n---\nEnqrsTableManager - i == arr.length");
System.out.println("\n---\nEnqrsTableManager - arr.length > 0\n---\nArray containing all entries from all tables is as follows: ");
for (int row = 0; row < arr.length; row++) {
System.out.println("arr[" + row + "][0]: " + arr[row][0]);
System.out.println("arr[" + row + "][1]: " + arr[row][1]);
System.out.println("arr[" + row + "][2]: " + arr[row][2]);
System.out.println("arr[" + row + "][3]: " + arr[row][3]);
System.out.println("arr[" + row + "][4]: " + arr[row][4]);
System.out.println("arr[" + row + "][5]: " + arr[row][5]);
System.out.println("arr[" + row + "][6]: " + arr[row][6]);
System.out.println("arr[" + row + "][7]: " + arr[row][7]);
System.out.println("arr[" + row + "][8]: " + arr[row][8]);
System.out.println("arr[" + row + "][9]: " + arr[row][9]);
System.out.println("arr[" + row + "][10]: " + arr[row][10]);
System.out.println("arr[" + row + "][11]: " + arr[row][11]);
System.out.println("arr[" + row + "][12]: " + arr[row][12]);
System.out.println("arr[" + row + "][13]: " + arr[row][13]);
System.out.println("arr[" + row + "][14]: " + arr[row][14]);
System.out.println("arr[" + row + "][15]: " + arr[row][15]);
System.out.println("arr[" + row + "][16]: " + arr[row][16]);
System.out.println("arr[" + row + "][17]: " + arr[row][17]);
}
}
}
} catch (Exception e) {
System.out.println("\nError in generating 2D array from specific table resultset");
}
}
}
感謝您的協助/建議。
您為數組分配值的方式可能會引起問題:
System.out.println("arr[" + i + "][" + j + "]: " + (arr[i][j] = rs.getString(j + 1).toUpperCase()));
應更改為:
arr[i][j] = rs.getString(j + 1).toUpperCase();
System.out.println("arr[" + i + "][" + j + "]: " + arr[i][j]);
System.out.println
除了向控制台發送的有用消息外,不應包含任何其他內容-絕對不能包含變量分配!
編輯:
另外,如果要再次遍歷結果集,請確保重設它(對於第二個循環):
resultSet.first();
否則,光標將位於末尾,您將看不到任何結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.