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.
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 ↓
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.
Lorsque vous ouvrez le fichier texte extrait
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 Un fichier HTML est créé sans caractères déformés comme
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 |
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);
}
}
}