2013-12-13 70 views
0

我需要創建一個動態查詢來更新行,併爲用戶提供該行中存在的每個列的輸入窗口,然後在查詢中插入這些值。動態更新查詢

我只是不知道該如何去做,因爲我是編程新手。

這裏是我的代碼:

try { 
    Class.forName("org.sqlite.JDBC"); 
    c = DriverManager.getConnection("jdbc:sqlite:test.db"); 
    c.setAutoCommit(true); 
    System.out.println("Opened database successfully"); 
    stmt = c.createStatement(); 
    ResultSet rs = stmt.executeQuery("SELECT * FROM "+tablename); 
    ResultSetMetaData rsmd = rs.getMetaData(); 
    //Grabs the first,second and third column name which only is used if you are deleting from the SPJ table. 
    FirstColumn = rsmd.getColumnName(1); 
    SecondColumn = rsmd.getColumnName(2); 
    ThirdColumn = rsmd.getColumnName(3); 
    //Changes the query depending on what table you have chosen 
    if(tablename.equals("SPJ")) { 
    query = "UPDATE "+ tablename +" WHERE " + FirstColumn + " = '" + row1 + "' AND " + SecondColumn + " = '" + row2 + "' AND " + ThirdColumn + " = '" +row3+"'" ; 

} else { 
     query = "UPDATE "+ tablename +" WHERE " + FirstColumn + " = '" + row + "' VALUES("+values+")"; 
    } 
int columnCount = rsmd.getColumnCount(); 
    Object[] row = new Object[columnCount]; 
for (int i = 1; i <= columnCount; ++i) { 
row[i - 1] = rs.getString(i); // Or even rs.getObject() 
} 
// runs the query. 
    stmt.executeUpdate(query); 
//closes connections 
    stmt.close(); 
    c.close(); 

我嘗試這樣做,給了我一個輸入面板,每列,並把它放入數組,但我得到附近WHERE的SQL語法錯誤? :/

int columnCount = rsmd.getColumnCount(); 
    Object[] row = new Object[columnCount]; 
for (int i = 1; i <= columnCount; ++i) { 
row[i-1] = JOptionPane.showInputDialog("Insert value: "+i); // Or even rs.getObject() 
System.out.println(Arrays.toString(row)); 

} 
} 
+0

您應該添加一個JDBC標記。 –

回答

0

您使用錯誤的UPDATE語法。你應該使用這樣的事情:

UPDATE表名SET列1 =值1,列2 =值2,... WHERE some_column = SOME_VALUE;

請參閱本有關更新鏈接,更多的例子:在您的UPDATE語句SQL UPDATE

我想念那套。在INSERT語句中使用VALUES。