簡體   English   中英

填充Java多維數組

[英]Populating Java multidimensional arrays

我是Java的新手,而我嘗試完成的示例是ColdFusion結構。 以以下數據結構為例。

 id     color
 50     blue
 60     red
 70     green
 80     yellow

我想從查詢結果集中創建一個Java多維數組,如下所示。

 1 id    50
   color blue
 2 id    60
   color red
 3 id    70
   color green
 4 id    80
   color yellow

我的目標是使用返回的數組用數據填充JSP頁面。 我試圖允許我的代碼容納查詢返回的行數的變化。 我當前的代碼如下。

 private static String[][][] query(Connection connection) throws SQLException{

      Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
      ResultSet resultSet = statement.executeQuery("SELECT colors.id,colors.color FROM colors");
      int size;
      resultSet.last();
      size = resultSet.getRow();
      resultSet.beforeFirst();

      ResultSetMetaData rsltmetadata = resultSet.getMetaData();
      int colCount = rsltmetadata.getColumnCount();

      String[][][] rlstSetArray = new String[size][colCount][];

      int m = 0;
      while(resultSet.next()) {
           ++m; 
           for (int j=1; j <= colCount; j++){
                System.out.println(m);
                System.out.println(rsltmetadata.getColumnName(j));
                System.out.println(resultSet.getString(rsltmetadata.getColumnName(j)));

           }
       }
 }

這段代碼產生了這個結果。

 1
 id
 50
 1
 color
 blue
 2
 id
 60
 2
 color
 red

等等...

代替三個System.out.println行,它們嘗試了以下選項,並從NetBeans 8.1接收相同的消息。 “不兼容的類型:字符串無法轉換為int”

 rlstSetArray[m][rsltmetadata.getColumnName(j)] = resultSet.getString(rsltmetadata.getColumnName(j));

 rlstSetArray[m][rsltmetadata.getColumnName(j)] = "'" + resultSet.getString(rsltmetadata.getColumnName(j)) + "'";

 rlstSetArray[m]["'" + rsltmetadata.getColumnName(j) + "'"] = resultSet.getString(rsltmetadata.getColumnName(j));

是什么導致此消息?

這是否將允許我使用數組第二維中的列名從JSP中的數組中檢索數據?

我不知道我在回答您的問題,但是當我看到三維時,我聽到“哦”的聲音:

private static String[][][] query(Connection connection) throws SQLException{

您是否考慮過將POJO用於​​數據?

class ColorMap {
     private final Integer id;
     private final String  color;

     private static HashMap<String, Integer> nameMap = new HashMap<String, Integer>();

     public ColorMap(int theId, String theColor) {
         id = theId;
         color = theColor;
         addColorToMap();
     }

     private void addColorToMap() {
         ColorMap.nameMap.put(this.color, this.id);
     }

     public static Integer getColorByName(String theName) {
         return ColorMap.nameMap.get(theName);
     }
}

然后,當您從查詢中提取數據時,您將填充地圖,我將使用列名來查找其值,否則它們將與查詢文本緊密耦合。

要為結果集而不是3維數組創建POJO包裝器類,該怎么辦?

public class Color {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然后可以簡化查詢方法:

private static List<Color> query(Connection connection) throws SQLException{
    List<Color> colors = new LinkedList();
    ...
    while(resultSet.next()) {
        Color color = new Color();
        color.setName(resultSet.getString(rsltmetadata.getColumnName("color"));
        color.setId(resultSet.getString(rsltmetadata.getColumnName("id"));
        colors.add(color);
    }
    return colors;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM