public void vipgg() throws Exception{ System.out.println("请输入你要更改的会员名字:"); Scanner sc=new Scanner(System.in); String name1,name2 = ""; name1=sc.nextLine(); System.out.println("请输入更改后的名字:"); name2=sc.next(); String sql="update vip set name='"+name2+"' where name='"+name1+"'"; Statement stmt=conn.createStatement(); stmt.executeUpdate(sql); }哪错了
时间: 2024-03-11 16:49:51 浏览: 77
这段代码存在以下问题:
1. 没有给出 `conn` 的定义,即数据库连接对象,需要先创建连接对象并打开数据库连接。
2. 使用 `Scanner` 类中的 `next()` 方法读取输入时,可能会因为输入不符合预期,如输入空格或其他特殊字符,导致程序出错。建议使用 `nextLine()` 方法读取输入,并通过 `trim()` 方法去除首尾空格。
3. 拼接 SQL 语句时没有考虑到 SQL 注入攻击的问题。建议使用 PreparedStatement 对象,并使用占位符来代替直接拼接字符串。
下面是修改后的代码:
```java
public void vipgg() throws Exception {
System.out.println("请输入你要更改的会员名字:");
Scanner sc = new Scanner(System.in);
String name1 = sc.nextLine().trim();
System.out.println("请输入更改后的名字:");
String name2 = sc.nextLine().trim();
// 获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
// 使用 PreparedStatement 对象来拼接 SQL 语句
String sql = "update vip set name=? where name=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name2);
pstmt.setString(2, name1);
pstmt.executeUpdate();
// 关闭 PreparedStatement 对象和数据库连接
pstmt.close();
conn.close();
}
```
阅读全文