query = "UPDATE personal_details SET '" + field + "' = '" + edit + "' WHERE associate_id = '" + associate_id + "'";
這裏我的表名是personal_details
,我將表列名稱作爲變量字段中的參數以及編輯中的新值。這段代碼是用Java編寫的。我正在訪問的數據庫在PostgreSQL中。我可以通過這種方式傳遞列名嗎?
query = "UPDATE personal_details SET '" + field + "' = '" + edit + "' WHERE associate_id = '" + associate_id + "'";
這裏我的表名是personal_details
,我將表列名稱作爲變量字段中的參數以及編輯中的新值。這段代碼是用Java編寫的。我正在訪問的數據庫在PostgreSQL中。我可以通過這種方式傳遞列名嗎?
您正在構造一個包含該查詢的字符串。數據庫不知道如何構造字符串。最終,您只需將該字符串傳遞到將被解析,編譯和執行的位置。所以是的,你可以這樣構造查詢。
無法將列名或表名作爲參數傳遞到查詢中。建議您將其他值作爲參數傳遞到查詢中。
雖然你可以使用普通的級聯構建字符串,則比較推薦的方法是:
建議不要使用StringBuilder進行查詢構建。 StringBuffer已棄用,不應再使用。 –
@ adriaan-koster同意棄用的StringBuffer,也同意你的觀點,即StringBuilder不是最合適的解決方案。我只是展示了大多數可能的方法。親自**我**更喜歡使用** PreparedStatements **。 – lospejos
不要構建像這樣的查詢! @Rory指出,由於安全問題,這是不好的做法。相反,使用帶參數的PreparedStatement,例如:
String updateTableSQL = "UPDATE DBUSER SET USERNAME = ? WHERE USER_ID = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(updateTableSQL);
preparedStatement.setString(1, "mkyong_new_value");
preparedStatement.setInt(2, 1001);
// execute insert SQL stetement
preparedStatement .executeUpdate();
(來自mkyong兩者)
你可以做到這一點,它的工作,但你將SQL注入攻擊敞開的,假定這些變量來自用戶輸入 –
是的,你可以像這樣傳遞查詢。你有什麼問題嗎? –
是的..我刪除了單引號。 query =「UPDATE personal_details SET」+ field +「='」+ edit +「'WHERE associate_id ='」+ associate_id +「'」; –