public void deldaet(){ try { String sql =" insert into book where id=?"; pstmt=conn.prepareStatement(sql); pstmt.setString(1,jtf2.getText()); pstmt.executeUpdate(); JOptionPane.showMessageDialog(this, "删除了一条记录"); }catch(Exception ex) {System.out.println("输入失误");} }
时间: 2024-03-01 22:56:20 浏览: 25
这段代码存在语法错误,无法正确执行。首先,SQL 语句中应该使用 delete 关键字来执行删除操作,而不是 insert。其次,SQL 语句中应该指定要删除的记录的条件,而不是只指定了条件所对应的字段。因此,代码应该改为:
```
public void delete() {
try {
String sql = "DELETE FROM book WHERE id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, jtf2.getText());
pstmt.executeUpdate();
JOptionPane.showMessageDialog(this, "删除了一条记录");
} catch(Exception ex) {
System.out.println("输入失误");
}
}
```
这段代码中,使用了 SQL 的 DELETE 语句来删除满足条件的记录。其中,WHERE 子句指定了要删除的记录的条件,即 id 字段的值等于 jtf2 中用户输入的值。执行 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注入攻击,但是效率不如方法二。
使用PreparedStatement pstmt = conn.prepareStatement(sql);还需要在前面再次连接数据库
是的,使用PreparedStatement需要先连接到数据库。通常的代码流程是:先加载数据库驱动程序,然后建立数据库连接,最后使用PreparedStatement执行SQL语句。以下是一个简单的示例代码:
```
Class.forName("com.mysql.jdbc.Driver"); // 加载MySQL驱动程序
Connection conn = DriverManager.getConnection(url, user, password); // 建立数据库连接
String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql); // 创建PreparedStatement对象
pstmt.setInt(1, 1); // 设置参数值
ResultSet rs = pstmt.executeQuery(); // 执行查询操作
```
在这个示例中,我们先加载了MySQL驱动程序,然后建立了数据库连接,接着创建了一个PreparedStatement对象,设置了参数值,最后执行了查询操作。需要注意的是,在执行完语句之后,我们需要关闭ResultSet、PreparedStatement和Connection对象。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)