Вставить запись со значением частично из другой таблицы - PullRequest
0 голосов
/ 03 мая 2010

У меня есть две таблицы, Proteins и Species. Protein имеет Species.Id в качестве ограничения внешнего ключа. Когда я вставляю данные, я знаю название вида, к которому относится белок, но не Id. Поэтому я делаю следующее:

    PreparedStatement query = connection.prepareStatement(
        "SELECT Id FROM Species WHERE ShortName = ?");
    query.setString(1, protein.getSpecies().getShortName());
    ResultSet result = query.executeQuery();
    if (result.next()) {
        PreparedStatement statement = connection.prepareStatement(
        "INSERT INTO Proteins(SpeciesId, UniProtKBAccessionNumber) VALUES (?, ?)");

        statement.setString(1, result.getString(1));
        statement.setString(2, protein.getUniProtKBAccessionNumber().toString());

        statement.execute();
    }
    else
        throw new IllegalArgumentException("The species of this protein is not recognized!");

Обычно я получаю идентификатор, соответствующий названию, и затем вставляю белок. Это кажется очень неуклюжим во многих отношениях. Есть ли более элегантный способ добиться этого? Я работаю над базой данных SQLite.

1 Ответ

5 голосов
/ 03 мая 2010

Попробуйте это

INSERT INTO Proteins(SpeciesId, UniProtKBAccessionNumber) VALUES ((SELECT Id FROM Species WHERE ShortName = ?), ?)

А затем используйте Shortname и UniProtKBAccessionNumber в качестве параметров

...