PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ps.executeUpdate();有什么用
时间: 2024-06-07 11:06:06 浏览: 13
这段代码是用来执行一个带有参数的SQL语句,并返回生成的键。它的执行过程如下:
1. `connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)`:创建一个PreparedStatement对象,它表示一个预编译的SQL语句,其中的参数用问号(?)表示。
2. `ps.executeUpdate()`:执行SQL语句,将参数传递给预编译的语句,并返回受影响的行数。
3. `ps.getGeneratedKeys()`:获取所有由数据库自动生成的键。
通常,这段代码用于插入一条记录,并且需要获取插入后自动生成的主键。 `RETURN_GENERATED_KEYS` 参数告诉JDBC驱动程序返回由数据库自动生成的键。如果没有指定该参数,则不会返回自动生成的键。
相关问题
PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);这句怎么分析
这句代码使用了Java中的PreparedStatement类,用于执行带有参数的SQL语句,可以防止SQL注入攻击。它使用了JDBC连接对象connection的prepareStatement方法,传入两个参数:第一个参数是SQL语句字符串sql,第二个参数是一个常量Statement.RETURN_GENERATED_KEYS,表示希望在执行SQL语句后获取生成的主键。该语句将返回一个PreparedStatement对象,可以通过该对象的executeUpdate()方法执行SQL语句,并通过getGeneratedKeys()方法获取生成的主键。
package studentsSystem; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class system { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub; Properties prop=new Properties(); prop.load(new FileInputStream("shixun/src/druid.properties")); DataSource dataSource=DruidDataSourceFactory.createDataSource(prop); Connection conn=dataSource.getConnection(); String sql="update student set 姓名=王五 where 学号=01"; PreparedStatement pstm=conn.prepareStatement(sql); ResultSet rs=pstm.executeQuery(); pstm.close(); conn.close(); } }
这段代码的作用是使用阿里巴巴的 Druid 数据库连接池框架连接到数据库,并执行一个 SQL 更新语句,将学号为 01 的学生的姓名修改为“王五”。
具体实现步骤如下:
1. 读取数据库连接池的配置信息,这些信息保存在 "druid.properties" 文件中。
2. 使用 DruidDataSourceFactory.createDataSource(prop) 方法创建一个 Druid 数据库连接池。
3. 调用 dataSource.getConnection() 方法获取一个数据库连接对象。
4. 构造一个 SQL 更新语句,将学号为 01 的学生的姓名修改为“王五”。
5. 通过调用 conn.prepareStatement(sql) 方法创建一个 PreparedStatement 对象,然后执行更新操作。
6. 最后关闭 PreparedStatement 对象和数据库连接对象。
需要注意的是,这段代码中的 SQL 更新语句没有使用 PreparedStatement 对象的 setXXX 方法设置参数值,这是不规范的做法,容易引起 SQL 注入等安全问题。正确的做法应该是使用 PreparedStatement 对象的 setXXX 方法来设置参数值,如下所示:
```
String sql="update student set 姓名=? where 学号=?";
PreparedStatement pstm=conn.prepareStatement(sql);
pstm.setString(1, "王五");
pstm.setString(2, "01");
pstm.executeUpdate();
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)