2010-05-03 224 views
0

我有两个表,ProteinsSpeciesProtein具有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!"); 

基本上,我得到相应于名称的Id,然后插入蛋白质。这在很多方面都很笨拙。有没有更好的方法来实现这个目标?我正在研究SQLite数据库。

回答

4

试试这个

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

然后用短名称并UniProtKBAccessionNumber为您的参数

相关问题