简体   繁体   English

JDBC / SQL-ID始终为0

[英]JDBC/SQL - ID is always 0

so i'm trying to insert an hardcoded member to my Members table. 所以我想将一个硬编码的成员插入我的Members表。 I'm using Spring Boot & JDBC on Eclipse. 我在Eclipse上使用Spring Boot和JDBC。

This is my schema.sql: 这是我的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());

i got a findAll method in a DAO class: 我在DAO类中找到了findAll方法:

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

when i run it, it returns: 当我运行它时,它返回:

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

As you can see the ID wasn't inserted for some reason. 如您所见,由于某种原因未插入ID。

my Member class is like this: 我的会员类是这样的:

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 + "]";
    }


}

How can i fix it? 我该如何解决? I tried to inserted different numbers, but i always get a zero in the log. 我试图插入不同的数字,但我总是在日志中得到零。

Thanks 谢谢

Column names of the query must match the setters in the target object. 查询的列名称必须与目标对象中的设置器匹配。

Your query has a column named id but there is no setId method. 您的查询有一个名为id的列,但没有setId方法。 You should either rename setUserId to setId or in the query give the alias user_id to id column. 您应该将setUserId重命名为setId或在查询中将别名user_id赋予id列。

From BeanPropertyRowMapper documentation: BeanPropertyRowMapper文档中:

Column values are mapped based on matching the column name as obtained from result set metadata to public setters for the corresponding properties. 根据从结果集元数据获得的列名与对应属性的公共设置器的匹配,来映射列值。 The names are matched either directly or by transforming a name separating the parts with underscores to the same name using "camel" case. 名称可以直接匹配,也可以通过使用“驼峰”大小写将下划线分隔的名称转换为相同名称来匹配。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM