在 JavaPreparedStatement INSERT 查詢中動態指定表格名稱
使用 Java 的 PreparedStatement
建立批次 INSERT 查詢通常需要處理變數欄位值和變數表名稱。 這允許您將資料插入具有相同列結構的多個表中,而無需重寫每個表的查詢。
一種常見但有缺陷的方法嘗試直接在 SQL 語句中參數化表名稱:
<code class="language-java">String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);"; </code>
這不起作用,因為 PreparedStatement
參數化適用於欄位 值,而不是表或架構名稱。 您不能使用 stmt.setString(1, "tableName1");
有效的解決方案:字串連接
正確的方法是在建立 PreparedStatement
之前透過連接表名來動態建構 SQL 查詢字串。 這可確保表名正確合併到查詢中:
<code class="language-java">String tableName = "tableName1"; String query = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);"; PreparedStatement stmt = connection.prepareStatement(query);</code>
此技術提供了有效管理具有共用資料列定義的多個資料表的批次 INSERT 作業所需的彈性。 如果來自不受信任的來源,請記得清理 tableName
以防止 SQL 注入漏洞。
以上是如何在 Java PreparedStatement INSERT 中使用變數表名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!