在Java中動態拼接SQL語句并執行可以使用PreparedStatement預編譯的方式,該方式可以防止SQL注入攻擊,并提高SQL的執行效率。
下面是一個簡單的示例,展示了如何動態拼接SQL并執行:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Main {????public?static?void?main(String[]?args)?{
????????String?name?=?“John”;??//?假設需要動態拼接的查詢條件是name字段的值為John
????????
????????try?{
????????????//?連接數據庫
????????????Connection?connection?=?DriverManager.getConnection("jdbc:mysql://localhost:3306/
????????????mydb",?“username”,?“password”);
????????????
????????????//?構建SQL語句
????????????String?sql?=?“SELECT?*?FROM?my_table?WHERE?name?=??”;
????????????
????????????//?創建PreparedStatement對象
????????????PreparedStatement?statement?=?connection.prepareStatement(sql);
????????????
????????????//?設置動態參數
????????????statement.setString(1,?name);
????????????
????????????//?執行查詢
????????????ResultSet?resultSet?=?statement.executeQuery();
????????????
????????????//?處理查詢結果
????????????while?(resultSet.next())?{
????????????????//?獲取結果集中的數據
????????????????int?id?=?resultSet.getInt(“id”);
????????????????String?name?=?resultSet.getString(“name”);
????????????????
????????????????//?處理數據
????????????????System.out.println("ID:?"?+?id?+?",?Name:?"?+?name);
????????????}
????????????
????????????//?關閉連接
????????????resultSet.close();
????????????statement.close();
????????????connection.close();
????????}?catch?(SQLException?e)?{
????????????e.printStackTrace();
????????}
????} }
上述代碼中,首先創建一個Connection對象來連接數據庫,然后構建SQL語句,使用PreparedStatement對象預編譯SQL語句,并通過setXXX()方法設置動態參數,最后執行查詢操作并處理查詢結果。
需要注意的是,上述代碼中的數據庫連接信息(URL、用戶名、密碼)需要根據實際情況進行修改。