有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用ArrayList字段将人员添加到数据库。Servlet

正在尝试使用jdbc和mysql创建CRUD应用程序。我有一个人。类和数据库中的两个表:

class Person {
String name;
String surname;
List<String> phones;
}

Tables:    
`phone`
(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `owner` INT UNSIGNED NOT NULL,
    `number` VARCHAR(50) NOT NULL,
    CONSTRAINT `PK_phone` PRIMARY KEY (`id`)
)
  `person`
(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `surname` VARCHAR(150) NOT NULL,
    `name` VARCHAR(150) NOT NULL,
     CONSTRAINT `PK_phonebook` PRIMARY KEY (`id`)
)
ALTER TABLE `phone` 
 ADD CONSTRAINT `FK_phone_person`
    FOREIGN KEY (`owner`) REFERENCES `person` (`id`) ON DELETE Cascade ON UPDATE Cascade
;
SET FOREIGN_KEY_CHECKS=1 ;

如何使用Servlets将具有字段列表电话的人员添加到数据库??? 例如:
哈利·史密斯+37521987902
+5672713
+45679012214


共 (1) 个答案

  1. # 1 楼答案

    想法很简单,你可以用这种方式

    1. 插入你的人
    2. 找到那个人的身份
    3. 插入电话列表

    你可以这样使用它:

    try {
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(DB_URL, DB_username, DB_password);
    
        String query = "INSERT INTO person (surname, name) values(?, ?)";
        PreparedStatement preparedStatement = connection.prepareStatement(query);
        preparedStatement.setString(1, "hello");
        preparedStatement.setString(2, "jdbc");
    
        int affectedRows = preparedStatement.executeUpdate();
        long id = 0;
        if (affectedRows > 0) {
            ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
            if (generatedKeys.next()) {
                id = generatedKeys.getLong(1);
            } else {
                throw new SQLException("Creating user failed, no ID obtained.");
            }
        }
    
        connection.setAutoCommit(false);
        PreparedStatement ps = connection.prepareStatement("INSERT INTO phone (owner, number) values(?, ?)");
        for (String phone : listePhone) {
            preparedStatement.setLong(1, id);
            preparedStatement.setString(2, phone);
            ps.addBatch();
        }
        ps.executeBatch();
        connection.commit();
    
    } 
    

    您可以学习如何使用statement-batching一次性执行多条语句