2

以下のクラスは .csv をデータベース テーブルにインポートします。これは正常に動作しており、同じテーブルの別の列を更新する必要があります。このプログラムがデータベース テーブルのそれぞれの列で実行されたときに、現在のシステム タイムスタンプを更新する必要があります。

例: Db2 テーブルの Subjects 列は次のとおりです。 Eng Social Maths TimeStamp

.CSV ファイルには Eng Social Maths の 3 つの列しかありません。

.csv ファイルが (上記のプログラムを使用して) db2 にインポートされると、TimeStamp を除くすべての列が更新されます。タイムスタンプは、.csv ファイルがテーブルにアップロードされたときに追跡するために含まれています。では、TimeStamp 列を現在のシステム タイムスタンプで同時に更新する方法。助けてください

public class CSVLoader {

private static final 
    String SQL_INSERT = "INSERT INTO OPPTYMGMT.${table}
         (${keys})      VALUES(${values})";

private static final String TABLE_REGEX = "\\$\\{table\\}";

private static final String KEYS_REGEX = "\\$\\{keys\\}";

private static final String VALUES_REGEX = "\\$\\{values\\}";

private Connection connection;

private char seprator;

public CSVLoader(Connection connection) {

    this.connection = connection;

    //Set default separator

    this.seprator = ',';
}

      public void loadCSV(String csvFile, String tableName) throws Exception {

    CSVReader csvReader = null;

    if(null == this.connection) {

        throw new Exception("Not a valid connection.");
    }

    try {

        csvReader = new CSVReader(new FileReader(csvFile), this.seprator);

    } catch (Exception e) {

        e.printStackTrace();

        throw new Exception("Error occured while executing file. "

                   + e.getMessage());

              }

        String[] headerRow = csvReader.readNext();

    if (null == headerRow) {

        throw new FileNotFoundException(


                        "No columns defined in given CSV file." +

                         "Please check the CSV file format.");
    }

    String questionmarks = StringUtils.repeat("?,", headerRow.length);

    questionmarks = (String) questionmarks.subSequence(0, questionmarks

            .length() - 1);


    String query = SQL_INSERT.replaceFirst(TABLE_REGEX, tableName);

    query = query
            .replaceFirst(KEYS_REGEX, StringUtils.join

             (headerRow,   ","));

    query = query.replaceFirst(VALUES_REGEX, questionmarks);

            System.out.println("Query: " + query);

    String[] nextLine;

    Connection con = null;

    PreparedStatement ps = null;

    try {
        con = this.connection;

        con.setAutoCommit(false);

        ps = con.prepareStatement(query);

                       final int batchSize = 1000;

                     int count = 0;

        Date date = null;

        while ((nextLine = csvReader.readNext()) != null) {

            System.out.println( "inside while" );

            if (null != nextLine) {

                int index = 1;

                for (String string : nextLine) {

                    date = DateUtil.convertToDate(string);

        if (null != date) {

                    ps.setDate(index++, new java.sql.Date(date

                    .getTime()));

                     } else {

                  ps.setString(index++, string);

    System.out.println( "string" +string);

                    }

                }

                ps.addBatch();

            }

            if (++count % batchSize == 0) {

                ps.executeBatch();

            }

                     }


        ps.executeBatch(); // insert remaining records

        con.commit();

    } catch (Exception e) {

        con.rollback();

        e.printStackTrace();

        throw new Exception(

        "Error occured while loading data 

                from file                to                      database."

               + e.getMessage());

    } finally {

             if (null != ps)


            ps.close();

        if (null != con)

            con.close();

            System.out.println("csvReader will be closed");

        csvReader.close();

    }

}

public char getSeprator() {

    return seprator;

}

public void setSeprator(char seprator) {

    this.seprator = seprator;

}


         }
4

3 に答える 3

0
SimpleDateFormat cDate = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date now = new Date();
String ccDate = cDate.format(now);

現在の時刻を取得し、文字列 ccDate を DB に挿入します。

于 2013-08-14T07:17:18.600 に答える
0

現在のシステムという表現を使用する場合、Java が実行されているシステムまたは DB2 が実行されているシステムを意味する場合があります。

前の回答でJavaの日付を取得できます。

DB2 の日付については、insert ステートメントでこれを指定する必要があります

current date

たとえば、テーブルの場合

create table t1 (date date)

insert into t1 values (current date)

最後に、本当に DB2 にデータをインポートしたい場合は、独自のツールを再作成するよりも、IMPORT または LOAD コマンドを使用することをお勧めします。

于 2013-08-14T10:09:15.363 に答える