Beschreibt die Vorgehensweise beim Einfügen von Eijiros Wörterbuchdaten in eine Oracle-Tabelle. Dieses Mal beschreiben wir den Zugriff von Oracle DB aus Java aus der Extraktion von Wörterbuchdaten. Die Frage der Eingabe von Daten aus Wörterbuchdaten in Oracle DB wird im nächsten Artikel beschrieben.
Ich habe eine Textdatei unter Bezugnahme auf Erstellen einer SVL-Problemsammlung aus Eijiro erstellt. Übrigens habe ich es wie ↓ eingestellt
Ich habe es wie oben eingestellt
Übrigens gebe ich im HTML-Dateiformat aus und analysiere die Textdatei mit Jsoup.
Wenn Sie die extrahierte Textdatei öffnen
Die Charaktere sind verstümmelt wie. Bei dieser Geschwindigkeit kann Jsoup nicht gut damit umgehen (nein, es ist wahr, aber es ist ärgerlich), also habe ich ein Programm erstellt, um den Zeichencode in Java zu konvertieren.
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("Bei der Eingabe / Ausgabe der Datei ist ein Fehler aufgetreten");
}
}
}
Wenn Sie das obige Programm ausführen Eine HTML-Datei wird ohne verstümmelte Zeichen wie erstellt
Erstellen Sie in orace12c eine Tabelle mit dem Namen WORD_DICTIONARY und definieren Sie die folgenden Attribute
Name | Schimmel | Erläuterung |
---|---|---|
WORD | VARCHAR2(200) | Wort |
MEANING | CLOB | Japanische Übersetzung von Wörtern |
SHORT_VER | VARCHAR2(2000) | Teil von BEDEUTUNG(2000 Bytes)Lagern |
WORD_LEVEL | VARCHAR2(20) | Wortebene |
WORD_INDEX | UMBER(10) | Eine Nummer, die jedem Wort eindeutig zugeordnet ist |
SEARCH_WORD | VARCHAR2(200) | Untere Wortkonvertierung für die Suche |
Wir standardisieren die Verarbeitung rund um Connection, implementieren Einfügeanweisungen auf niedriger Ebene und erweitern die Batch-Methode von QueryRunner, die nicht einfach zu verwenden ist.
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>();
//Ab oracle12c muss eine Verbindung über den Dienstnamen anstelle der SID hergestellt werden, sodass die gesamte tns-Definition geschrieben werden muss
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(), //Stellen Sie eine Verbindung her
sql, //Abfrage auszuführen
list //Parameter, die an die Abfrage übergeben werden sollen
);
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);
}
}
}