String sql1="delete from parkingspace上传 where 经度 ='"+MySQL1.c[MySQL1.j-1][0]+"'and 纬度 ='"+MySQL1.c[MySQL1.j-1][1]+"' and 车位上传者 ='"+MySQL1.c[MySQL1.j-1][2]+"'"; ResultSet rs = db.stmt.executeUpdate(sql1);为什么报错
时间: 2024-03-25 18:38:20 浏览: 104
在Java中,executeUpdate()方法返回的是一个int类型的值,表示被修改的行数,而不是一个ResultSet对象。因此,将executeUpdate()方法的返回值赋给ResultSet对象会导致编译错误。
正确的写法是将executeUpdate()方法的返回值赋给一个int类型的变量,例如:
```
String sql1 = "DELETE FROM parkingspace上传 WHERE 经度 = '" + MySQL1.c[MySQL1.j-1][0] + "' AND 纬度 = '" + MySQL1.c[MySQL1.j-1][1] + "' AND 车位上传者 = '" + MySQL1.c[MySQL1.j-1][2] + "'";
int rows = db.stmt.executeUpdate(sql1);
```
上述代码中,将executeUpdate()方法的返回值赋给了一个名为rows的int类型变量,表示被修改的行数。这样就可以通过rows变量来获取执行结果了。如果rows的值大于0,说明删除成功;如果rows的值等于0,说明没有匹配的行被删除。如果出现异常,可以通过捕获SQLException来处理。
需要注意的是,SQL语句中的参数应该使用占位符,而不是直接拼接字符串,以避免SQL注入攻击。
相关问题
@Override public void delThisPerson(String delAccount, String userIdentify) { if(Integer.parseInt(userIdentify)==0){ //删除学生 String sql = "DELETE FROM userteacher WHERE `userAccount` = '"+delAccount+"'"; Deal.deal(sql); sql = "DELETE FROM studenttask WHERE studentAccount = '"+delAccount+"'"; Deal.deal(sql); }else{ //删除老师 String sql = "DELETE FROM `studenttask` WHERE taskAccount IN (SELECT taskAccount FROM task WHERE teacherAccount='"+delAccount+"')"; Deal.deal(sql); sql = "DELETE FROM task WHERE teacherAccount = '"+delAccount+"'"; Deal.deal(sql); sql = "DELETE FROM userteacher WHERE teacherAccount = '"+delAccount+"'"; Deal.deal(sql); } String sql = "DELETE FROM person WHERE userAccount = '"+delAccount+"'"; Deal.deal(sql); } }
这段代码实现了 `ManageDao` 接口中的 `delThisPerson` 方法。该方法的作用是删除指定账号和身份类型的人员信息。具体实现如下:
1. 首先,通过传入的 `userIdentify` 参数判断账号身份类型。如果为 0,则表示学生账号,否则为教师账号。
2. 根据不同的身份类型,分别执行不同的删除操作。
3. 在删除操作完成后,最后执行一条语句删除 `person` 表中对应账号的记录。
需要注意的是,这里使用了 `Deal` 类的 `deal` 方法执行 SQL 语句,具体实现可能涉及到数据库连接等操作,这里无法确定。
下面三种方式,哪种是推荐的写法 方法一: stmt=conn.createStatement(); stmt.execute("select * from tab1 where id=" + id); 方法二: String sql="delete from jdbc_users where id=?"; pstmt=conn.prepareStatement(sql); pstmt.setInt(1, id); 方法三: String sql="delete from jdbc_users where id=" + id; pstmt=conn.prepareStatement(sql);
推荐使用方法二:
```
String sql = "delete from jdbc_users where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
```
原因如下:
1. 方法一存在SQL注入的风险,因为直接将参数拼接到SQL语句中,如果参数中包含特殊字符,就可能导致SQL注入攻击。
2. 方法二使用了预编译语句,将SQL语句和参数分开处理,更加安全,并且可以提高SQL执行的效率。
3. 方法三虽然也是将参数拼接到SQL语句中,但是与方法一不同的是,使用了预编译语句,可以避免SQL注入攻击,但是效率不如方法二。
阅读全文