[千字长文系列] 🌏玩转PostgreSql JDBC操作🦄(二)
本文使用的emoji🦄🧚♀️🧚🏻♀️🧚🏻♂️
🧚♀️JDBC查询PG数据
在本节中,我们将学习如何使用JDBC API从PostgreSQL数据库中的表查询数据。
通过以下几个步骤来使用JDBC查询表中的数据,:
-
建立PostgreSQL服务器数据库连接。
-
创建Statement对象(SQL语句对象)
-
执行sql语句,以获取ResultSet对象
-
处理ResultSet对象。
-
关闭数据库连接。
🧚🏻♀️建立数据库连接
要连接到PostgreSQL数据库,需要提供用户名、密码和数据库url等信息。
例如,以下方法连接到PostgreSQL数据库并返回连接对象:
private final String url = "jdbc:p6spy:postgresql://localhost:5432/postgres";
private final String user = "postgres";
private final String password = "112233";
/**
* 连接PostgreSql数据库
*
* @return Connection
* @throws SQLException
*/
public Connection connect() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
🧚🏻♀️JDBC Statement对象简介
Statement对象表示SQL语句。首先,从Connection对象创建Statement对象。然后,执行Statement对象以获取表示数据库结果集的ResultSet对象。
JDBC提供了三种语句对象:
- Statement: 使用该对象实现简单无参的SQL语句。
- PreparedStatement: 是Statement类的子类。可以执行带参数的SQL语句。
- CallableStatement: 是PreparedStatement类的子类。扩展用于执行可能具有参数的存储过程的SQL语句
🧚🏻♀️执行查询方法
要执行查询,可以使用Statement对象的以下方法之一:
-
execute: 如果查询的第一个对象是ResultSet对象,则返回true。可以通过调用getResultSet方法来获取ResultSet。
-
executeQuery: 仅返回一个ResultSet对象。
-
executeUpdate: 返回受语句影响的行数。此方法用于插入,删除,或更新语句。
🧚🏻♀️处理ResultSet对象
获取ResultSet对象后,可以通过调用ResultSet对象使用下标的方法来遍历结果集。
请注意,此下标是Java下标,而不是数据库下标。
🧚🏻♀️关闭数据库连接
在JDBC 4.1中,可以使用try-with-resources语句自动关闭ResultSet、statement和Connection对象。
🧚🏻♀️查询数据示例
接下来,我们将向学习从简单到复杂查询数据的各种示例。
🧚🏻♂️Statement使用示例:使用返回一行的语句查询数据
以下方法返回COUNT()函数的
/**
* 查询表数据数量
* @return
*/
public int getTableCount() {
String SQL = "SELECT count(*) FROM pro_rank";
int count = 0;
try (Connection conn = connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL))
{
rs.next();
count = rs.getInt(1);
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return count;
}
执行test方法,查询如下:
🧚🏻♂️Statement示例:使用返回多行的语句查询数据
以下getTableRows方法从pro_rank表中查询所有数据:
/**
* 查询表所有数据
*/
public void getTableRows() {
String SQL = "SELECT * FROM pro_rank";
try (Connection conn = connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(SQL)) {
System.out.println("name"+ "\t" + "team" + "\t" + "rank");
// 打印所有数据
while (rs.next()) {
System.out.println(rs.getString("name") + "\t"
+ rs.getString("team") + "\t"
+ rs.getString("rank"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
执行结果如下图
🧚🏻♂️PreparedStatement示例:使用具有参数的语句查询数据
要使用参数查询数据库,我们可以使用PreparedStatement。
首先,在SQL语句中使用问号 (?) 作为占位符。然后,使用PreparedStatement对象的方法 (如setInt、setString等) 将值传递给占位符。
以下为方法示例:
/**
* 通过战队名查询队员
*
* @param team
*/
public void findProByTeam(String team) {
String SQL = "SELECT *"
+ "FROM pro_rank "
+ "WHERE team = ? ";
try (Connection conn = connect();
PreparedStatement pstmt = conn.prepareStatement(SQL))
{
pstmt.setString(1, team);
ResultSet rs = pstmt.executeQuery();
// 打印所有数据
System.out.println("name"+ "\t" + "team" );
while (rs.next()) {
System.out.println(rs.getString("name") + "\t"
+ rs.getString("team") );
}
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
执行结果如下所示
🧚♀️JDBC向PG表中插入数据
本节将学习如何使用JDBC API将数据插入PostgreSQL数据库的表中。
为了演示,我们将使用之前一直用到的pro_rank
表。
🧚🏻♀️向表中插入一行
要将行插入表中,请按照以下步骤操作:
当我们在表中插入一行具有自动生成的id,我们通常希望取回id值以进行进一步处理。
要获取自动生成的id:
-
通过添加
Statement.RETURN_GENERATED_KEY
来创建Statement对象,以获取Sql执行结果返回值 -
调用Statement对象的
getGeneratedKeys()
方法获取新增数据的id值。
以下代码为插入一条数据到pro_rank
表的示例
/**
* 插入一条数据到表中
* @param proRank
* @return
*/
public long insertOneRow(ProRank proRank) {
String SQL = "INSERT INTO pro_rank(name,team,line,rank)"
+ "VALUES(?,?,?,?)";
long id = 0;
try (Connection conn = connect();
PreparedStatement pstmt = conn.prepareStatement(SQL,
Statement.RETURN_GENERATED_KEYS)) {
pstmt.setString(1, proRank.getName());
pstmt.setString(2, proRank.getTeam());
pstmt.setString(3, proRank.getLine());
pstmt.setInt(4, proRank.getRank());
int affectedRows = pstmt.executeUpdate();
// 判断生效列
if (affectedRows > 0) {
// 获取返回的id
try (ResultSet rs = pstmt.getGeneratedKeys()) {
if (rs.next()) {
id = rs.getLong(1);
}
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return id;
}
运行结果如下所示:
🧚🏻♀️向表中插入多行
向表中插入多行的步骤如下:
-
创建数据库连接。
-
创建一个
Statement
对象。 -
调用
addBatch()
方法。 -
调用
executeBatch()
方法提交插入批处理。 -
关闭数据库连接。
以下是代码示例
/**
* 插入多行
*/
public void insertMultRows(List<ProRank> list) {
String SQL = "INSERT INTO pro_rank(name,team,line,rank)"
+ "VALUES(?,?,?,?)";
try (
Connection conn = connect();
PreparedStatement statement = conn.prepareStatement(SQL);) {
int count = 0;
for (ProRank proRank : list) {
statement.setString(1, proRank.getName());
statement.setString(2, proRank.getTeam());
statement.setString(3, proRank.getLine());
statement.setInt(4, proRank.getRank());
statement.addBatch();
count++;
}
System.out.println("插入" + count + "行数据");
} catch (SQLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
执行结果如下:
未完待续..既然看到这里了,不妨来个大大的点赞吧![[千字长文系列] 🌏玩转PostgreSql JDBC操作🦄(二)](https://static.blogweb.cn/article/07903881a7304e69bf45349218b13a32.webp)
转载自:https://juejin.cn/post/7165790996167884836