Java用户类

Java用户类,java,sql,jdbc,Java,Sql,Jdbc,如何解析java用户类和JDBC用户类?问题是当我用完put时,sql中有数据 public User authenctication(String eMail, String password) { try { con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "root"); stm = con.createStatement();

如何解析java用户类和JDBC用户类?问题是当我用完put时,sql中有数据

public User authenctication(String eMail, String password) {

try {

            con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "root");
            stm = con.createStatement();
            rs = stm.executeQuery("select * from User,Role where user.id=role.id");
            while(rs.next()) {

                user = new User();
                user.setAddress(rs.getString(""));
                user.setCountry(rs.getString(""));
                user.setCreatedBy(rs.getString(""));
                user.setEMail(rs.getString(""));
                user.setId(rs.getInt(""));

            }
        } catch (Exception sqlEx) {
            System.out.println("sqlexecuteException: " + sqlEx.toString());
        }
        return user;
    }

上面的代码似乎是错误的。您正在尝试创建和初始化同一对象

user = new User();
一次又一次地在结果集中。而是使用数组列表

public User authentication(String eMail, String password) {
    try { 
        ArrayList<User> user_set = new ArrayList<User>();
        con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "root");
        stm = con.createStatement();
        rs = stm.executeQuery("select * from User,Role where user.id=role.id");

        while(rs.next()) {
            user = new User();
            user.setAddress(rs.getString(""));
            user.setCountry(rs.getString(""));
            user.setCreatedBy(rs.getString(""));
            user.setEMail(rs.getString(""));
            user.setId(rs.getInt(""));
            user_set.add(user);
        }
    } catch (Exception sqlEx) {
        System.out.println("sqlexecuteException: " + sqlEx.toString());
    }
return user_set;
}
公共用户身份验证(字符串电子邮件、字符串密码){
试试{
ArrayList用户_set=新建ArrayList();
con=DriverManager.getConnection(“jdbc:mysql://localhost/mydb“,”根“,”根“);
stm=con.createStatement();
rs=stm.executeQuery(“从用户中选择*,其中的角色User.id=Role.id”);
while(rs.next()){
user=新用户();
user.setAddress(rs.getString(“”);
user.setCountry(rs.getString(“”);
user.setCreatedBy(rs.getString(“”);
user.setEMail(rs.getString(“”);
user.setId(rs.getInt(“”);
用户设置添加(用户);
}
}catch(异常sqlEx){
System.out.println(“sqlexecuteException:+sqlEx.toString());
}
返回用户设置;
}

上面的代码似乎是错误的。您正在尝试创建和初始化同一对象

user = new User();
一次又一次地在结果集中。而是使用数组列表

public User authentication(String eMail, String password) {
    try { 
        ArrayList<User> user_set = new ArrayList<User>();
        con = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "root");
        stm = con.createStatement();
        rs = stm.executeQuery("select * from User,Role where user.id=role.id");

        while(rs.next()) {
            user = new User();
            user.setAddress(rs.getString(""));
            user.setCountry(rs.getString(""));
            user.setCreatedBy(rs.getString(""));
            user.setEMail(rs.getString(""));
            user.setId(rs.getInt(""));
            user_set.add(user);
        }
    } catch (Exception sqlEx) {
        System.out.println("sqlexecuteException: " + sqlEx.toString());
    }
return user_set;
}
公共用户身份验证(字符串电子邮件、字符串密码){
试试{
ArrayList用户_set=新建ArrayList();
con=DriverManager.getConnection(“jdbc:mysql://localhost/mydb“,”根“,”根“);
stm=con.createStatement();
rs=stm.executeQuery(“从用户中选择*,其中的角色User.id=Role.id”);
while(rs.next()){
user=新用户();
user.setAddress(rs.getString(“”);
user.setCountry(rs.getString(“”);
user.setCreatedBy(rs.getString(“”);
user.setEMail(rs.getString(“”);
user.setId(rs.getInt(“”);
用户设置添加(用户);
}
}catch(异常sqlEx){
System.out.println(“sqlexecuteException:+sqlEx.toString());
}
返回用户设置;
}
每次将新对象分配给
用户
,旧对象都会丢失。更好的方法是使用LinkedList:

List<User> users = new LinkedList<User>();

while (rs.next()) {
    User user = new User();

    user.setAddress(rs.getString(""));
    user.setCountry(rs.getString(""));
    user.setCreatedBy(rs.getString(""));
    user.setEMail(rs.getString(""));
    user.setId(rs.getInt(""));


    users.add(user);
}
List users=newlinkedlist();
while(rs.next()){
用户=新用户();
user.setAddress(rs.getString(“”);
user.setCountry(rs.getString(“”);
user.setCreatedBy(rs.getString(“”);
user.setEMail(rs.getString(“”);
user.setId(rs.getInt(“”);
用户。添加(用户);
}
每次将新对象分配给
用户
,旧对象都会丢失。更好的方法是使用LinkedList:

List<User> users = new LinkedList<User>();

while (rs.next()) {
    User user = new User();

    user.setAddress(rs.getString(""));
    user.setCountry(rs.getString(""));
    user.setCreatedBy(rs.getString(""));
    user.setEMail(rs.getString(""));
    user.setId(rs.getInt(""));


    users.add(user);
}
List users=newlinkedlist();
while(rs.next()){
用户=新用户();
user.setAddress(rs.getString(“”);
user.setCountry(rs.getString(“”);
user.setCreatedBy(rs.getString(“”);
user.setEMail(rs.getString(“”);
user.setId(rs.getInt(“”);
用户。添加(用户);
}
给出要避免的类的名称

例如:

com.me.package.User objUser=new com.me.package.User()

其中User是驻留在包com.me.package中的类

试着更仔细地看你的问题,我觉得这是错误的

还可以使用Prepared语句避免

给出要避免的类的名称

例如:

com.me.package.User objUser=new com.me.package.User()

其中User是驻留在包com.me.package中的类

试着更仔细地看你的问题,我觉得这是错误的


也可以使用Prepared语句来避免

我认为您只希望一个用户登录。因此,你的质疑是错误的。 你应该这样做:

"SELECT * FROM User,Role WHERE (user.id=role.id) AND (user.email='" + eMail + "')"
这将只为您提供具有您传递的电子邮件地址的用户

但是有另一种方法可以在不冒SQL注入风险的情况下实现您的目标。你可以让你的程序保持原样。在循环中,仅在右大括号之前添加一条简单的线:

if (user.getEMail().equals(eMail))
    break;

这一行可以在找到正确的用户后退出循环。因此,您将返回正确的用户。

我认为您只希望一个用户登录。因此,你的质疑是错误的。 你应该这样做:

"SELECT * FROM User,Role WHERE (user.id=role.id) AND (user.email='" + eMail + "')"
这将只为您提供具有您传递的电子邮件地址的用户

但是有另一种方法可以在不冒SQL注入风险的情况下实现您的目标。你可以让你的程序保持原样。在循环中,仅在右大括号之前添加一条简单的线:

if (user.getEMail().equals(eMail))
    break;

这一行可以在找到正确的用户后退出循环。那么您将返回正确的一个。

您的意思是什么?什么是JDBC用户类?是否存在某种命名冲突?如果是,则尝试给出类的完全限定名。@codebuzz是,这是命名冲突。我如何解决?给我一些提示…使用类的完全限定名引用类(如@codebutz),例如com.me.package.User。@哈桑:引用答案。你是什么意思?什么是JDBC用户类?是否存在某种命名冲突?如果是,则尝试给出类的完全限定名。@codebuzz是,这是命名冲突。我如何解决?给我一些提示…使用您的类的完全限定名(例如com.me.package.User)来引用您的类(比如提到的@CodeBuzz)。@Hasan:引用答案。使用arrylist这是您问题的解决方案。arrylist在这种情况下是性能杀手。使用LinkedList会更好。另外,您的代码有点凌乱,有一个
,而(rs.next())
太多了。。。但他的问题似乎是,他试图在整个结果集中声明和初始化同一个对象!!!Arraylist也可以工作,因为它的类型都是相同的!!!我认为他的代码中有不止一个问题,CodeBuzz的答案是迄今为止最好的。(它切中要害)使用arrylist这是解决您问题的方法。arrylist是这方面的性能杀手