1、创建数据库、表:
2、项目结构:
3、数据库连接工具类 DBUtil :
public class DBUtil {
// table,对应数据库的表
public static final String TABLE_PASSWORD = "account";
public static final String TABLE_USERINFO = "userinfo";
// connect to MySql database
public static Connection getConnect() {
String url = "jdbc:mysql://localhost:3306/android"; // 数据库的Url,android代表数据库名
Connection connecter = null;
try {
Class.forName("com.mysql.jdbc.Driver"); // java反射,固定写法
//root 是数据库的账户名称,123456是账户密码,改为自己的
connecter = (Connection) DriverManager.getConnection(url, "root", "123456");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
return connecter;
}
}
4、处理注册的 Servlet :
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// response.getWriter().append("Served at: ").append(request.getContextPath());
String account = request.getParameter("account"); // 从 request 中获取名为 account 的参数的值
String password = request.getParameter("password"); // 从 request 中获取名为 password 的参数的值
System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看
String resCode = "";
String resMsg = "";
String userId = "";
/* 这里我们做一个最简单的注册逻辑,当然,你的实际业务可以相当复杂 */
try {
Connection connect = DBUtil.getConnect();
Statement statement = (Statement) connect.createStatement(); // Statement可以理解为数据库操作实例,对数据库的所有操作都通过它来实现
ResultSet result;
String sqlQuery = "select * from " + DBUtil.TABLE_PASSWORD + " where userAccount='" + account + "'";
// 查询类操作返回一个ResultSet集合,没有查到结果时ResultSet的长度为0
result = statement.executeQuery(sqlQuery); // 先查询同样的账号(比如手机号)是否存在
if(result.next()){ // 已存在
resCode = "201";
resMsg = "该账号已注册,请使用此账号直接登录或使用其他账号注册";
userId = "";
} else { // 不存在
String sqlInsertPass = "insert into " + DBUtil.TABLE_PASSWORD + "(userAccount,userPassword) values('"+account+"','"+password+"')";
// 更新类操作返回一个int类型的值,代表该操作影响到的行数
int row1 = statement.executeUpdate(sqlInsertPass); // 插入帐号密码
if(row1 == 1){
String sqlQueryId = "select userId from " + DBUtil.TABLE_PASSWORD + " where userAccount='" + account + "'";
ResultSet result2 = statement.executeQuery(sqlQueryId); // 查询新增记录的userId
if(result2.next()){
userId = result2.getInt("userId") + "";
}
int new_userId=Integer.valueOf(userId);
String sqlInsertInfo = "insert into " + DBUtil.TABLE_USERINFO + "(userId) values('" + new_userId + "')";
int row2 = statement.executeUpdate(sqlInsertInfo); // 在用户信息表中插入刚注册的Id
if(row2 == 1){ // 两个表中都插入成功,从业务角度认定为注册成功
resCode = "100";
resMsg = "注册成功";
}
} else {
resCode = "202";
resMsg = "用户信息表插入错误";
userId = "";
}
}
} catch (SQLException e) {
e.printStackTrace();
}
HashMap<String, String> map = new HashMap<>();
map.put("resCode", resCode);
map.put("resMsg", resMsg);
map.put("userId", userId);
response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
PrintWriter pw = response.getWriter(); // 获取 response 的输出流
pw.println(map.toString()); // 通过输出流把业务逻辑的结果输出
pw.flush();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5、处理登陆的 Servlet :
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = "";
String message = "";
String account = request.getParameter("account");
String password = request.getParameter("password");
log(account + ";" + password);
Connection connect = DBUtil.getConnect();
try {
Statement statement = (Statement) connect.createStatement();
String sql = "select userId from " + DBUtil.TABLE_PASSWORD + " where userAccount='" + account
+ "' and userPassword='" + password + "'";
log(sql);
ResultSet result = statement.executeQuery(sql);
if (result.next()) { // 能查到该账号,说明已经注册过了
code = "200";
message = "登陆成功";
} else {
code = "100";
message = "登录失败,密码不匹配或账号未注册";
}
} catch (SQLException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式,避免浏览器中输出乱码问题
response.getWriter().append("code:").append(code).append(";message:").append(message);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
6、运行测试:
浏览器中输入要注册的账号、密码:
通过 Navicat 查看数据库表内容:
浏览器中输入要登录的账号、密码:
服务端环境搭建、编程到此结束,下面是客户端的编程,请看下篇文章~
♥ 喜 欢 请 点 赞 哟 ♥ |
(●ˇ∀ˇ●) |