2010-05-03 3 views
0

У меня есть две таблицы, 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.

ответ

4

Попробуйте

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

И затем использовать ShortName и UniProtKBAccessionNumber как ваши параметры

Смежные вопросы