Multiplo Database db2 e sqlserver, query

di il
18 risposte

18 Risposte - Pagina 2

  • Re: Multiplo Database db2 e sqlserver, query

    Questo è il risultato finale:
    
    // Traduzione in Db2 a SqlServer
    	public void getTraduzione() throws Exception {
    		List<DizioPt> listDizio = new ArrayList<DizioPt>();
    		List<ClassHdrNls> listHdr = new ArrayList<ClassHdrNls>();
    
    		String className = "";
    		String language = "";
    		String nlsClassName = "";
    		String lingua = "";
    		String keyword = "";
    		String traduzione = "";
    
    		Database database = new Database();
    
    		// Db2
    		Connection dbConnectionDb2 = null;
    		Statement statementDb2 = null;
    
    		// SqlServer
    		Connection dbConnectionSqlServer = null;
    		Statement statementSqlServer = null;
    
    		// Query Db2
    		String queryDb2 = "select * from THERA.CLASS_HDR_NLS WHERE LANGUAGE='en'";
    
    		// Query SqlServer
    		String querySqlServer = "select * from DIZIOPT WHERE LINGUA='ENG'";
    
    		try {
    			// Connessione --> SqlServer
    			dbConnectionSqlServer = database.getConnectionSqlServer();
    			statementSqlServer = dbConnectionSqlServer.createStatement();
    
    			// Connessione -->Db2
    			dbConnectionDb2 = database.getConnectionDb2();
    			statementDb2 = dbConnectionDb2.createStatement();
    
    			// Risultato SqlServer
    			ResultSet rsSqlServer = statementSqlServer.executeQuery(querySqlServer);
    
    			// Risultato Db2
    			ResultSet rsDb2 = statementDb2.executeQuery(queryDb2);
    
    			while (rsSqlServer.next()) {
    
    				DizioPt diziopt = new DizioPt();
    				lingua = rsSqlServer.getString("LINGUA");
    				diziopt.setLingua(lingua);
    				keyword = rsSqlServer.getString("KEYWORD");
    				diziopt.setKeyword(keyword);
    				traduzione = rsSqlServer.getString("TRADUZIONE");
    				diziopt.setTraduzione(traduzione);
    				listDizio.add(diziopt);
    
    				while (rsDb2.next()) {
    					ClassHdrNls classHdrNls = new ClassHdrNls();
    					className = rsDb2.getString("CLASS_NAME");
    					classHdrNls.setClassName(className);
    					language = rsDb2.getString("LANGUAGE");
    					classHdrNls.setLanguage(language);
    					nlsClassName = rsDb2.getString("NLS_CLASS_NAME");
    					classHdrNls.setNlsClassName(nlsClassName);
    					listHdr.add(classHdrNls);
    
    				}
    
    				for (int i = 0; i < listHdr.size(); i++) {
    					for (int j = 0; j < listDizio.size(); j++) {
    
    						if (listHdr.get(i).getNlsClassName().equalsIgnoreCase(listDizio.get(j).getKeyword())
    								&& listHdr.get(i).getLanguage()
    										.equalsIgnoreCase(listDizio.get(j).getLingua().toLowerCase().substring(0, 2))) {
    
    							System.out.println("Lingua: " + listHdr.get(i).getLanguage());
    							System.out.println("Testo: " + listHdr.get(i).getNlsClassName());
    							System.out.println("Traduzione: " + listDizio.get(j).getTraduzione());
    						} else {
    							System.out.println("Elementi in uguaglianza non trovato");
    							System.exit(0);
    						}
    
    					}
    				}
    
    			}
    
    		} catch (SQLException e) {
    
    			System.out.println(e.getMessage());
    
    		} finally {
    
    			if (statementDb2 != null && statementSqlServer != null) {
    				statementDb2.close();
    				statementSqlServer.close();
    			}
    
    			if (dbConnectionDb2 != null && dbConnectionSqlServer != null) {
    				dbConnectionDb2.close();
    				dbConnectionSqlServer.close();
    			}
    
    		}
    
    	}
    
    
    Se la colonna LANGUAGE è uguale alla COLONNA LINGUA e la colonna NLS_CLASS_NAME è uguale alla COLONNA KEYWORD
    VISTO CHE ENTRAMBI SONO VERI, se hai notato la stringa lingua l'ho trasformato in minuscolo e l'ho tagliato la stringa in modo che diventi "en", visto che prima era ENG

    Ci sono Colonne che si trovano i valori con altre colonne di un altra tabella, il restante ovviamente non sono uguali è non si deve considerare
    Il problema sta nel ciclo For, non trova gli elementi, va direttamente nel ELSE . Come posso correggere questo errore?
    Non stampa
  • Re: Multiplo Database db2 e sqlserver, query

    Metodo db2:
    
    // Lista Db2 CLASS_HDR_NLS
    	public List<ClassHdrNls> getListClassHdrNls() throws Exception {
    		ArrayList<ClassHdrNls> listClassHdrNls = new ArrayList<ClassHdrNls>();
    		Database database = new Database();
    		Connection dbConnectionDb2 = null;
    		Statement statementDb2 = null;
    
    		String queryDb2 = "select * from THERA.CLASS_HDR_NLS";
    
    		try {
    			dbConnectionDb2 = database.getConnectionDb2();
    			statementDb2 = dbConnectionDb2.createStatement();
    
    			ResultSet rs = statementDb2.executeQuery(queryDb2);
    
    			while (rs.next()) {
    				ClassHdrNls classHdrNls = new ClassHdrNls();
    
    				String className = rs.getString("CLASS_NAME");
    				classHdrNls.setClassName(className);
    				String language = rs.getString("LANGUAGE");
    				classHdrNls.setLanguage(language);
    				String nlsClassName = rs.getString("NLS_CLASS_NAME");
    				classHdrNls.setNlsClassName(nlsClassName);
    				String nlsPlClassName = rs.getString("NLS_PL_CLASS_NAME");
    				classHdrNls.setNlsPlClassName(nlsPlClassName);
    				listClassHdrNls.add(classHdrNls);
    
    //				System.out.println("---------------------------------------------");
    //				System.out.println("***THERA.CLASS_HDR_NLS***");
    //				System.out.println("CLASS_NAME: " + classHdrNls.getClassName());
    //				System.out.println("LANGUAGE: " + classHdrNls.getLanguage());
    //				System.out.println("NLS_CLASS_NAME: " + classHdrNls.getNlsClassName());
    //				System.out.println("NLS_PL_CLASS_NAME: " + classHdrNls.getNlsPlClassName());
    //				System.out.println("---------------------------------------------");
    
    			}
    
    		} catch (SQLException e) {
    
    			System.out.println(e.getMessage());
    
    		} finally {
    
    			if (statementDb2 != null) {
    				statementDb2.close();
    			}
    
    			if (dbConnectionDb2 != null) {
    				dbConnectionDb2.close();
    			}
    
    		}
    		return listClassHdrNls;
    	}
    
    Metodo sqlserver:
    
    // Lista Popolata DizioPt SQLSERVER
    	public List<DizioPt> getListDizioPt() throws Exception {
    		ArrayList<DizioPt> listDizio = new ArrayList<DizioPt>();
    		Database database = new Database();
    		Connection dbConnectionSqlServer = null;
    		Statement statementSqlServer = null;
    
    		String queryDizio = "select * from DIZIOPT";
    
    		try {
    
    			dbConnectionSqlServer = database.getConnectionSqlServer();
    			statementSqlServer = dbConnectionSqlServer.createStatement();
    			ResultSet rs = statementSqlServer.executeQuery(queryDizio);
    
    			while (rs.next()) {
    				DizioPt diziopt = new DizioPt();
    
    				int stato = rs.getInt("STATO");
    				diziopt.setStato(stato);
    				String lingua = rs.getString("LINGUA");
    				diziopt.setLingua(lingua);
    				String keyword = rs.getString("KEYWORD");
    				diziopt.setKeyword(keyword);
    				String traduzione = rs.getString("TRADUZIONE");
    				diziopt.setTraduzione(traduzione);
    				listDizio.add(diziopt);
    
    //				System.out.println("---------------------------------------------");
    //				System.out.println("***SQLSERVER***");
    //				System.out.println("stato: " + diziopt.getStato());
    //				System.out.println("lingua: " + diziopt.getLingua());
    //				System.out.println("keyword: " + diziopt.getKeyword());
    //				System.out.println("traduzione: " + diziopt.getTraduzione());
    //				System.out.println("---------------------------------------------");
    
    			}
    
    		} catch (SQLException e) {
    
    			System.out.println(e.getMessage());
    
    		} finally {
    
    			if (statementSqlServer != null) {
    				statementSqlServer.close();
    			}
    
    			if (dbConnectionSqlServer != null) {
    				dbConnectionSqlServer.close();
    			}
    
    		}
    		return listDizio;
    	}
    
    
    Metodo Traduttore il chiamante:
    
    public void getTraduzione2() throws Exception {
    		Traduttore tra = new Traduttore();
    
    		List<DizioPt> sqlServer = getListDizioPt();
    		List<ClassHdrNls> db2 = getListClassHdrNls();
    
    		for (int i = 0; i < db2.size(); i++) {
    			for (int j = 0; j < sqlServer.size(); j++) {
    				if (db2.get(i).getClassName().equals(sqlServer.get(j).getKeyword())) {
    
    					System.out.println("Lingua: " + db2.get(i).getLanguage());
    					System.out.println("Testo Class Name: " + db2.get(i).getClassName());
    					System.out.println("Testo Keyword: " + sqlServer.get(j).getKeyword());
    					System.out.println("Traduzione: " + sqlServer.get(j).getTraduzione());
    				} else {
    					System.out.println("Uguaglianze: NON TROVATO!!!");
    					System.exit(0);
    				}
    
    			}
    		}
    
    	}
    
    Ho fatto in questa versione che è più facile, ma lo stesso non mi dà i risultati, sicuramente i record della prima tabella e seconda tabella non sono uguali e non stampa niente
  • Re: Multiplo Database db2 e sqlserver, query

    imparareJava ha scritto:


    Ho fatto in questa versione che è più facile, ma lo stesso non mi dà i risultati, sicuramente i record della prima tabella e seconda tabella non sono uguali e non stampa niente
    I due metodi di query sono sensati. Non li ho verificati in dettaglio ma ad occhio il popolamento delle liste è appropriato.

    Invece la parte dopo è dubbia. Hai fatto un doppio ciclo for annidato. Questo ti permette di fare tutte le "combinazioni" tra due elementi di una e dell'altra lista. Questo ti permette di trovare le correlazioni tra className su db2 e keyword su sqlServer, se esistono davvero.

    Fare un else con "non trovato" e poi un exit(0), NON ha senso. Se non c'è una correlazione, non vuol dire nulla. Devi andare avanti con le combinazioni!
    Quindi: togli quel else. E vedrai cosa ti stampa ...
  • Re: Multiplo Database db2 e sqlserver, query

    Funziona, Grazie
Devi accedere o registrarti per scrivere nel forum
18 risposte