[JAVA] Insérez les données du dictionnaire d'Eijiro dans une table Oracle

Au début

La procédure lors de l'insertion des données de dictionnaire d'Eijiro dans une table Oracle est décrite. Cette fois, nous décrivons l'accès depuis Java d'Oracle DB à partir de l'extraction des données du dictionnaire. La question de la saisie de données à partir de données de dictionnaire dans Oracle DB sera décrite dans l'article suivant.

Convertir les données du dictionnaire d'Eijiro en texte

Extraction des données du dictionnaire

J'ai créé un fichier texte en me référant à Comment créer une collection de problèmes SVL à partir d'Eijiro. Au fait, je l'ai mis comme ↓ image.png image.png

Je l'ai mis comme ci-dessus

En passant, je produis au format de fichier HTML et j'utilise Jsoup pour analyser le fichier texte.

Conversion de code de caractère des données extraites

Lorsque vous ouvrez le fichier texte extrait

image.png

Les caractères sont brouillés comme. À ce rythme, Jsoup ne peut pas le gérer correctement (non, c'est vrai, mais c'est ennuyeux), j'ai donc créé un programme pour convertir le code des caractères en Java.

FileReadTest2.java


package file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class FileReadTest2 {

	private static String FILE_PATH ="C:/Users/***/Desktop/puisan_101.txt";
	private static String FILE_OUT_PATH ="C:/Users/***/Desktop/puisan_102.txt";
	
	public static void main(String args[]) throws Exception{
		BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(FILE_PATH),"UTF-8"));
		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FILE_OUT_PATH),"UTF-8"));
		reader.lines().forEach(s->fileWriter(s,writer));
		reader.close();
		writer.close();
	}
	
	public static void fileWriter(String s,BufferedWriter writer){
		try{
			writer.write(s);
			writer.newLine();
		}catch(IOException e){
			e.printStackTrace();
			throw new RuntimeException("Une erreur s'est produite dans l'entrée / la sortie du fichier");
		}
	}
}

Lorsque vous exécutez le programme ci-dessus image.png Un fichier HTML est créé sans caractères déformés comme

Définition de la table DB

Créez une table appelée WORD_DICTIONARY dans orace12c et définissez les attributs suivants

Nom Moule La description
WORD VARCHAR2(200) mot
MEANING CLOB Traduction japonaise de mots
SHORT_VER VARCHAR2(2000) Fait partie de SIGNIFICATION(2000 octets)Ranger
WORD_LEVEL VARCHAR2(20) Niveau de mot
WORD_INDEX UMBER(10) Un numéro attribué de manière unique à chaque mot
SEARCH_WORD VARCHAR2(200) Conversion de mots inférieure pour la recherche

Programme qui exploite DB

Nous standardisons le traitement autour de Connection, implémentons des instructions d'insertion de bas niveau et étendons la méthode batch de QueryRunner, qui n'est pas facile à utiliser.

OperateDB.java


package word;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;

public class OperateDB {
    public static ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<Connection>();

	//Depuis oracle12c, il est nécessaire de se connecter à partir du nom du service au lieu du SID, il est donc nécessaire d'écrire la définition tns entière
	private static final String URL ="jdbc:oracle:thin:"		
			+ "@(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)"
			+ "(HOST = localhost)(PORT = 1521))"
			+ "(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME "
			+ "= triple_pb.co.jp)))";
	private static final String UID = "admin"; 
	private static final String PASS_WORD = "admin"; 
    
    
    public static void createConnection(){
    	try{
    		if(THREAD_LOCAL.get()==null){
    			Connection con = DriverManager.getConnection(URL, UID, PASS_WORD);
    			con.setAutoCommit(false);
    			THREAD_LOCAL.set(con);
    		}
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    }
    
    public static void closeConnection(){
    	try{
    		if(THREAD_LOCAL.get()!=null){
    			THREAD_LOCAL.get().close();
    		}
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    }
    
    public static void insert(List<Object[]> list,String sql){
    	try{
            new MyQueryRunner()			
            .batch(THREAD_LOCAL.get(), //Obtenez une connexion
            		sql, //Requête à exécuter
            		list  //Paramètres à transmettre à la requête
      	     );    			
            THREAD_LOCAL.get().commit();
    	}catch(Exception e){
    		e.printStackTrace();
    		try{
           		THREAD_LOCAL.get().rollback();
    		}catch(SQLException ex){
    			ex.printStackTrace();
    		}
    	}
    }
    
     public static class MyQueryRunner extends QueryRunner{
    	 public int[] batch(Connection con,String sql,List<Object[]> list)throws SQLException{
    	    Object[][]params = new Object[list.size()][];
    	    for(int i=0; i<list.size();i++){
    	    	params[i] = list.get(i);
    	    }
    	    return super.batch(con,sql,params);
    	  }
      }
}



Recommended Posts

Insérez les données du dictionnaire d'Eijiro dans une table Oracle
Insertion des données du dictionnaire d'Eijiro dans Oracle DB part2
Insérer des données dans la base de données à l'aide du fichier Yaml