Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發怎麼少的了後端(中)

android開發怎麼少的了後端(中)

編輯:關於Android編程

今天給大家帶來的是客戶端與服務器端的通信,話不多說,直接上例子:
今天我們實現一個注冊的功能,客戶端的界面編寫神馬的咱就不在這浪費時間了,我這也直接寫好了,一個最簡單的注冊和登錄界面:

界面寫好之後,接下來咱們就去弄接口了。

首先,先把數據庫搞好,上一篇介紹的兩個mysql的軟件還是很好用的,不用寫數據庫語句就能直接創建表,當然了,你也可以使用建表語句來創建,開心就好!

好了表創建好了。

接下來我們打開eclipse j2ee,新建一個web工程

然後在src下創建三個包,一個放Servlet,一個放mysql的工具類,一個放對象;

這裡我們采用jdbc連接,沒有jdbc包的請看這邊:點我下載JDBC jar包 因為我們要將結果以json的形式傳給客戶端,所以我們還需要一個gson的包,沒有gson包的請看這邊:點我下載gson jar包

然後我們開始寫數據庫的工具類:

public class DBUtils {
    private Connection conn;
    private String url = "jdbc:mysql://127.0.0.1:3306/Login"; // 指定連接數據庫的URL
    private String user = "root"; // 指定連接數據庫的用戶名
    private String password = "1002"; // 指定連接數據庫的密碼

    private Statement sta;
    private ResultSet rs;

    // 打開數據庫連接
    public void openConnect() {
        try {
            // 加載數據庫驅動
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);// 創建數據庫連接
            if (conn != null) {
                System.out.println("數據庫連接成功"); // 連接成功的提示信息
            }
        } catch (Exception e) {
            System.out.println("ERROR: " + e.getMessage());
        }
    }
    //獲得查詢user表後的數據集
    public ResultSet getUser() {
        // 創建 statement對象
        try {
            sta = conn.createStatement();
            // 執行SQL查詢語句
            rs = sta.executeQuery("select * from user");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    // 判斷數據庫中是否存在某個用戶名及其密碼,注冊和登錄的時候判斷
    public boolean isExistInDB(String username, String password) {
        boolean isFlag = false;
        // 創建 statement對象
        try {
            sta = conn.createStatement();
            // 執行SQL查詢語句
            rs = sta.executeQuery("select * from user");//獲得結果集
            if (rs != null) {
                while (rs.next()) {  //遍歷結果集
                    if (rs.getString("user_name").equals(username)) {
                        if (rs.getString("user_pwd).equals(password)){
                            isFlag = true;
                            break;
                        }
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
            isFlag = false;
        }
        return isFlag;
    }

    //注冊  將用戶名和密碼插入到數據庫(id設置的是自增長的,因此不需要插入)
    public boolean insertDataToDB(String username, String password){
        String sql = " insert into user ( user_name , user_pwd ) values ( " + "'" + username
                + "', " + "'" + password + "' )";
        try {
            sta = conn.createStatement();
            // 執行SQL查詢語句
            return sta.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

    // 關閉數據庫連接
    public void closeConnect() {
        try {
            if (rs != null) {
                rs.close();
            }
            if (sta != null) {
                sta.close();
            }
            if (conn != null) {
                conn.close();
            }
            System.out.println("關閉數據庫連接成功");
        } catch (SQLException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

注:上述的數據庫語句不要寫錯了,該空格的地方不要省地方,否則的話會報錯的

好了,到此我們的數據庫的工具類就寫好了,如果不太懂的可以看注釋,應該可以看懂

接下來我們要寫Servlet了

偷個懶,我們直接寫doPost()方法,在doGet()方法中也執行doPost()方法

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String username = request.getParameter("username"); // 獲取客戶端傳過來的參數
    String password = request.getParameter("password");

    if (username == null || username.equals("") || password == null || password.equals("")) {
        System.out.println("用戶名或密碼為空");
        return;
    }

    // 請求數據庫
    DBUtils dbUtils = new DBUtils();
    dbUtils.openConnect(); // 打開數據庫連接
    BaseBean data = new BaseBean(); // 基類對象,回傳給客戶端的json對象
    UserBean userBean = new UserBean();   //user的對象
    if (dbUtils.isExistInDB(username, password)) { // 判斷賬號是否存在
        data.setCode(-1);
        data.setData(userBean);
        data.setMsg("該賬號已存在");
    } else if (!dbUtils.insertDataToDB(username, password)) { // 注冊成功
        data.setCode(0);
        data.setMsg("注冊成功!!");
        ResultSet rs = dbUtils.getUser();
        int id = -1;
        if (rs != null) {
            try {
                while (rs.next()) {
                    if (rs.getString("user_name").equals(username) && rs.getString("user_pwd").equals(password)) {
                        id = rs.getInt("user_id");
                    }
                }
                userBean.setId(id);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        userBean.setUsername(username);
        userBean.setPassword(password);
        data.setData(userBean);
    } else { // 注冊不成功,這裡錯誤沒有細分,都歸為數據庫錯誤
        data.setCode(500);
        data.setData(userBean);
        data.setMsg("數據庫錯誤");
    }
    Gson gson = new Gson();
    String json = gson.toJson(data);  //將對象轉化成json字符串
    try {
        response.getWriter().println(json); // 將json數據傳給客戶端
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        response.getWriter().close(); // 關閉這個流,不然會發生錯誤的
    }
    dbUtils.closeConnect(); // 關閉數據庫連接
}

好了,Servlet也寫好了,然後我們可以運行一下:

至於回傳給客戶端的json基類對象,如下:

public class BaseBean{
    private int code;
    private String msg;
    private Object data;
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
}

看請求的url:http://localhost:8080/MyWeb/RegisterServlet

 

咦!怎麼報404的錯了,什麼鬼呢,別急>_<咱們參數還沒有傳呢:

這就對了!此處應該有掌聲

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved