使用 Prepared Statement 的好處是可以避免常見的 SQL 注入攻擊 (SQL Injection)

我們先在先在資料庫中建立一個表格:

CREATE TABLE users (name TEXT, mail TEXT);

然後 Java 語法如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class NewClass {

    public static void main (String[] args) throws SQLException {

        // 使用 try {} 可以讓 Connection 結束後自動執行 close() 以關閉資料庫。
        try (Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/db_name", "user_name", "password");) {
                // 插入
                PreparedStatement ps = conn.prepareStatement("INSERT INTO users (name, mail) VALUES(?, ?);");
                ps.setString(1, "Loli");
                ps.setString(2, "my@lolilab.com");
                ps.execute();

                ps = conn.prepareStatement("SELECT * FROM users;");
                // 查詢
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    System.out.println("Query : " + rs.getString("name") + " , " + rs.getString("mail"));
                }
        }
    }
}

其他說明:上面的問號(?)正規名稱叫做 "佔位符"




arrow
arrow
    全站熱搜

    黃彥霖 發表在 痞客邦 留言(0) 人氣()