0

我正在使用 SOAP WebServices 为 MySQL 数据库连接开发一个 Android 项目。

在我的数据库中,我有 3 个字段(用户名、密码、电子邮件)。

在这里,我插入 3 个用户的值。我为登录表单创建了一个网络服务代码。

登录表单代码为:

package com.userlogin.ws;

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

public class Login {
    public String authentication(String userName, String password) {

        String retrievedUserName = "";
        String retrievedPassword = "";
        String status = "";
        try {

            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/androidlogin", "root", "");
            PreparedStatement statement = con.prepareStatement("SELECT * FROM user WHERE username = '" + userName + "'");
            ResultSet result = statement.executeQuery();

            while (result.next()) {
                retrievedUserName = result.getString("username");
                retrievedPassword = result.getString("password");
            }

            if (retrievedUserName.equals(userName) && retrievedPassword.equals(password)) {
                status = "Success!";

            } else {
                status = "Login fail!!!";
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return status;

    }

}

忘记密码。网络服务代码是:

package com.userlogin.ws;

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

public class ForgetPassword {
    public String customerData(){
        String customerInfo = "";
        try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/androidlogin","root","");
            //Find customer information where the customer ID is maximum
            PreparedStatement statement =  con.prepareStatement("SELECT * FROM user WHERE username = (SELECT username FROM user)");
            ResultSet result = statement.executeQuery();

            while(result.next()){
                customerInfo = customerInfo + result.getString("username") + "&" + result.getString("password") + "&"+result.getString("email");
                //Here "&"s are added to the return string. This is help to split the string in Android application
            }
        }

        catch(Exception exc){
            System.out.println(exc.getMessage());
        }

        return customerInfo;
    }

}

如果我点击了忘记密码,应用程序应该启动下一个Activity.

下一个Activity应该要求电子邮件,id..

输入邮件 ID 后,它应该继续处理另一个Activity并仅显示该特定人员的密码。

我应该使用哪个查询?

4

3 回答 3

0

根据问题,无法完全说出您的确切含义,但根据您在代码中的评论说明

在客户 ID 最大的地方查找客户信息

然后您正在寻找最新用户的用户信息(假设您有一个自动递增的用户 ID,并且可以使用如下内容:

SELECT * FROM user AS u1, (SELECT MAX(id) AS maxid FROM user) AS m1 WHERE u1.id=m1.maxid;

或者你可以在没有子选择的情况下做到这一点

SELECT * FROM user ORDER BY id DESC LIMIT 1;

干杯

于 2012-07-19T07:23:05.167 回答
0

要获取特定的用户详细信息,

SELECT * FROM user WHERE username = 'XXX(Enter the name of the user)'

获取任一用户详细信息

SELECT * FROM user limit 1

使用电子邮件获取特定用户的密码

SELECT password FROM user where email = "XXX(Enter the email of the user)"
于 2012-07-19T07:13:36.013 回答
0

如果要获取具有最大 id 的用户:

SELECT max(id) as Max, id FROM user having id = Max

或者:

SELECT * FROM user ORDER BY id DESC LIMIT 1;

编辑:

如果我理解编辑后的问题*我不确定我是什么),那么您的问题就在这里:

"SELECT * FROM user WHERE username = (SELECT username FROM user)"

此代码选择数据库中的所有用户,这就是该代码仅适用于一个用户的原因。

在您的忘记密码中,您想使用给定的电子邮件更改用户的密码,所以它假设是这样的:

"SELECT * FROM user WHERE email=" + usersemail
于 2012-07-19T07:20:04.650 回答