@Override public void sureUpPassword(String userAccount, String userPassword) { String sql = update person set userPassword = +userPassword+ where userAccount= +userAccount+ ;
时间: 2024-03-01 22:50:50 浏览: 21
这段代码存在 SQL 注入漏洞,应该使用 PreparedStatement 来避免。正确的代码应该是:
```
@Override
public void sureUpPassword(String userAccount, String userPassword) {
String sql = "UPDATE person SET userPassword = ? WHERE userAccount = ?";
try (Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, userPassword);
ps.setString(2, userAccount);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
```
这样可以防止用户恶意输入特殊字符导致 SQL 注入攻击。
相关问题
package cm.stu.service; import cm.stu.bean.Person; import cm.stu.dao.ManageDao; import cm.stu.dao.ManageDaoImpl; import java.util.List; public class ManageServiceImpl implements ManageService { ManageDao md = new ManageDaoImpl(); @Override public List<Person> getAllPerson() { return md.getAllPerson(); } @Override public List<Person> getSearch(String matchText) { return md.getSearch(matchText); } @Override public void addPerson(Person newPerson) { try { md.addPerson(newPerson); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void sureUpPassword(String userAccount, String userPassword) { md.sureUpPassword(userAccount,userPassword); } @Override public void delThisPerson(String delAccount, String userIdentify) { md.delThisPerson(delAccount,userIdentify); } }
这段代码是一个实现了 ManageService 接口的类 ManageServiceImpl,它主要实现了对 Person 对象的增删改查操作。其中 ManageDao 是一个数据访问对象的接口,ManageDaoImpl 是其实现类,通过调用 ManageDaoImpl 中的方法实现对数据库中 Person 表的操作。具体来说,getAllPerson() 方法返回所有 Person 对象的列表,getSearch(String matchText) 方法返回与 matchText 相匹配的 Person 对象的列表,addPerson(Person newPerson) 方法向数据库中添加一个新的 Person 对象,sureUpPassword(String userAccount, String userPassword) 方法更新指定用户的密码,delThisPerson(String delAccount, String userIdentify) 方法删除指定用户的信息。
BroadcastReceiver receiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String account=intent.getStringExtra("account"); String password=intent.getStringExtra("password"); } };执行了之后执行Cursor cursor= db.rawQuery("select*from user where account=?",new String[]{account});出错
这个错误很可能是因为 `account` 变量没有被正确地传递到 `db.rawQuery()` 方法中。这是因为 `account` 变量是在 `onReceive()` 方法中被定义的,而 `db.rawQuery()` 方法是在 `onReceive()` 方法之外调用的。因此,`account` 变量的作用域仅限于 `onReceive()` 方法内部。
要解决这个问题,您可以在 `onReceive()` 方法中将 `account` 变量存储在类成员变量中,并在 `db.rawQuery()` 方法中使用该成员变量。例如:
```
public class MyBroadcastReceiver extends BroadcastReceiver {
private String account;
@Override
public void onReceive(Context context, Intent intent) {
account = intent.getStringExtra("account");
String password = intent.getStringExtra("password");
// ... 其他代码 ...
}
private void doDatabaseQuery() {
Cursor cursor = db.rawQuery("select * from user where account = ?", new String[]{account});
// ... 其他代码 ...
}
}
```
请注意,这里使用了一个名为 `MyBroadcastReceiver` 的类,而不是您在问题中提到的匿名内部类。这是因为使用匿名内部类可能会导致其他作用域问题,并且不易于重用代码。