1.数据库准备
create database whoere; //创建数据库 use whoere; create table email( //创建数据表,根据需要自行定义,比如基本的账号密码,我还设置了经纬度用于获取用户的位置 `id` int unsigned auto_increment, `account` varchar(20) not null, `password` varchar(20) not null, `Latitude` double, `Longitude` double, `Intention` varchar(100), primary key(`id`) )engine=InnoDB default charset=utf8;
设置模拟数据(随意):
2.转战NetBeans(各种IDE都可以啦,比如Eclipse、Ij之类的)
安装过程我就不废话了,直接撸码!(需要用到的jar包也放在百度云了,记得导入库中哦)
首先是User类,都是基本的get和set函数。
package net.whoere; /** * * @author SuSu */ public class User { //账户(email) private String account; //密码 private String password; //经度 private double Latitude; //纬度 private double Longitude; //意图 private String Intention; public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public double getLatitude(){ return Latitude; } public void setLatitude(double Latitude){ this.Latitude = Latitude; } public double getLongitude(){ return Longitude; } public void setLongitude(double Longitude){ this.Longitude = Longitude; } public String getIntention(){ return Intention; } public void setIntention(String Intention){ this.Intention = Intention; } }
接着是DBManager类,实现数据库的连接与关闭。
package net.whoere; /** * * @author SuSu */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; public class DBManager extends HttpServlet { ServletConfig config; //定义一个ServletConfig对象 private static String username; //定义数据库用户名 private static String password; //定义数据库连接密码 private static String url; //定义数据库连接URL private static Connection connection; //定义连接 @Override public void init(ServletConfig config) throws ServletException { super.init(config); //继承父类的init()方法 this.config = config; //获取配置信息 username = config.getInitParameter("DBUsername"); //获取数据库用户名 password = config.getInitParameter("DBPassword"); //获取数据库连接密码 url = config.getInitParameter("ConnectionURL"); //获取数据库连接URL } //连接数据库 public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } return connection; } //关闭连接,ResultSet是返回数据库的查询内容。 public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } } //没有ResultSet的是关闭修改、增加数据操作(因为不用返回结果) public static void closeAll(Connection connection, Statement statement) { try { if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException ex) { Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex); } } }
UserDAO类
package net.whoere; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import net.sf.json.JSONObject; /** * * @author SuSu */ public class UserDAO { //查询账户是否存在,存在返回具体User对象,否则为空。 public static User queryUser(String account) { //连接数据库 Connection connection = DBManager.getConnection(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; //SQL查询语句 StringBuilder sqlStatement = new StringBuilder(); sqlStatement.append("select * from email where account=?"); //问号?的地方会被account替换 //设置数据库的字段值 try { preparedStatement = connection.prepareStatement(sqlStatement.toString()); preparedStatement.setString(1, account); resultSet = preparedStatement.executeQuery(); //执行查找语句,获得返回信息 User user = new User(); if (resultSet.next()) { //生成User对象并返回 user.setAccount(resultSet.getString("account")); //设置账户、密码,根据返回的内容还可以设置其他信息 user.setPassword(resultSet.getString("password")); return user; } else { return null; } } catch (SQLException ex) { Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex); return null; } finally { DBManager.closeAll(connection, preparedStatement, resultSet); //关闭连接 } } //查询其他用户的信息,返回json格式,内容包括账号,位置,意图。 public static JSONObject queryUser() { String sql1="select account,Latitude,Longitude,Intention from whoere.email"; //sql语句 Connection connection = DBManager.getConnection(); PreparedStatement preparedStatement = null; Map<String, String> message = new HashMap<>(); JSONObject jsonObject = new JSONObject(); try { preparedStatement = connection.prepareStatement(sql1); } catch (SQLException ex) { Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex); } ResultSet resultSet = null; try { resultSet = preparedStatement.executeQuery(); for(int i = 1;resultSet.next();i++) { message.put("account", resultSet.getString("account")); message.put("Latitude", ""+resultSet.getDouble("Latitude")); message.put("Longitude", ""+resultSet.getDouble("Longitude")); message.put("Intention", resultSet.getString("Intention")); jsonObject.put(i, message); } } catch (SQLException ex) { Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex); } DBManager.closeAll(connection, preparedStatement, resultSet); return jsonObject; } //修改位置信息 public static void UpdateLocation(String account,String Latitude,String Longitude) { Connection connection = DBManager.getConnection(); PreparedStatement preparedStatement = null; //生成SQL代码 StringBuilder sqlStatement = new StringBuilder(); sqlStatement.append("update whoere.email set Latitude = ? ,Longitude = ? where account = ?"); //设置数据库的字段值 try { preparedStatement = connection.prepareStatement(sqlStatement.toString()); preparedStatement.setString(1, Latitude); preparedStatement.setString(2, Longitude); preparedStatement.setString(3, account); preparedStatement.executeUpdate(); } catch (SQLException ex) { } finally { DBManager.closeAll(connection, preparedStatement); } } //实现注册账号功能(还有些问题!) public static void Register(String account,String password){ //获得数据库的连接对象 Connection connection = DBManager.getConnection(); PreparedStatement preparedStatement = null; //生成SQL代码 StringBuilder sqlStatement = new StringBuilder(); sqlStatement.append("insert into whoere.email (account,password) values (?,?)"); //设置数据库的字段值 try { preparedStatement = connection.prepareStatement(sqlStatement.toString()); preparedStatement.setString(1, account); preparedStatement.setString(2, password); preparedStatement.executeUpdate(); } catch (SQLException ex) { } finally { DBManager.closeAll(connection, preparedStatement); } } }
接着我们先建立一个LoginServlet吧,用于登录
package net.whoere; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; /** * * @author SuSu */ public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); try (PrintWriter out = response.getWriter()) { //获得请求中传来的用户名和密码 String account = request.getParameter("account").trim(); String password = request.getParameter("password").trim(); //密码验证结果 Boolean verifyResult = verifyLogin(account, password); Map<String, String> params = new HashMap<>(); JSONObject jsonObject = new JSONObject(); if (verifyResult) { params.put("Result", "success"); } else { params.put("Result", "failed"); } jsonObject.put("params", params); out.write(jsonObject.toString()); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } //验证用户名密码是否正确 private Boolean verifyLogin(String userName, String password) { User user = UserDAO.queryUser(userName); //账户密码验证 return null != user && password.equals(user.getPassword()); } }
(持续更新中!)