• Java中使用JDBC操作Postgresql


    目录

    在Rocky Linux上安装postgresql

    用IntelliJ创建JavaFx项目

    画一个表格

     建立数据库访问


    在Rocky Linux上安装postgresql

    Rocky的仓库中自带了postgresql安装包,我们直接用dnf安装即可:

    dnf install postgresql-server -y

     安装好之后,先切换到postgres账户,进行初始化:

    1. su postgres
    2. initdb -D /var/lib/pgsql/data
    exit

    再启用并运行后台服务:

    systemctl enable postgresql

    systemctl start postgresql

    然后安装httpd:

    dnf install httpd -y

    然后安装PgAdmin,先更新仓库

    sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm
    

     然后开始安装:

    sudo yum install pgadmin4-web -y

    然后启动以下命令进行初始化设置:

    sudo /usr/pgadmin4/bin/setup-web.sh 

     启用并运行httpd:

    systemctl enable httpd

    systemctl start httpd

     排除防火墙:

    firewall-cmd --add-service http --permanent

    重新加载防火墙配置:

     firewall-cmd --reload

    重新启动httpd:

    systemctl restart httpd

    通过浏览器 打开pgadmin:

     输入之前初始化时填的账号密码进入系统,Server节点上右键:

     选择Register->Server:

     然后右击Database选择Create->Database:

     创建一个shop的库:

     创建表:

    1. CREATE TABLE public.product
    2. (
    3. id uuid,
    4. product_name character varying(100) NOT NULL,
    5. amount integer NOT NULL,
    6. unit_price double precision NOT NULL DEFAULT 0,
    7. unit_name character varying(10) NOT NULL,
    8. PRIMARY KEY (id)
    9. );
    10. ALTER TABLE IF EXISTS public.product
    11. OWNER to postgres;

    用IntelliJ创建JavaFx项目

    1. 创建Maven 项目

    选择 File -> New -> Project -> JavaFx ,填好后点击OK。

     2. 验证项目

    生成的pom文件:

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0modelVersion>
    6. <groupId>com.examplegroupId>
    7. <artifactId>demoartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. <name>demoname>
    10. <properties>
    11. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    12. <junit.version>5.8.2junit.version>
    13. properties>
    14. <dependencies>
    15. <dependency>
    16. <groupId>org.openjfxgroupId>
    17. <artifactId>javafx-controlsartifactId>
    18. <version>17.0.2version>
    19. dependency>
    20. <dependency>
    21. <groupId>org.openjfxgroupId>
    22. <artifactId>javafx-fxmlartifactId>
    23. <version>17.0.2version>
    24. dependency>
    25. <dependency>
    26. <groupId>org.junit.jupitergroupId>
    27. <artifactId>junit-jupiter-apiartifactId>
    28. <version>${junit.version}version>
    29. <scope>testscope>
    30. dependency>
    31. <dependency>
    32. <groupId>org.junit.jupitergroupId>
    33. <artifactId>junit-jupiter-engineartifactId>
    34. <version>${junit.version}version>
    35. <scope>testscope>
    36. dependency>
    37. dependencies>
    38. <build>
    39. <plugins>
    40. <plugin>
    41. <groupId>org.apache.maven.pluginsgroupId>
    42. <artifactId>maven-compiler-pluginartifactId>
    43. <version>3.10.1version>
    44. <configuration>
    45. <source>17source>
    46. <target>17target>
    47. configuration>
    48. plugin>
    49. <plugin>
    50. <groupId>org.openjfxgroupId>
    51. <artifactId>javafx-maven-pluginartifactId>
    52. <version>0.0.8version>
    53. <executions>
    54. <execution>
    55. <id>default-cliid>
    56. <configuration>
    57. <mainClass>com.example.demo/com.example.demo.HelloApplicationmainClass>
    58. <launcher>applauncher>
    59. <jlinkZipName>appjlinkZipName>
    60. <jlinkImageName>appjlinkImageName>
    61. <noManPages>truenoManPages>
    62. <stripDebug>truestripDebug>
    63. <noHeaderFiles>truenoHeaderFiles>
    64. configuration>
    65. execution>
    66. executions>
    67. plugin>
    68. plugins>
    69. build>
    70. project>

    3. 运行项目

    快捷键Atl+Shift+X,运行。

    画一个表格

    删掉自动生成的代码,新建Product.java

    注意:需要安装lombok插件。

    1. package org.example;
    2. import lombok.Data;
    3. @Data
    4. public class Product {
    5. private String productName;
    6. private Double price;
    7. private Integer amount;
    8. private String unitName;
    9. }

    新增Main.java

    1. package org.example;
    2. import javafx.application.Application;
    3. import javafx.collections.FXCollections;
    4. import javafx.collections.ObservableList;
    5. import javafx.fxml.FXMLLoader;
    6. import javafx.scene.Parent;
    7. import javafx.scene.Scene;
    8. import javafx.scene.control.Button;
    9. import javafx.scene.control.TableColumn;
    10. import javafx.scene.control.TableView;
    11. import javafx.scene.control.cell.PropertyValueFactory;
    12. import javafx.scene.layout.GridPane;
    13. import javafx.scene.layout.HBox;
    14. import javafx.scene.layout.VBox;
    15. import javafx.stage.Stage;
    16. import java.util.ArrayList;
    17. import java.util.List;
    18. public class Main extends Application {
    19. public static void main(String[] args) {
    20. launch(args);
    21. }
    22. @Override
    23. public void start(Stage stage) throws Exception {
    24. VBox root = new VBox();
    25. Scene scene = new Scene(root, 800, 600);
    26. var table = createTable();
    27. root.getChildren().add(table);
    28. ObservableList products = FXCollections.observableArrayList(queryProducts());
    29. table.setItems(products);
    30. HBox buttons = new HBox();
    31. root.getChildren().add(buttons);
    32. Button addButton = new Button("Add");
    33. buttons.getChildren().add(addButton);
    34. Button delButton = new Button("Delete");
    35. buttons.getChildren().add(delButton);
    36. stage.setTitle("JAVA商店");
    37. stage.setScene(scene);
    38. stage.show();
    39. }
    40. private List queryProducts() {
    41. List list = new ArrayList<>();
    42. Product p = new Product();
    43. p.setProductName("电脑");
    44. p.setAmount(10);
    45. p.setPrice(3500.0);
    46. p.setUnitName("台");
    47. list.add(p);
    48. p = new Product();
    49. p.setProductName("石油");
    50. p.setAmount(10);
    51. p.setPrice(700.0);
    52. p.setUnitName("桶");
    53. list.add(p);
    54. return list;
    55. }
    56. private TableView createTable() {
    57. TableView tableView = new TableView<>();
    58. var col = new TableColumn("名称");
    59. col.setCellValueFactory(new PropertyValueFactory("productName"));
    60. tableView.getColumns().add(col);
    61. var col1 = new TableColumn("数量");
    62. col1.setCellValueFactory(new PropertyValueFactory("amount"));
    63. tableView.getColumns().add(col1);
    64. var col2 = new TableColumn("单价");
    65. col2.setCellValueFactory(new PropertyValueFactory<>("price"));
    66. tableView.getColumns().add(col2);
    67. var col3 = new TableColumn("单位");
    68. col3.setCellValueFactory(new PropertyValueFactory<>("unitName"));
    69. tableView.getColumns().add(col3);
    70. return tableView;
    71. }
    72. }

    修改pom文件

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>java-demogroupId>
    7. <artifactId>rootartifactId>
    8. <version>0.0.1-SNAPSHOTversion>
    9. parent>
    10. <artifactId>jdbcartifactId>
    11. <dependencies>
    12. <dependency>
    13. <groupId>org.openjfxgroupId>
    14. <artifactId>javafx-baseartifactId>
    15. <version>19version>
    16. dependency>
    17. <dependency>
    18. <groupId>org.openjfxgroupId>
    19. <artifactId>javafx-controlsartifactId>
    20. <version>19version>
    21. dependency>
    22. <dependency>
    23. <groupId>org.openjfxgroupId>
    24. <artifactId>javafx-graphicsartifactId>
    25. <version>19version>
    26. dependency>
    27. <dependency>
    28. <groupId>org.openjfxgroupId>
    29. <artifactId>javafx-fxmlartifactId>
    30. <version>19version>
    31. dependency>
    32. <dependency>
    33. <groupId>org.openjfxgroupId>
    34. <artifactId>javafx-mediaartifactId>
    35. <version>19version>
    36. dependency>
    37. dependencies>
    38. <build>
    39. <plugins>
    40. <plugin>
    41. <groupId>org.openjfxgroupId>
    42. <artifactId>javafx-maven-pluginartifactId>
    43. <version>0.0.8version>
    44. <configuration>
    45. <mainClass>org.example.MainmainClass>
    46. configuration>
    47. plugin>
    48. plugins>
    49. build>
    50. project>

    运行结果:

     建立数据库访问

    修改pom.xml添加postgresql的驱动:

    1. <dependency>
    2. <groupId>org.postgresqlgroupId>
    3. <artifactId>postgresqlartifactId>
    4. <version>42.5.1version>
    5. dependency>

    修改Main.java,连接数据库:

    JDBC4.0之后DriverManager会自动搜索classpath中的驱动类,所以不需要Class.forName('driverClass')的方式加载驱动类。

    1. private Connection getConnection() throws SQLException {
    2. Connection conn = null;
    3. Properties connectionProps = new Properties();
    4. connectionProps.put("user", "postgres");
    5. connectionProps.put("password", "postgres");
    6. conn = DriverManager.getConnection(
    7. "jdbc:postgresql://192.168.0.128/shop",
    8. connectionProps);
    9. return conn;
    10. }

    连接到数据库之后,就可以增删改查操作了。为了防止SQL注入,通常查询字符串使用参数化方式,待输入值在查询语句使用“?”代替。

    新增:

    1. try {
    2. Connection conn = getConnection();
    3. String query = "INSERT INTO product(\n" +
    4. "\tid, product_name, amount, unit_price, unit_name)\n" +
    5. "\tVALUES (?, ?, ?, ?, ?);";
    6. try (PreparedStatement stmt = conn.prepareStatement(query)) {
    7. stmt.setObject(1, UUID.randomUUID());
    8. stmt.setString(2, pn.getText());
    9. stmt.setInt(3, Integer.valueOf(amountField.getText()));
    10. stmt.setDouble(4, Double.valueOf(priceField.getText()));
    11. stmt.setString(5, unitField.getText());
    12. stmt.executeUpdate();
    13. }
    14. conn.close();

    最终效果

     

  • 相关阅读:
    毕设 JAVA JSP餐饮管理程序论文
    泡泡玛特城市乐园开园在即,知名潮玩IP落地北京朝阳
    Python推导式
    Mybatis的使用(4)
    Hive insert插入数据与with子查询
    S3 对象重命名
    mongoose 源码解读(一)
    数据结构与算法----详解二叉树的遍历(迭代、递归)
    SpringBoot 如何使用 CORS 进行跨域资源共享
    JavaScript 编写排序算法:冒泡排序、选择排序、插入排序
  • 原文地址:https://blog.csdn.net/icoolno1/article/details/108229507