尝试连接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