2017-02-23 30 views
-1

Пытается создать приложение CRUD с помощью jdbc и mysql. У меня есть Person.class и две таблицы в базе данных:Добавить человека в базу данных с полем ArrayList. Servlet

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 ; 

Как я могу добавить человека с поля списка телефонов в базу данных с помощью сервлетов ??? Например:
Harry Smith +37521987902
+56727172713
+45679012214

+0

Так что именно этот вопрос? – Mureinik

+0

Как я могу добавить человека с полем Список телефонов в базу данных с помощью Servlets ??? –

ответ

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