gpt4 book ai didi

使用 PostgreSQL 数据库的 Java Web 服务

转载 作者:行者123 更新时间:2023-11-29 12:39:06 26 4
gpt4 key购买 nike

我的代码是用 java 写的,我是 java 的新手,所以我希望我的解释是正确的:我有一个与数据库一起使用的 java 编写的 Web 服务。数据库类型可以是 PostgreSQL 和 mysql。所以我的网络服务与两个数据库的 JDBC 连接一起工作。我的数据库表之一是表 url,对于 postgressql,它是这样创建的:

CREATE TABLE urls ( 
id serial NOT NULL primary key,
url text not null,
type integer not null);

对于 mysql,它是这样创建的:

CREATE TABLE IF NOT EXISTS URLS ( 
id INTEGER primary key NOT NULL AUTO_INCREMENT,
url varchar (1600) NOT NULL,
type INTEGER NOT NULL );

当我尝试向该表中插入数据时,我使用了一个名为 urls 的实体:这个实体有:

    private BigDecimal id;
private String url;
private BigInteger type;

当我尝试将值插入 urls 表时,我将值分配给 urls 实体,同时将 id 保留为 NULL,因为它对于 mysql 是 AUTO_INCREMENT,对于 postgres 是 serial。该查询对我的 sql 有效,但对 postgress 失败。在 postgres 服务器日志中,我可以看到以下错误:

null value in column "id" violates not-null constraint

因为我发送 NULL 作为 id 值。我发现为了使查询工作,我应该使用这个查询:

INSERT INTO URLS(ID, TYPE, URL) VALUES(DEFAULT, 1, 'DED'); or this one:
INSERT INTO URLS(TYPE, URL) VALUES(1, 'DED'); or this one:

我用的不是这个:

INSERT INTO URLS(ID, TYPE, URL) VALUES(NULL, 1, 'DED');

所以我的问题是,

  1. 如何在 java 中将 DEFAULT 值分配给 BigDecimal 值?
  2. 从我的实体中删除 ID 是正确的方法吗?
  3. 我如何确保我对代码所做的任何更改都不会损害 mysql 或我将使用的任何其他数据库?

最佳答案

如果您在插入查询中指定列名,那么 postgres 不会采用默认值。所以你应该使用你的第二个插入查询。

INSERT INTO URLS(TYPE, URL) VALUES(1, 'DED');

此语法对 postgres 和 MySQL 都是正确的。

这应该可以解决您的问题 (1) 和 (3)。对于 (2) 不要从您的实体中删除 id 字段。此 ID 将成为您指向实体特定对象的数据库行的链接。

关于使用 PostgreSQL 数据库的 Java Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5132473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com