従業員と呼ばれる10,000レコードのテーブルがあります。テーブルデータをJavaの複数のCSVファイルに書き込む
これらのデータを、マルチスレッドJavaを使用して、それぞれ2,000レコードの複数のCSVファイルに書き込む必要があります。
サンプル・コードは以下の通りです:
public class PrintbyThreads {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 5; i++) {
Runnable worker = new PrintFiles("" + i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
}
}
と
public class PrintFiles extends Thread implements Runnable {
private String command;
PrintFiles() {
super("my extending thread");
System.out.println("my thread created" + this);
start();
}
public PrintFiles(String command) {
this.command = command;
}
public void run() {
System.out.println(Thread.currentThread().getName()
+ " Start. Command = " + command);
dataBaseExecution();
System.out.println(Thread.currentThread().getName() + " End. Command ="
+ command);
}
public synchronized void dataBaseExecution() {
String tableName = "Employee";
String filename = "D:/db2csv/";
int recordsAtTime = 2000;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(
"URL", "Uname", "Password");
Statement stmt = con.createStatement();
stmt.setFetchSize(recordsAtTime);
ResultSet rs = stmt.executeQuery("select empid,empname,managerid from Employee");
int columnCount = rs.getMetaData().getColumnCount();
FileWriter fw = new FileWriter(filename + "" + tableName + ".csv");
for (int i = 1; i <= columnCount; i++) {
fw.append(rs.getMetaData().getColumnName(i));
fw.append(",");
}
fw.append(System.getProperty("line.separator"));
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
if (rs.getObject(i) != null) {
String data = rs.getObject(i).toString();
fw.append(data);
fw.append(",");
} else {
String data = "null";
fw.append(data);
fw.append(",");
}
}
// new line entered after each row
fw.append(System.getProperty("line.separator"));
}
fw.flush();
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return this.command;
}
}
私のコードは、私は5つのCSVファイルは各2000件のレコードを持つ必要があるすべての10000 records.butを有する単一のCSVファイルを与えています。
スレッド1は
スレッド2のETC employee2.csv
,,,,,に別の2000件のレコードを処理しなければならないemployee1.csvに最初の2000件のレコードを処理しなければなりません。
スレッドコードを使用すると、どのようにこの要件を達成できますか?
ご覧くださいhttps://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question ...あなたの質問はあまりにも広すぎます。 「私のために私の仕事をしてください」のように読む – GhostCat
申し訳ありません。私にもプログラムがあります。しかし、何らかのセキュリティ上の理由から、ここではコードを書いていません。私は完全なコードは必要ありません。 2000レコードが届くともう1つのCSVファイルを作成するロジックはほとんどありません。 –
* production *コードを記述する必要があるとは誰も言いません。 [mcve]を入れよう!それ以外の場合は、** nothing **を受け取りますが、ダウンボートとクローズリクエストを受け取ります。 – GhostCat