java如何连接PostgreSQL 数据库,含代码和教程
下载 PostgreSQL JDBC 驱动要从 Java 程序连接到 PostgreSQL 服务器,您需要 PostgreSQL JDBC 驱动。
您可以在 jdbc.postgresql.org 下载页面上下载最新版本的驱动。下载的文件是一个 jar 文件,例如postgresql-42.7.1.jar。
创建新项目
首先,启动 IntelliJ IDE。
接下来,创建一个名为sales的新项目。
然后,右键单击项目名称,并选择 Open Module Settings(打开模块设置)。
之后,选择 Project Settings(项目设置)下的 Libraries(库),并单击 New Project Library(新建项目库)。
最后,选择 PostgreSQL 数据库驱动文件,例如postgresql-42.7.1.jar。
创建数据库配置文件
首先,在项目标src目录中,创建一个名为db.properties文件的新文件。
其次,将连接参数添加到db.properties文件中:
db.url=jdbc:postgresql://localhost:5432/sales
db.username=Yourusername
db.password=YourPassword
config.properties中包罗了三个连接参数:
db.url:PostgreSQL 数据库服务器的 URL。在此示例中,我们连接到本地 PostgreSQL 服务器上的sales数据库,服务器的端口为 5432(默认端口)。
db.user:连接到数据库的用户帐户。
db.password:用户的暗码。
请留意,您需要将YourUsername和YourPassword替换为现实的值。
界说 DatabaseConfig 类
首先,在项目标src目录中,创建一个名为DatabaseConfig.java的新文件。
其次,在DatabaseConfig.java文件中,界说DatabaseConfig类:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
//获取配置文件的内容,并返回配置文件的信息
public class DatabaseConfig {
private static final Properties properties = new Properties();
static {
try(InputStream inputStream = DatabaseConfig.class.getClassLoader().getResourceAsStream("jdbc_pg.properties")){
if (inputStream==null){
System.out.println("Sorry, unable to find jdbc_pg.properties");
System.exit(1);
}
properties.load(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
public static String getUrl(){
return properties.getProperty("jdbc.url");
}
public static String getUsername(){
return properties.getProperty("jdbc.username");
}
public static String getPassword(){
return properties.getProperty("jdbc.password");
}
}
该DatabaseConfig类负责从db.properties文件加载数据库配置。
该DatabaseConfig有三个静态方法,来公开数据库配置:
getDbUrl() – 返回数据库 URL。
getDbUsername() – 返回用户名。
getDbPassword() – 返回暗码。
创建 DB 类
首先,在项目标src目录中,创建一个名为DB.java文件的新文件。
其次,利用下面代码,界说DB类:
import java.sql.*;
public class DB {
//对数据库建立连接返回Connection对象
public static Connection connect() throws SQLException {
try {
var jdbUrl = DatabaseConfig.getUrl();
var jdbUsername = DatabaseConfig.getUsername();
var jdbPassword = DatabaseConfig.getPassword();
return DriverManager.getConnection(jdbUrl, jdbUsername, jdbPassword);
}catch (SQLException e){
System.err.println(e.getMessage());
return null;
}
}
//关闭资源
//关闭顺序:关闭资源时应遵循逆序的顺序,即先关闭ResultSet,然后是Statement或PreparedStatement,最后是Connection。这样可以防止资源泄漏。
public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
if (resultSet!=null){
try{
resultSet.close();
}catch (SQLException e){
e.printStackTrace();
}finally {
if (preparedStatement!=null){
try{
preparedStatement.close();
}catch (SQLException e){
e.printStackTrace();
}finally {
if (connection!=null){
try{
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
}
}
}
}
该DB类有一个静态方法connect()和close()。
connect()是连接到本地 PostgreSQL 服务器上的 sales 数据库。
connect()方法利用DatabaseConfig类加载连接参数,并利用DriverManager类的getConnection()方法建立与数据库的连接。
如果connect()方法成功建立了与 PostgreSQL 的连接,则返回一个Connection对象,否则返回 null。
如果在连接过程中发生任何SQLException异常,该connect()方法将显示异常的具体信息。
close()方法是为了关闭资源,关闭次序:关闭资源时应遵循逆序的次序,即先关闭ResultSet,然后是Statement或PreparedStatement,最后是connect。这样可以防止资源泄漏。
创建 Java 程序
首先,在项目标 src 目录中,创建Main.java文件。
其次,利用下面代码,在Main.java文件中界说Main类:
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
try (var connection =DB.connect()) {
System.out.println("Connected to the PostgreSQL database.
");
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
}
Main类的main()函数,通过调用connect()方法,利用DB类连接到本地 PostgreSQL 服务器上的sales数据库。
如果成功建立连接,则显示一条消息,如果发生SQLException异常,则显示错误。
try-with-resources 语句确保即使发生异常也会自动关闭Connection。
如果您运行该程序并看到以下输出,则表现该程序已成功连接到 PostgreSQL 服务器:
Connected to the PostgreSQL database.
补充
在项目标 src 目录中,创建ExecuteDB .java文件。
其次,利用下面代码,在ExecuteDB .java文件中界说ExecuteDB 类:
import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Arrays;import java.util.List;public class ExecuteDB { public static void main(String[] args) { String sql = "select id,username from public.user ft where id=1"; try(var connect = DB.connection()){ System.out.println("Connected to the PostgreSQL database.
"); PreparedStatement preparedStatement = connect.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery();// int rowCount = 0; while (resultSet.next()){ System.out.println(resultSet.getRow()); String tnx_ref = resultSet.getObject("id").toString(); String customer_no =resultSet.getObject("username ").toString(); System.out.println("id:"+tnx_ref); System.out.println("username :"+customer_no);// rowCount++; }// System.out.println(rowCount); //关闭资源 DB.close(connect,preparedStatement,resultSet); }catch (SQLException e){ System.err.println(e.getMessage()); } } } 或
import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Arrays;import java.util.List;public class ExecuteDB {//main 方法调用自己的getDBData()实验sql public static void main(String[] args) { String sql = "select id,username from public.user ft where id=1"; //打印数组里面的元素需要用到Arrays类中的toString方法 System.out.println(Arrays.toString(ExecuteDB.getDBData(sql))); } //这个方法是静态方法,外部调用不需要再创建对象,直接用类名.方法()访问 //这个方法返回的是一个数组 public static String[] getDBData(String sql){ int i = 2; String[] result = new String; try(var connect = DB.connection()){//1.创建连接,若连接成功就实验下面语句 System.out.println("Connected to the PostgreSQL database.
"); //2.创建语句,预编制语句对象创建PreparedStatement PreparedStatement preparedStatement = connect.prepareStatement(sql); //CRUD //3.1 实验语句__查询语句 ResultSet resultSet = preparedStatement.executeQuery(); //3.2 实验语句__Update 语句,如:INSERT,UPDATE,DELETE/SQL DDL.// ResultSet resultSet2 = preparedStatement.executeUpdate(); //4.处理结果 while (resultSet.next()){ String tnx_ref = resultSet.getObject("id").toString(); String customer_no =resultSet.getObject("username ").toString();// System.out.println("tnx_ref:"+id);// System.out.println("customer_no:"+username ); result = tnx_ref; result = customer_no; } //5.关闭资源 DB.close(connect,preparedStatement,resultSet); }catch (SQLException e){ //创建连接失败则抛出下面异常 System.err.println(e.getMessage()); } return result; }} ExecuteDB类就是整合了上面全部方法,终极实验sql获取sql的返回数据。
参考来源:https://www.rockdata.net/zh-cn/tutorial/java-setup/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]