2010-05-03 179 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爲您的參數

相關問題