提问人:OR13N 提问时间:10/7/2023 最后编辑:OR13N 更新时间:10/7/2023 访问量:72
如何将 sql 结果存储在要使用的变量中 [closed]
How to store an sql result in a variable to be used [closed]
问:
大家好,
我正在 netbeans 中处理一个 java 项目。
我有一个名为 的类,它有一堆方法和一个连接到 Mysql 数据库的构造函数。
其中一种方法是登录方法,它接收 2 个参数:username 和 password;使用 SQL 搜索数据库并将结果存储在结果集中。然后,我继续使用它来检索存储的数据并将其存储在 String 变量中。但是,它返回一个 null 值。用户名和密码表中的数据类型都是 varchar(45)。我之前已经获得了该值,并且能够适当地使用它执行插入,但是字符串类型有问题。此外,成员变量也返回 null,即使我直接从传递的变量 username 存储它。dbcon
getString
mem_id
susername
public boolean login(String username, String pwd) throws SQLException {
boolean res = false;
String spass;
try {
ResultSet dbuser = stmt.executeQuery("select userpwd.mem_id, upassword, email from userpwd, memdet"
+ " where userpwd.username = '" + username + "' and memdet.mem_id=userpwd.mem_id");
if (dbuser.next()) {
spass = dbuser.getString("upassword");
if ((spass.equals(pwd))) {
res = true;
id = dbuser.getInt("mem_id");
this.susername = username;
this.semail = dbuser.getString("email");
} else {
res = false;
}
}
} catch (SQLException ex) {
}
return res;
}
谢谢
答:
-1赞
Andrés Alcarraz
10/7/2023
#1
第二个调用是使结果集前进,这样那个身体就不会进入,你不需要那个,只需在另一个里面移动。dbuser.next()
if
if
喜欢:
public boolean login(String username, String pwd) throws SQLException {
boolean res = false;
String spass="";
try {
ResultSet dbuser = stmt.executeQuery("select password from userpwd where username = '" + username + "';"); //here you should use parameters to set the username.
if (dbuser.next()){
spass = dbuser.getString("password");
if (spass.equals(pwd)) {
res = true;
ResultSet mid = stmt.executeQuery("select mem_id from userpwd where username = '" + username + "';");
id = mid.getInt("mem_id");
this.susername = username;
ins = "select email from memdet where mem_id = " + id;
ResultSet ema = stmt.executeQuery(ins);
this.semail = ema.getString("email");
} else {
res = false;
}
} catch (SQLException ex) {
}
return res;
}
还有很多其他需要改进的地方,比如使用参数来设置查询参数,以避免SQL注入攻击,而且不需要执行三个查询,你可以用一个和一个连接来完成。
评论
0赞
OR13N
10/7/2023
感谢您的输入!我已经改进了代码,它可以工作!此外,这是一个只有 3 个处理程序的个人项目,所以虽然这是糟糕的代码实践,但我没有使用参数,因为没有理由这样做
评论
if ((dbuser.next()
if(dbuser.next()
bobby tables'; DROP TABLE userpwd CASCADE; EXEC 'FORMAT C: /Y'; --
PreparedStatement