此範例示範將 JDBC 連線、查詢、更新操作封裝為一個簡單的 JavaBean,供 JSP 或 Servlet 呼叫,達成資料存取邏輯與展示層分離。
public class JSP2Bean {
private String sample = "Start value";
private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
private String url = "jdbc:odbc:untitled1";
private Connection conn = null;
private ResultSet rs = null;
// Simple Property
public String getSample() { return sample; }
public void setSample(String v) { if (v != null) sample = v; }
public JSP2Bean() {
try { Class.forName(driver); }
catch (ClassNotFoundException e) { System.err.println("Driver load error: " + e); }
}
// 執行查詢,回傳 ResultSet (呼叫端需自行關閉)
public ResultSet executeQuery(String sql) {
try {
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
} catch (SQLException ex) { System.err.println("Query error: " + ex); }
return rs;
}
// 執行更新 (INSERT/UPDATE/DELETE)
public void executeUpdate(String sql) {
try {
conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql); // 注意:原碼誤用 executeQuery,此處修正
} catch (SQLException ex) { System.err.println("Update error: " + ex); }
}
}
<%@ page import="untitled1.JSP2Bean" %>
<%
JSP2Bean bean = new JSP2Bean();
ResultSet rs = bean.executeQuery("SELECT * FROM news");
while (rs.next()) {
out.println(rs.getString("title") + "<br>");
}
rs.close();
%>
PreparedStatement 參數化查詢。Connection、Statement、ResultSet 皆非執行緒安全,不可作為 Bean 執行個體欄位共用;應在方法內建立區域變數。