繁体   English   中英

jdbc使用自动增量字段将数据插入数据库

[英]jdbc insert datas into database with auto increment field

我有自动增量字段的问题。

我创建了这个表,

CREATE TABLE todo ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, title VARCHAR(255) NOT NULL, name VARCHAR(100) NOT NULL, sequence INT(1) NOT NULL, type VARCHAR(20) DEFAULT 'TODO', regdate DATETIME DEFAULT NOW(), PRIMARY KEY (id) );

我创建了这个模型对象

public class TodoDto {
private Long id;
private String name;
private String regDate;
private int sequence;
private String title;
private String type;

public TodoDto(Long id, String name, String regDate, int sequence, String title, String type) {
    super();
    this.id = id;
    this.name = name;
    this.regDate = regDate;
    this.sequence = sequence;
    this.title = title;
    this.type = type;
}

public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getRegDate() {
    return regDate;
}
public void setRegDate(String regDate) {
    this.regDate = regDate;
}
public int getSequence() {
    return sequence;
}
public void setSequence(int sequence) {
    this.sequence = sequence;
}
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}
public String getType() {
    return type;
}
public void setType(String type) {
    this.type = type;
}

@Override
public String toString() {
    return "TodoDto [id=" + id + ", name=" + name + ", regDate=" + regDate + ", sequence=" + sequence + ", title="
            + title + ", type=" + type + "]";
}

}

我创建它是为了将数据插入数据库

public List<TodoDto> getTodos() {
    List<TodoDto> list = new ArrayList<>();

    try {
        Class.forName("com.mysql.jdbc.Driver");
    }catch (Exception e) {
        e.printStackTrace();
    }

    String sql = "SELECT * FROM todo";

    try(Connection conn = DriverManager.getConnection(dburl, dbUser, dbpasswd);
            PreparedStatement ps = conn.prepareStatement(sql)){

        try(ResultSet rs = ps.executeQuery()){

            while(rs.next()) {
                Long id = rs.getLong("id");
                String title = rs.getString("title");
                String name = rs.getString("name");
                int sequence = rs.getInt("sequence");
                String regDate = rs.getString("regDate");
                String type = rs.getString("type");

                TodoDto todoDto = new TodoDto(id, title, name, sequence, regDate, type);
                list.add(todoDto);
            }

        }catch (Exception e) {
            e.printStackTrace();
        }

    }catch(Exception e){
        e.printStackTrace();
    }

    return list;
}

我创建了这个客户端来执行 TodoDao.java

    String title = "title";
    String name = "name";
    Long id = ???
    int sequence = 1;

    String type = "TODO";

    String currentDate = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE);

    TodoDto todoDto = new TodoDto(id, name, currentDate, sequence, title, type);

    TodoDao todoDao = new TodoDao();
    int insertCount = todoDao.addTodo(todoDto);

    System.out.println(insertCount);

在这个客户端,我不知道我应该如何初始化Long id

DB 上的 id 会自行增加。

那么我应该如何初始化它?

我认为这是一个简单的问题。 但我对它的了解不够,也没有人问

请让我知道我该怎么做

因为数据库负责自增,所以不用在java中初始化id。

您可以删除 NOT NULL。 不需要它,自动增量会照顾它

id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT

当您想使用 java 应用程序插入数据库时​​,请使用这样的语法

INSERT INTO Persons (name,regDate,sequence,title,type)
VALUES ('','','','',''); 

// Notice i ignored field id

或者

INSERT INTO Persons VALUES (NULL,'','','','','')

// Notice that i specified NULL in place where id value is expected

编辑:如果您必须指定 id,您可以使用命令LAST_INSERT_ID() 检查此链接以供参考LAST_INSERT_ID() MySQL它将返回将要使用的下一个 id 的编号。

暂无
暂无

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

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