代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

插入一个值部分来自另一个表的记录

  •  0
  • Björn Pollex  · 技术社区  · 14 年前

    我有两张桌子, 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!");
    

    基本上,我得到与名称对应的ID,然后插入蛋白质。这在很多方面似乎很笨拙。有没有更优雅的方式来实现这一点?我正在处理一个sqlite数据库。

    1 回复  |  直到 14 年前
        1
  •  5
  •   Romain Hippeau    14 年前

    试试这个

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

    然后使用shortname和uniprotkbaccessionnumber作为参数