Как реализовать эту программу для импорта в таблицу без использования инструкции INSERT INTO SELECT?

В настоящее время процесс импорта / вставки работает отлично. Но я не хочу писать один запрос для вставки и выбора, а вместо этого писать отдельный запрос для выбора из таблицы «snomed_descriptiondata» и отдельный запрос для вставки в таблицу «snomedinfo'_data».

My current Код:

package Snomed.Snomed;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;

import catalog.Root;

public class Snomedinfo {
  public void snomedinfoinsert()
    {
    Root oRoot = null;
    ResultSet oRsSelect = null;
    PreparedStatement oPrStmt = null;
    PreparedStatement oPrStmt2 = null;
    PreparedStatement oPrStmtSelect = null;
    String strSql = null;
    String strSql2 = null;
    String snomedcode=null;
    ResultSet oRs = null;
    String refid = null;
    String id = null;
    String effectivetime = null;
    String active = null;
    String moduleid = null;
    String conceptid = null;
    String languagecode = null;
    String typeid = null;
    String term = null;
    String caseSignificanceid = null;
    int count = 0;
    final int batchSize = 1000;
    try{
    oRoot = Root.createDbConnection(null);
    strSql = "SELECT  id FROM snomed_conceptdata WHERE active=1 ";
    oPrStmt2 = oRoot.con.prepareStatement(strSql);
    oRsSelect = oPrStmt2.executeQuery();
    String sql = "INSERT INTO snomedinfo_data (refid,id,effectivetime,active,moduleid,conceptid,languagecode,typeid,term,caseSignificanceid)SELECT refid,id,effectivetime,active,moduleid,conceptid,languagecode,typeid,term,caseSignificanceid from snomed_descriptiondata WHERE conceptid =? AND active=1" ; 
    oPrStmtSelect = oRoot.con.prepareStatement(sql);
    while (oRsSelect.next()) {
        snomedcode = Root.TrimString(oRsSelect.getString("id"));
        //String sql = "INSERT INTO snomedinfo_data (refid,id,effectivetime,active,moduleid,conceptid,languagecode,typeid,term,caseSignificanceid)SELECT refid,id,effectivetime,active,moduleid,conceptid,languagecode,typeid,term,caseSignificanceid from snomed_descriptiondata WHERE conceptid =? AND active=1" ; 
        //oPrStmtSelect = oRoot.con.prepareStatement(sql);
        oPrStmtSelect.setString(1,snomedcode);

        oPrStmtSelect.executeUpdate();                 
        }

    //oPrStmtSelect.executeBatch();
    System.out.println("done");
    }

    catch (Exception e) {
        e.printStackTrace();
    }

    finally {
        oRsSelect = Root.EcwCloseResultSet(oRsSelect);
        oRs = Root.EcwCloseResultSet(oRs);
        oPrStmt = Root.EcwClosePreparedStatement(oPrStmt);
        oPrStmt = Root.EcwClosePreparedStatement(oPrStmt2);
        oPrStmt = Root.EcwClosePreparedStatement(oPrStmtSelect);
        oRoot = Root.closeDbConnection(null, oRoot);
    }
}
    public static void main(String args[] ) throws Exception 
      { 
      Snomedinfo a = new Snomedinfo();
      a .snomedinfoinsert();
      }
} 

Примечание: как мне это сделать без использования вложенных циклов? Может ли кто-нибудь предоставить мне решение, соответствующее моей программе?

-1
задан 13 August 2018 в 14:20

1 ответ

Вы можете (и должны) включать запрос выбора идентификатора понятия в предложении IN:

INSERT INTO snomedinfo_data (refid, id, effectivetime, active, moduleid, conceptid, 
                             languagecode, typeid, term, caseSignificanceid) 
    SELECT refid, id, effectivetime, active, moduleid, conceptid, 
                    languagecode, typeid, term, caseSignificanceid 
           FROM snomed_descriptiondata 
           WHERE active = 1 AND conceptid IN 
               (SELECT cd.id FROM snomed_conceptdata cd WHERE cd.active = 1)

Таким образом, вы должны иметь возможность делать все в одном заявлении, которое будет заказом по сравнению с обработкой одних и тех же данных по строкам (ака медленнее) с помощью драйвера JDBC.

2
ответ дан 15 August 2018 в 17:03
  • 1
    нет запросов, которые должны быть отдельными, я не хочу писать их как один запрос! – david mathew 13 August 2018 в 14:30
  • 2
    поэтому в программе должно быть в общей сложности 3 запроса. Два запроса и 1 запрос вставки – david mathew 13 August 2018 в 14:30
  • 3
    Можете ли вы объяснить , почему запросы должны быть отдельными? Что вы делаете с промежуточными результатами? – Mick Mnemonic 13 August 2018 в 14:31
  • 4
    проблема в том, что я не знаю, как это сделать без использования вложенного цикла while – david mathew 13 August 2018 в 14:31
  • 5
    после извлечения «id» из таблицы snomed_conceptdata iam, выбрав только те записи из snomed_descriptiondata, где column conceptid = id – david mathew 13 August 2018 в 14:33

Другие вопросы по тегам:

Похожие вопросы: