ホーム > デベロッパ > J2ME / MIDP プログラミング > 携帯電話用Java の雰囲気と IM

携帯電話用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:    }