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

Bjö*_*lex 0 sqlite select jdbc foreign-keys insert

我有两张桌子,ProteinsSpecies.ProteinSpecies.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!");
Run Code Online (Sandbox Code Playgroud)

基本上,我得到与名称对应的Id,然后插入蛋白质.这在许多方面看起来非常笨拙.是否有更优雅的方式来实现这一目标?我正在研究SQLite数据库.

Rom*_*eau 5

试试这个

INSERT INTO Proteins(SpeciesId, UniProtKBAccessionNumber) VALUES ((SELECT Id FROM Species WHERE ShortName = ?), ?)
Run Code Online (Sandbox Code Playgroud)

然后使用Shortname和UniProtKBAccessionNumber作为参数