編輯:關於Android編程
今天給大家帶來的是客戶端與服務器端的通信,話不多說,直接上例子:
今天我們實現一個注冊的功能,客戶端的界面編寫神馬的咱就不在這浪費時間了,我這也直接寫好了,一個最簡單的注冊和登錄界面:
界面寫好之後,接下來咱們就去弄接口了。
好了表創建好了。
然後在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的錯了,什麼鬼呢,別急>_<咱們參數還沒有傳呢:
這就對了!此處應該有掌聲
幾年前,看到過有個牛人用HTML5繪制了浪漫的愛心表白動畫。發現原來程序員也是可以很浪……漫…..的(PS:剛過520,被妹子罵
在windows安裝Android的開發環境不簡單也說不上算復雜,本文寫給第一次想在自己Windows上建立Android開發環境投入Android浪潮的朋友們,為了確保
1,創建dialog的布局,如 2,在style中聲明如下風格 1
1、如圖片1所示,在一個Android應用中,除了標題欄和底層的ActionBar的區域,是我們可以操縱的UI區域,那是不是說我們就不能改變除了這兩個區域的UI呢?答案是