八月 9, 2023
摘要:在本教程中,您将学习如何使用 JDBC 调用 PostgreSQL 存储函数。
目录
介绍
PostgreSQL 允许您使用用户定义的存储函数将业务逻辑集中放在数据库层。只有当您可以在应用程序层(例如从 Java 应用程序)调用这些存储函数时,它才有意义。
幸运的是,PostgreSQL JDBC 驱动程序完全支持 PostgreSQL 存储函数。
我们将向您展示如何使用 JDBC 调用内置存储函数以及用户定义的存储函数。
调用内置存储函数
我们将调用一个内置的字符串函数initcap()
,该函数将字符串中的每个单词大写。
若要调用initcap()
函数,请执行以下步骤:
- 首先,建立数据库连接。
- 其次,创建一个 CallableStatement 对象并注册 OUT 参数。
- 第三,执行函数调用并获取返回结果。
下面App
类的connect()
方法,建立数据库连接,并返回一个 Connection 对象。
public class App {
private final String url = "jdbc:postgresql://localhost/dvdrental";
private final String user = "postgres";
private final String password = "postgres";
/**
* Connect to the PostgreSQL database
*
* @return a Connection object
* @throws java.sql.SQLException
*/
public Connection connect() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
//...
}
下面的callBuiltInSF()
方法接受一个字符串,并返回其正确的大小写形式。
public class App {
// ...
/**
* Call a built-in stored function demo
*
* @param s
* @return
*/
public String properCase(String s) {
String result = s;
try (Connection conn = this.connect();
CallableStatement properCase = conn.prepareCall("{ ? = call initcap( ? ) }")) {
properCase.registerOutParameter(1, Types.VARCHAR);
properCase.setString(2, s);
properCase.execute();
result = properCase.getString(1);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return result;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
App app = new App();
System.out.println(app.properCase("this is the actor list:"));
}
}
程序将输出以下结果:
This Is The Actor List:
调用用户定义的存储函数
我们将使用我们在返回表的 PL/pgSQL 函数教程中开发的存储函数get_film
。
请参阅下面的getFilms()
方法:
/**
* Call the get_film stored function
* @param pattern
* @param releaseYear
*/
public void getFilms(String pattern, int releaseYear) {
String SQL = "SELECT * FROM get_film (?, ?)";
try (Connection conn = this.connect();
PreparedStatement pstmt = conn.prepareStatement(SQL)) {
pstmt.setString(1,pattern);
pstmt.setInt(2,releaseYear);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(String.format("%s %d",
rs.getString("film_title"),
rs.getInt("film_release_year")));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
getFilms 方法接受两个参数:
- 用于搜索影片的模式。
- 电影上映年份。
它是如何工作的。
- 首先,连接到 dvdrental 数据库。
- 接下来,使用调用 get_film 存储函数的查询,创建一个 PreparedStatement 对象。
- 然后,使用 setString 和 setInt 方法将参数传递给语句。
- 之后,执行语句。
- 最后,处理结果集并输出电影数据。
让我们执行程序,显示在 2006 年发行并以字符串"er"
结尾的电影。
App app = new App();
app.getFilms("%er",2006);
在本教程中,我们向您展示了如何使用 JDBC API 调用 PostgreSQL 存储函数。