0
DBからデータを読み込み、コールバックを使用してDBからデータの各行を追加するのが好きです。私はコールバックが動作するように管理しましたが、どのようにデータをファイルに追加するのか分かりません。ここに私のコードです。コールバック付きファイルへの文字列の追加
メイン
public class Main {
public static void main(String[] args) {
FileIO fileIO = new FileIO();
fileIO.writeRStoFile();
}
}
FILEIO
public class FileIO implements DBAccess.CallBack {
public void writeRStoFile() {
DBAccess dbAccess = new DBAccess(this);
String fileName = "/result.csv";
try (FileWriter fw = new FileWriter(fileName)) {
System.out.println("Starting data download from DB...");
dbAccess.readDB();
// HERE I LIKE TO APPEND EACH ROW TO THE FILE
fw.append('\n');
System.out.println("Finished data download from DB...");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void iAmDone(String row) {
System.out.println("Row: " + row);
}
}
DBACCESS
public class DBAccess {
public interface CallBack {
public void iAmDone(String row);
}
private final CallBack callBack;
public DBAccess(CallBack callBack) {
this.callBack = callBack;
}
public void readDB() {
String url = "jdbc:Cobol:////Dev/Project Files/DatAndCpyFiles";
try (Connection con = DriverManager.getConnection(url, "", "");
Statement stmt = con.createStatement())
{
stmt.setFetchSize(10);
Class.forName("com.hxtt.sql.cobol.CobolDriver").newInstance();
String sql = "select * from PROFS";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData resultSetMetaData = rs.getMetaData();
int iNumCols = resultSetMetaData.getColumnCount();
for (int i = 1; i <= iNumCols; i++) {
callBack.iAmDone(resultSetMetaData.getColumnLabel(i) + ";");
}
String field;
while (rs.next()) {
String row = "";
for (int i = 1; i <= iNumCols; i++) {
field = rs.getString(i);
field = field.trim() + ";";
row = row + field;
}
callBack.iAmDone(row);
}
rs.close();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
私はwriteRStoFile()
方法へiAmDone()
からデータを取得するかどうかはわかりません。私はコンソールにデータを印刷することができます。
これは問題ではありません。問題は 'iAmDone'を' fw.append'にリンクすることです。 – g3blv