2014-07-17 21 views
1

我有一個用於將ArrayList插入PostgreSQL的Java方法。Java PostgreSQL arrayList <Object[]>插入代碼 - 適用於任何數量的列表

public void postgreSQLInsert(String tblname, String col1, String col2, String col3) throws SQLException, IOException, InterruptedException { 
    ArrayList<Object[]> insertList = voltdbresultarray; 

    if (insertList == null) { 
    } else { 
     for (Object[] columnValues : insertList) { 
      try { 
       System.out.println(columnValues[0]); 
       System.out.println(columnValues[1]); 
       System.out.println(columnValues[2]); 
       String sql = "INSERT INTO " + tblname + "(" + col1 + "," + col2 + "," + col3 + ") " + "VALUES (" + columnValues[0] + ", '" + columnValues[1] + "', " + columnValues[2] + ");"; 
       postgresStmt.executeUpdate(sql); 
      } catch (PSQLException e) { 
       System.out.println("Duplicate!"); 
       continue; 
      } 
     } 
    } 
} 

Col1中,COL2和COL3在別處創建的所有列名字符串,voltdbresultarray是一個靜態數組給定值較早。它一切正常,但只適用於三列的對象數組。我想使它適用於具有任意列數的對象數組,但我無法弄清楚。有沒有辦法讓它需要任意數量的列參數並從中創建正確的SQL查詢?

回答

0

如果我理解你的問題,你可以使用varargs

public void postgreSQLInsert(String tblname, String col1, String col2, String col3) 

改變方法簽名

public void postgreSQLInsert(String tblname, String... columns) 

,然後像

if (insertList == null) { 
} else { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("INSERT INTO ").append(tblname); 
    sb.append(" ("); 

    for (int i = 0; i < columns.length; i++) { 
    if (i != 0) { 
     sb.append(", "); 
    } 
    sb.append(columns[i]); 
    } 
    for (Object[] columnValues : insertList) { 
    StringBuilder valueSB = new StringBuilder(); 
    for (int i = 0; i < columnValues.length; i++) { 
     if (i != 0) { 
     valueSB.append(", "); 
     } 
     System.out.println(columnValues[i]); 
     valueSB.append("'").append(columnValues[i]).append("'"); 
    } 

    try { 
     String sql = sb.toString() 
      + "VALUES (" + valueSB.toString() + ")"; 
     postgresStmt.executeUpdate(sql); 
    } catch (PSQLException e) { 
     System.out.println("Duplicate!"); 
     continue; 
    } 
    } 
+0

這幾乎是我正在尋找,是的。什麼是價值SB應該做的?它變紅了。 – Lateral

+0

@ user3779281編輯添加缺少的聲明。 –

+0

啊。那麼,它看起來像在工作。有沒有辦法讓它打印出正確的值,就像以前一樣? – Lateral

相關問題