BAE的資料庫使用的mysql,還有phpmyadmin,怎麼說呢,太像那種php空間了。
不過都是免費的哈~~
第一個問題就是串連資料的問題。
做了一個簡單的聊天室項目,打算放上去試試。
BAE的資料庫連接的使用者名稱和密碼需要從request請求中擷取。
只有資料庫名是我們可以直接拿來用的。
定義一個JdbcUtil類。用來擷取串連。
為了節省代碼,直接寫成 共有靜態變數了。
public final class JdbcUtil { private static String dbUrl = "jdbc:mysql://"; public static String port; public static String host; public static String username; public static String password; public static String databaseName = "zJtjKTokkLUoGqQZMBkC"; //拒絕new一個執行個體 private JdbcUtil() {}; static {//註冊驅動 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException { String connName = dbUrl + host + ":" + port + "/" + databaseName; return DriverManager.getConnection(connName); }
訪問每個頁面都都要設定 串連的使用者名稱和密碼。
乾脆直接來個過濾器,過濾每個請求。
<filter><filter-name>jdbc</filter-name><filter-class>filter.InitFilter</filter-class></filter><filter-mapping><filter-name>jdbc</filter-name><url-pattern>*.*</url-pattern></filter-mapping>
public class InitFilter implements Filter{public void destroy() {}public void doFilter(ServletRequest req, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)req;JdbcUtil.host = request.getHeader("BAE_ENV_ADDR_SQL_IP");JdbcUtil.port =request.getHeader("BAE_ENV_ADDR_SQL_PORT");JdbcUtil.username = request.getHeader("BAE_ENV_AK");JdbcUtil.password = request.getHeader("BAE_ENV_SK");chain.doFilter(request, response);}public void init(FilterConfig arg0) throws ServletException {}}