无法自动获取数据库中记录的 ID
Can't automatically obtain ID for a record in database
我的实体是:
@Entity(name = "studios")
public class Studio {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "studio_id", nullable = false)
private Integer id;
private String name;
private String phone;
private String url;
public Studio() {
}
public Studio(String name, String phone, String url) {
this.name = name;
this.phone = phone;
this.url = url;
}
public String getUrl() {
return url;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
}
向数据库写入记录的方法。我只想将它发送到数据库并自动获取此 table 中每条记录的 ID,但每次我这样做时 - “status”:500,“error”:“Internal Server Error”。 table.
没有任何变化
@Override
public Studio save(Studio studio) {
final String SQL_INSERT = "insert into studios values (?, ?, ?)";
jdbcTemplate.update(
con -> {
PreparedStatement preparedStatement = con.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, studio.getName());
preparedStatement.setString(2, studio.getPhone());
preparedStatement.setString(3, studio.getUrl());
try (ResultSet generatedKeys = preparedStatement.getGeneratedKeys()) {
if (generatedKeys.next()) {
studio.setId(generatedKeys.getInt(1));
}
else {
throw new SQLException("Creating user failed...");
}
}
return preparedStatement;
}
);
return studio;
}
我的table是:
CREATE TABLE "studios" (
"studio_id" serial NOT NULL UNIQUE ,
"name" varchar(128) NOT NULL UNIQUE,
"url" varchar(255) NOT NULL,
"phone" varchar(12) NOT NULL,
CONSTRAINT "studios_pk" PRIMARY KEY ("studio_id")
);
为什么它不起作用?
您需要在插入语句中指定要填充的列。使用没有显式列的插入总是一个坏主意,因为关于列顺序的假设可能是错误的,但在这种情况下,它会导致插入失败,因为您的插入指定了三个值,而 table 有四个列(studio_id, 姓名, url, phone).
您需要使用:
insert into studios (name, phone, url) values (?, ?, ?)
顺便说一句,即使您的 table 只有三个,无柱插入也会产生错误的结果:您正在设置订单名称,phone,url,而您的 table 定义有订单名称,url,phone。
我的实体是:
@Entity(name = "studios")
public class Studio {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "studio_id", nullable = false)
private Integer id;
private String name;
private String phone;
private String url;
public Studio() {
}
public Studio(String name, String phone, String url) {
this.name = name;
this.phone = phone;
this.url = url;
}
public String getUrl() {
return url;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
}
向数据库写入记录的方法。我只想将它发送到数据库并自动获取此 table 中每条记录的 ID,但每次我这样做时 - “status”:500,“error”:“Internal Server Error”。 table.
没有任何变化@Override
public Studio save(Studio studio) {
final String SQL_INSERT = "insert into studios values (?, ?, ?)";
jdbcTemplate.update(
con -> {
PreparedStatement preparedStatement = con.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, studio.getName());
preparedStatement.setString(2, studio.getPhone());
preparedStatement.setString(3, studio.getUrl());
try (ResultSet generatedKeys = preparedStatement.getGeneratedKeys()) {
if (generatedKeys.next()) {
studio.setId(generatedKeys.getInt(1));
}
else {
throw new SQLException("Creating user failed...");
}
}
return preparedStatement;
}
);
return studio;
}
我的table是:
CREATE TABLE "studios" (
"studio_id" serial NOT NULL UNIQUE ,
"name" varchar(128) NOT NULL UNIQUE,
"url" varchar(255) NOT NULL,
"phone" varchar(12) NOT NULL,
CONSTRAINT "studios_pk" PRIMARY KEY ("studio_id")
);
为什么它不起作用?
您需要在插入语句中指定要填充的列。使用没有显式列的插入总是一个坏主意,因为关于列顺序的假设可能是错误的,但在这种情况下,它会导致插入失败,因为您的插入指定了三个值,而 table 有四个列(studio_id, 姓名, url, phone).
您需要使用:
insert into studios (name, phone, url) values (?, ?, ?)
顺便说一句,即使您的 table 只有三个,无柱插入也会产生错误的结果:您正在设置订单名称,phone,url,而您的 table 定义有订单名称,url,phone。