通过JDBC-进行服务器查询数据库中用户名密码并使Android端用户成功登陆

Android端同之前

服务器端:

entity存放实体类

dao 数据访问对象,dao包中存放所有数据库相关操作,增删查改等

util 工具包,加载驱动链接数据库等

PreparedStatment 有两个方法executeUpdate(),用于进行更新操作

                                                executeQuery(),用于进行查询操作


命名规则如:cn.zt.dao,下图错

User:

可以有多个构造函数,这里下面会有只存放一个password得情况

package entity;

public class User {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public User(String password) {
		super();
		this.password = password;
	}
	

}

DBHelper:

没有成功登陆数据库则会报 空指针异常


下面不需要加rs.close()否则rs会释放掉,rs这个结果集中得数据存放到一个List中

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;



public class DBHelper {
	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	private void getConnection(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			System.out.println("Error: unable to load driver class!");//可以加入异常输出信息
			e.printStackTrace();
		}
		String url = "jdbc:mysql://localhost:3306/test";
		try {
			conn = DriverManager.getConnection(url,"root","7271603Zt");
		} catch (SQLException e) {
			System.out.println("Error: unable to login database");//可以加入异常输出信息
			e.printStackTrace();
		}
	}
	public void close(){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		if(ps!=null){
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}
	
	public ResultSet executePassword(String sql,Object...objects){//objects为一个参数数组
		this.getConnection();
		try {
			ps = conn.prepareStatement(sql);
			if(objects!=null){
				for(int i=0;i<objects.length;i++){
					ps.setObject(i+1, objects[i]);//填充下面LoginDao中sql语句中的?号的值
				}
			}
			return rs = ps.executeQuery();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} 
		
		return null;
	}

}

LoginDao:

这里rs用完后需要进行close

package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import entity.User;
import util.DBHelper;

public class LoginDao extends DBHelper {
	public List<User> getUserPassword(String usernmae){
		List<User> list = new ArrayList<User>();
		String sql = "select password from user where username =?";
		ResultSet rs = this.executePassword(sql, usernmae);
		try {
			while(rs.next()){
				list.add(new User(rs.getString(1)));
			}
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally{this.close();}
		return list;
	}
}

Servlet:

android端传json格式数据,post

package servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.LoginDao;
import entity.User;
import net.sf.json.JSON;
import net.sf.json.JSONObject;

/**
 * Servlet implementation class login
 */
@WebServlet("/login")
public class login extends HttpServlet {
	private String name=null;
	private String pwd=null;
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		 name=request.getParameter("name");         
         pwd=request.getParameter("pwd");  
        
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        
        System.out.println("name:"+name+"   pwd:"+pwd);  
        System.out.println(name.length());  
        
        LoginDao loginDao = new LoginDao();
        List<User> list = loginDao.getUserPassword(name);
        String pp=list.get(0).getPassword();
        System.out.println(pp);
        
        if(("admin").equals(name)&&(pwd).equals(pp)){
        	System.out.println("true");  
        	out.print("true");
        	
        }else{
        	System.out.print("false");
        	out.print("false");
        }
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		response.setContentType("text/html");
//        response.setCharacterEncoding("utf-8");
//        
//         name = request.getParameter("username");
//         pwd = request.getParameter("password");
//        System.out.println("name:"+name+"   pwd:"+pwd);  
//        System.out.println(name.length());  
//        
//        PrintWriter out = response.getWriter();
//        
//        if(("admin").equals(name)&&("admin").equals(pwd)){
//        	System.out.println("true");  
//        	out.print("true");
//        	
//        }else{
//        	System.out.print("false");
//        	out.print("false");
//        }
        
        String jsonString = getRequestBody(request);
        System.out.println(jsonString);

        JSONObject jsonObj = JSONObject.fromObject(jsonString);

        System.out.println(jsonObj);
        pwd = jsonObj.getString("password").toString();
        name = jsonObj.getString("username");
       
        System.out.println("name:"+name+"   pwd:"+pwd);   
        System.out.println(jsonObj.getString("username")); 
        System.out.println(name.length());  
        
        
        PrintWriter out = response.getWriter();
        LoginDao loginDao = new LoginDao();
        List<User> list = loginDao.getUserPassword(name);
        String pp=list.get(0).getPassword();
        System.out.println(pp);
        
        if(("admin").equals(name)&&(pwd).equals(pp)){
        	System.out.println("true");  
        	out.print("true");
        	
        }else{
        	System.out.print("false");
        	System.out.print("ff");
        	out.print("false");
        }
        
//        String jsonStr = "{\"password\":\"\",\"username\":\"张三\"}";
//        System.out.println(jsonStr);
//        JSONObject jsonObj2 = JSONObject.fromString(jsonStr);
//        String uu = jsonObj2.getString("username");
//        String pp = jsonObj2.optString("password");
//        System.out.println(uu);  
//        System.out.println(pp);  
	}
	
	
	public static String getRequestBody(HttpServletRequest req) throws IOException {
	    BufferedReader reader = req.getReader();
	    String input = null;
	    StringBuffer requestBody = new StringBuffer();
	    while((input = reader.readLine()) != null) {
	    requestBody.append(input);
	    }
	    return requestBody.toString();
	    }

}




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是Android登录和注册用户名密码并连接MySQL8.0的详细代码步骤: 1. 在MySQL8.0数据库创建一个名为“users”的表。该表应含以下字段:id(int,自动增长),username(varchar),password(varchar)。 2. 在Android Studio创建一个新项目并添加以下依赖项: ``` implementation 'com.android.volley:volley:1.2.0' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' ``` 3. 在Android Studio创建两个活动:LoginActivity和RegisterActivity。 4. 在LoginActivity,创建一个布局,含EditText控件,用于输入用户名密码。还需要一个登录按钮,该按钮将触发验证用户凭据的操作。 5. 在RegisterActivity,创建一个布局,含EditText控件,用于输入用户名密码。还需要一个注册按钮,该按钮将触发将用户凭据插入到MySQL数据库的操作。 6. 在AndroidManifest.xml文件添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 7. 在AndroidManifest.xml文件添加以下活动: ``` <activity android:name=".LoginActivity"/> <activity android:name=".RegisterActivity"/> ``` 8. 在LoginActivity,添加以下代码以验证用户凭据: ```java private void login() { //从EditText获取用户名密码 final String username = editTextUsername.getText().toString().trim(); final String password = editTextPassword.getText().toString().trim(); //创建一个StringRequest,用于向MySQL服务器发送POST请求 StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { if (response.trim().equals("success")) { //如果用户名密码正确,将用户重定向到主活动 Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent); } else { //如果用户名密码不正确,显示错误消息 Toast.makeText(LoginActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { //如果出现错误,显示错误消息 Toast.makeText(LoginActivity.this, error.toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { //将参数传递给POST请求 Map<String, String> params = new HashMap<>(); params.put("username", username); params.put("password", password); return params; } }; //将StringRequest添加到Volley请求队列 RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); } ``` 9. 在RegisterActivity,添加以下代码以将用户凭据插入到MySQL数据库: ```java private void register() { //从EditText获取用户名密码 final String username = editTextUsername.getText().toString().trim(); final String password = editTextPassword.getText().toString().trim(); //创建一个StringRequest,用于向MySQL服务器发送POST请求 StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(RegisterActivity.this, response, Toast.LENGTH_LONG).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(RegisterActivity.this, error.toString(), Toast.LENGTH_LONG).show(); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { //将参数传递给POST请求 Map<String, String> params = new HashMap<>(); params.put("username", username); params.put("password", password); return params; } }; //将StringRequest添加到Volley请求队列 RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); } ``` 10. 在MySQL服务器上创建一个名为“login.php”的文件,该文件将验证用户凭据。在该文件,添加以下代码: ```php <?php $con = mysqli_connect("localhost", "root", "", "testdb") or die("Unable to connect"); $username = $_POST["username"]; $password = $_POST["password"]; $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($con, $sql) or die("Query failed"); if (mysqli_num_rows($result) > 0) { echo "success"; } else { echo "failure"; } mysqli_close($con); ?> ``` 11. 在MySQL服务器上创建一个名为“register.php”的文件,该文件将将用户凭据插入到MySQL数据库。在该文件,添加以下代码: ```php <?php $con = mysqli_connect("localhost", "root", "", "testdb") or die("Unable to connect"); $username = $_POST["username"]; $password = $_POST["password"]; $sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')"; $result = mysqli_query($con, $sql) or die("Query failed"); if ($result) { echo "Registration successful"; } else { echo "Registration failed"; } mysqli_close($con); ?> ``` 以上就是Android登录和注册用户名密码并连接MySQL8.0的详细代码步骤。 ### 回答2: 实现Android应用登录和注册功能需要以下步骤: 1. 创建Android项目并配置环境。首先,在Android Studio创建一个新的Android项目。然后在Gradle文件添加MySQL连接驱动的依赖项,例如:`implementation 'mysql:mysql-connector-java:8.0.23'`。这将使应用能够连接到MySQL数据库。 2. 创建登录和注册界面。设计和创建一个用户界面,用户名密码输入框以及登录和注册按钮。 3. 实现MySQL连接类。创建一个用于连接和执行MySQL查询的Java类。在该类,使用以下代码示例连接到MySQL数据库: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MySQLConnection { private static final String URL = "jdbc:mysql://<MySQL服务器地址>:<口号>/<数据库名称>?useSSL=false"; private static final String USERNAME = "<数据库用户名>"; private static final String PASSWORD = "<数据库密码>"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USERNAME, PASSWORD); } } ``` 替换<MySQL服务器地址>、<口号>、<数据库名称>、<数据库用户名>和<数据库密码>为你要连接的MySQL数据库的相关信息。 4. 实现登录功能。在登录按钮的点击事件处理方法,获取用户输入的用户名密码。通过调用MySQLConnection类的getConnection方法连接到MySQL数据库,并执行查询以验证用户名密码是否匹配。如果查询返回结果为非空,则登录成功。否则,显示登录失败的提示信息。 5. 实现注册功能。在注册按钮的点击事件处理方法,获取用户输入的用户名密码。通过调用MySQLConnection类的getConnection方法连接到MySQL数据库,并执行插入操作将用户名密码保存到数据库。 需要注意的是,在实际开发,为保证安全性,还需要对用户输入进行必要的验证和加密处理。 以上是一个简单的Android登录和注册功能的实现步骤,具体的实现细节还可以根据实际需求进行调整和扩展。 ### 回答3: Android 登录和注册用户名密码并连接 MySQL 8.0 的代码步骤如下: 1. 配置项目环境: - 确保已在项目的 build.gradle 文件添加了 MySQL JDBC 驱动依赖。 - 配置网络权限和数据存储权限。 2. 创建布局文件: - 创建登录页面布局文件(login_layout.xml),用户名密码输入框以及登录按钮。 - 创建注册页面布局文件(register_layout.xml),用户名密码和确认密码输入框以及注册按钮。 3. 创建数据库: - 在 MySQL 数据库创建一个用户表,用户名密码两个字段。 4. 创建 Java 类: - 创建一个名为 DBHelper 的类,用于建立数据库连接并存储一些辅助方法,如获取数据库连接、新增用户、验证用户等。 - 创建一个名为 LoginActivity 的类,用于实现登录功能,括输入用户名密码和验证的逻辑。 - 创建一个名为 RegisterActivity 的类,用于实现注册功能,括输入用户名密码和确认密码、验证和保存用户信息的逻辑。 5. 在 LoginActivity 实现登录功能: - 在 onCreate() 方法获取用户名密码输入框的引用,并设置登录按钮的点击监听器。 - 在登录按钮的点击监听器,获取用户名密码的值,并传递给 DBHelper 类的验证方法。 - DBHelper 类的验证方法通过执行 SQL 语句查询数据库用户表,判断用户名密码是否匹配。 - 根据验证结果,在登录按钮的点击监听器处理登录成功或失败的逻辑。 6. 在 RegisterActivity 实现注册功能: - 在 onCreate() 方法获取用户名密码和确认密码输入框的引用,并设置注册按钮的点击监听器。 - 在注册按钮的点击监听器,获取用户名密码和确认密码的值,并传递给 DBHelper 类的添加用户方法。 - DBHelper 类的添加用户方法通过执行 SQL 语句将新用户信息插入到数据库用户表。 - 根据插入结果,在注册按钮的点击监听器处理注册成功或失败的逻辑。 7. 编译和运行应用程序。 以上是连接 MySQL 8.0 实现 Android 登录和注册用户名密码的详细代码步骤,希望对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值