Java用户类
如何解析java用户类和JDBC用户类?问题是当我用完put时,sql中有数据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();
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是这方面的性能杀手