【问题标题】:JDBC/SQL - ID is always 0JDBC/SQL - ID 始终为 0
【发布时间】:2017-10-31 17:03:40
【问题描述】:

所以我正在尝试将硬编码成员插入到我的成员表中。我在 Eclipse 上使用 Spring Boot 和 JDBC。

这是我的 schema.sql:

CREATE TABLE Members 
(
    ID int not null,
    LastName varchar(255) not null,
    FirstName varchar(255) not null,
    PhoneNumber integer not null,
    created timestamp not null,
    primary key(ID)
);

INSERT INTO MEMBERS (ID, LASTNAME, FIRSTNAME,PHONENUMBER, CREATED)
VALUES(1001, 'Max', 'Mad', 0547547547, sysdate());

我在 DAO 类中有一个 findAll 方法:

public List<Member> findAll(){
        return jtemp.query("select * from members", new BeanPropertyRowMapper<Member>(Member.class));
}

当我运行它时,它会返回:

[Member [id=0, firstName=Mad, lastName=Max, phoneNumber=547547547, created=2017-10-31 18:57:21.606]]

如您所见,由于某种原因未插入 ID。

我的会员类是这样的:

public class Member {

    private long id;
    private String firstName;
    private String lastName;
    private long phoneNumber;
    private Date created;
    public Member(long id, String firstName, String lastName, long phoneNumber, Date created) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.phoneNumber = phoneNumber;
        this.created = created;
    }

    public long getUserId() {
        return id;
    }
    public void setUserId(long userId) {
        this.id = userId;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public long getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(long phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }

    @Override
    public String toString() {
        return "Member [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", phoneNumber="
                + phoneNumber + ", created=" + created + "]";
    }


}

我该如何解决? 我尝试插入不同的数字,但我总是在日志中得到一个零。

谢谢

【问题讨论】:

  • Member 类是什么样的?它有 id 的设置器吗?
  • @binoternary 是的。我将课程添加到我的帖子中

标签: sql jdbc spring-jdbc


【解决方案1】:

查询的列名必须与目标对象中的设置器匹配。

您的查询有一个名为id 的列,但没有setId 方法。您应该将setUserId 重命名为setId,或者在查询中将别名user_id 指定为id 列。

来自BeanPropertyRowMapper documentation:

根据从结果集元数据中获得的列名与相应属性的公共设置器的匹配,映射列值。这些名称可以直接匹配,也可以通过使用“camel”大小写将分隔带下划线的部分的名称转换为相同的名称来匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2014-01-09
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多