尝试连接Springboot和postgreSQL以获取数据

总结

尝试连接先前在VPS上建立的postgreSQL和springboot,以获取数据。

环境

    • Springboot 3.0.5

 

    • WIndows 11

 

    • postgreSQL 14

 

    centOS 7.9

方法

在本地连接VPS上的postgreSQL数据库,插入数据并进行确认尝试。

如果之前没有进行过相关操作,请先执行此处的步骤。
    https://qiita.com/eHZ/items/5151281ab45e657490dc
2. 在Windows上连接到VPS的postgreSQL。
psql -h {VPSのIPアドレス}  -U {ユーザー設定で作成したユーザー名} -d {ユーザー設定で作成したDB名}
3. 创建表格
create table {新規テーブル名} (id serial, name VARCHAR(60));

使用以下命令,确认是否成功创建了表格。

\dt
4. 数据的录入 de

将数据插入到已创建的表中。

insert into {TABLE名}(name) values ('山田'), ('長田'), ('田中');

如果显示INSERT 0 3,那就没问题,因为id serial会自动分配一个编号。

确认数据已经注册。
select * from {TABLE名};

如果无法使用select,请尝试使用大写的SELECT来执行(也许是心情问题,有时候使用小写和大写字母不同)。如果在步骤4中显示了注册的数据,表示完成。

6. 确认 VPS 的 PostgreSQL 是否正确同步了
1. 连接到VPS上的PostgreSQL数据库。
psql -U {ユーザー名} -d {DB名}
确认数据已经插入。
SELECT * from {TABLE名};

如果无法使用SELECT,请尝试使用小写的select(可能是心情问题,有时候是小写,有时候是大写)
如果能够确认之前插入的数据,就完成了。

2. Springboot的配置

1. 更改application.properties文件
spring.jpa.database=POSTGRESQL
spring.datasource.url=jdbc:postgresql://{VPSのIPアドレス}:5432/{DB名}
spring.datasource.username={ユーザー名}
spring.datasource.password={パスワード}
2. 添加依赖关系

pom.xml -> 项目对象模型文件

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

※此次使用了Mybatis,但也可以使用JPA。

创建 Model 类。

模型:为了将数据库数据作为Java类处理而必需

@Getter
@Setter
public class Test {
    private Long id;
    private String name;
}
创建存储库

存储库:用于与实际数据库交互的接口。

@Mapper
public interface TestMapper {
    @Select("SELECT * FROM testTable")
    List<Test> selectAll();
}
创建service类

服务:类似于控制器和存储库之间的桥梁角色

@RequiredArgsConstructor
@Transactional
@Service
public class TestService {
    private final TestMapper mapper;
    public List<Test> selectAll() {
        return mapper.selectAll();
    }
}
6. 创建一个控制器类。

控制者角色:此处接收用户请求,并根据请求内容调用服务类的处理。

@RequiredArgsConstructor
@Controller
public class TestController {
    private final TestService service;
    @GetMapping("/list")
    public ModelAndView testList(ModelAndView mav) {
        mav.addObject("page", service.selectAll());
        mav.setViewName("list");
        return mav;
    }
}
7. 制作HTML
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>list</title>
</head>
<body>
    <table>
        <tr th:each="list : ${page}" th:object="${list}">
            <td th:text="*{id}"></td>
            <td th:text="*{name}"></td>
        </tr>
    </table>
</body>
</html>

※ 作为备忘录,
在${page}上是由Controller的mav.addObject指定的service.selectAll()(获取所有数据)。
th:each用于将page的内容逐个放入list中(类似于Java中的for(String list : page))。
th:object将绑定到表单的对象指定为${list}。
→如果不使用th:object,则会变成以下方式。

        <tr th:each="list : ${page}">
            <td th:text="*{list.id}"></td>
            <td th:text="*{list.name}"></td>
        </tr>
8. 在本地进行操作验证

3. 删除TABLE

如果不需要 TABLE,请在连接到 PostgreSQL 后,使用以下命令进行删除。

drop table "{TABLE名}";

错误解决

ERROR: type “varcher” does not exist
VARCHARは大文字にしないといけない

drop table {TABLE名};とやるとERROR: syntax error at or near “DROP”が出て削除できない
drop table “{TABLE名}”;とTABLE名をダブルクォーテーションで囲んであげる。

VPSでpostgreSQLに接続したときにpsql: error: connection to server on socket “/var/run/postgresql/.s.PGSQL.5432″のエラー
sudo vi /var/lib/pgsql/14/data/pg_hba.confを以下のように修正

修正前
# "local" is for Unix domain socket connections only
local   all             all                                     peer

修正後
# "local" is for Unix domain socket connections only
local   all             all                                     trust
    • localで動作確認したらinternal server errorが出る

 

    • おそらくapplicaion.propertiesに記載している内容がどこか間違っている

 

    (自分はpw間違っていてエラー出た)

请提供具体的句子或段落,我将为您进行翻译。

    • https://uha-blog.com/java/spring-boot-postgresql/

 

    https://www.koikikukan.com/archives/2020/06/03-235555.php
bannerAds