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