public void vipsc() throws Exception{ Scanner sc=new Scanner(System.in); System.out.println("请输入你要删除的id或名字:"); if(sc.hasNextInt()){ int id=sc.nextInt(); } else{ String name=sc.next(); } String sql="delete from vip where name=? OR vip_id=?"; PreparedStatement pstmt=conn.prepareStatement(sql); pstmt.setInt(1,int id); pstmt.setString(2,String name); }哪错了
时间: 2024-02-14 18:11:23 浏览: 70
这段代码有两个问题:
1. 在判断输入的数据类型时,如果输入的不是整数,则会读取下一个字符串。但是在后面删除语句中,无论输入的是id还是name,都会将id和name的值作为参数传递给pstmt。这会导致编译错误,因为id和name未定义。解决方法是将变量声明和初始化放在if和else语句的外面。
2. 在PreparedStatement中设置参数时,使用setInt()和setString()方法需要传递两个参数,即参数索引和参数值,而不是将整个参数作为一个字符串传递。解决方法是将setInt()和setString()方法的参数分别设置为1和2。
下面是修改后的代码:
```
public void vipsc() throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要删除的id或名字:");
int id = 0;
String name = "";
if (sc.hasNextInt()) {
id = sc.nextInt();
} else {
name = sc.next();
}
String sql = "delete from vip where name=? OR vip_id=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setInt(2, id);
}
```
阅读全文