携帯電話用Java の雰囲気と IM
001:import java.io.*;
002:import javax.servlet.*;
003:import javax.servlet.http.*;
004:import java.sql.*;
005:
006:/**
007: * クライアントから送られた情報を元にデータベースを操作するサーブレットです。
008: *
009: * @author Itaru Ogawa
010: */
011:public class DBTestServlet extends HttpServlet {
012: /** データベースのユーザー名 */
013: private static final String USER = "sophia";
014:
015: /** データベースのパスワード */
016: private static final String PASSWORD = "cradle";
017:
018: /** MySQL用のJDBCドライバ */
019: private static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
020:
021: /** MySQL用の接続先 */
022: private static final String MYSQL_CONNECTION
023: = "jdbc:mysql://localhost/dbtest?useUnicode=true&characterEncoding=SJIS"
024: +"&user=" + USER +"&password=" + PASSWORD;
025:
026: /** PostgreSQL用のJDBCドライバ */
027: private static final String POSTGRESQL_DRIVER = "org.postgresql.Driver";
028:
029: /** PostgreSQL用の接続先 */
030: private static final String POSTGRESQL_CONNECTION
031: = "jdbc:postgresql://localhost/dbtest?user=" + USER + "&password=" + PASSWORD;
032:
033: /**
034: * GETメソッドのリクエストを処理します。
035: */
036: public void doGet(HttpServletRequest req, HttpServletResponse res)
037: throws IOException, ServletException {
038:
039: String operation = req.getPathInfo();
040: byte[] buf = null;
041:
042: req.setCharacterEncoding("Shift_JIS");
043:
044: if (operation!=null && operation.equals("/set")) {
045: /* 「設定」処理 */
046: String name = req.getParameter("name");
047: String status = req.getParameter("state");
048:
049: if (name!=null) {
050: if (status==null) {
051: status = "";
052: }
053: putToDatabase(name, status);
054: buf = new byte[]{0};
055: } else {
056: buf = new byte[]{-1};
057: }
058:
059: } else if (operation!=null && operation.equals("/get")) {
060: /* 「取得」処理 */
061: String output = getFromDatabase();
062: buf = output.getBytes("SJIS");
063:
064: } else {
065: /* その他の場合の処理 */
066: res.setContentType("text/plain; charset=Shift_JIS");
067: PrintWriter out = res.getWriter();
068: String output = getFromDatabase();
069: out.println("Current Data");
070: out.println(output);
071: out.close();
072: return;
073: }
074:
075: /* HTTPでの結果の送信 */
076: res.setContentType("application/octet-stream");
077: res.setContentLength(buf.length);
078: OutputStream os = res.getOutputStream();
079: os.write(buf);
080: os.close();
081: }
082:
083: /**
084: * データベースに名前と状態を登録します。
085: *
086: * @param name 名前
087: * @param state 状態
088: * @return 登録に成功したかどうか
089: */
090: private boolean putToDatabase(String name, String state) {
091: try {
092: /* JDBCドライバのロードと接続*/
093: Class.forName(MYSQL_DRIVER).newInstance();
094: Connection con = DriverManager.getConnection(MYSQL_CONNECTION);
095:
096: /* SQLでデータベースへの登録 */
097: Statement st;
098: st = con.createStatement();
099: st.executeUpdate("delete from users where name='"+name+"'");
100: st.close();
101:
102: st = con.createStatement();
103: st.executeUpdate
104: ("insert into users (name, state) values ('"+name+"','"+state+ "')");
105: st.close();
106: con.close();
107: return true;
108: } catch (Exception e) {
109: e.printStackTrace();
110: return false;
111: }
112: }
113:
114: /**
115: * データベースから名前と状態の一覧を取得します。
116: *
117: * @return 成功時は「名前 : 状態」の組で改行されたリスト
118: * 失敗時は空文字列
119: */
120: private String getFromDatabase() {
121: String result = "";
122: try {
123: /* JDBCドライバのロードと接続 */
124: Class.forName(MYSQL_DRIVER).newInstance();
125: Connection con = DriverManager.getConnection(MYSQL_CONNECTION);
126:
127: /* SQLでデータベースから取得 */
128: Statement st;
129: ResultSet rs;
130: st = con.createStatement();
131: rs = st.executeQuery("select * from users");
132: while(rs.next()) {
133: String name = rs.getString(1);
134: String state = rs.getString(2);
135: result += " "+name +" : " + state + "\n";
136: }
137: rs.close();
138: st.close();
139: con.close();
140: return result;
141: } catch (Exception e) {
142: e.printStackTrace();
143: return result;
144: }
145: }