Java用户类
我如何解析java用户类和JDBC用户类? 问题是当我用完时输出的是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();
每次为user
分配一个新对象时,都会丢失旧对象。 更好的可能性是使用LinkedList:
List users = new LinkedList (); 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); }
提供类的完全限定名称以避免命名冲突。
对于Ex:
com.me.package.User objUser = new com.me.package.User();
其中User是驻留在com.me.package包中的类
尝试更仔细地查看您的查询,这对我来说似乎不对。
还可以使用Prepared Statement来避免Sql注入
上面的代码似乎是错误的。 您正在尝试创建和初始化同一个对象
user = new User();
结果集一遍又一遍。 而是使用数组列表
public User authentication(String eMail, String password) { try { ArrayList user_set = new ArrayList (); 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; }
我想你只想要一个用户登录。为此,你的查询是错误的。 你应该这样做:
"SELECT * FROM User,Role WHERE (user.id=role.id) AND (user.email='" + eMail + "')"
这将只为您提供您传递的电子邮件地址的用户。
但是还有另一种方法可以实现您的目标而不会冒SQL注入的风险。 你可以保留你的程序。 您只需在循环中添加一个简单的行,就在右大括号之前:
if (user.getEMail().equals(eMail)) break;
该行可以在找到正确的用户后退出循环。 所以你会回来正确的。