1

我正在研究 java 项目,我正在使用 apache 元模型创建 csv 文件。

代码是:

public class CsvDemo {

    private static  String tableName = null;
    private static  UpdateableDataContext dataContext = null;
    
    public CsvDemo() {
        this.tableName = "test.csv";
        Resource resource = new FileResource("C:/test" + tableName);
        CsvConfiguration configuration = new CsvConfiguration();
        this.dataContext = new CsvDataContext(resource, configuration);
    }
    
    public static void doWork() {
        if (!tableExists()) {
            createTable();
        }
        appendData();
        deleteExpireDataFromCSV(dataContext, tableName);          

    }

    private static boolean tableExists() {
        return getTable() != null;
    }
    
    private static Table getTable() {
        return dataContext.getDefaultSchema().getTableByName(tableName);
    }

    private static void createTable() {
        dataContext.executeUpdate(new UpdateScript() {
            @Override
            public void run(UpdateCallback callback) {
                callback.createTable(dataContext.getDefaultSchema(), tableName)
                        .withColumn("name").ofType(ColumnType.VARCHAR)
                        .withColumn("gender").ofType(ColumnType.CHAR)
                        .withColumn("age").ofType(ColumnType.INTEGER)
                        .withColumn("DateInNumber").ofType(ColumnType.TIMESTAMP)
                        .execute();
            }
        });
    }
   private static void appendData() {
        dataContext.executeUpdate(new UpdateScript() {
            final Table table = getTable();
            @Override
            public void run(UpdateCallback callback) {
                callback.insertInto(table).value("name", "aadsfa")
                        .value("gender", 'M').value("age", 42).value("DateInNumber",getDateTime()).execute();
                callback.insertInto(table).value("name", "vvfsfdsv")
                        .value("gender", 'M').value("age", 42).value("DateInNumber",getDateTime()).execute();

            }
        });
    }
    public static void main(String[] args) {
        CsvDemo csvDemo = new CsvDemo();
        doWork();        
    }
    
    public static String getDateValue(){     
        DateTime dateTime= new DateTime();
        dateTime = dateTime.minusDays(10);
        DateTimeFormatter formatter = DateTimeFormat.forPattern("MM-dd-yyyy hh:mm:ss");
        String formatted = dateTime.toString(formatter);
        System.out.println("datetime :- " +formatted);
        return formatted;
    }
    
      public static String getDateTime(){     
        DateTime dateTime= new DateTime();
        DateTimeFormatter formatter = DateTimeFormat.forPattern("MM-dd-yyyy hh:mm:ss");
        String formatted = dateTime.toString(formatter);
        System.out.println("datetime :- " +formatted);
        return formatted;
    }

    public  static  void deleteExpireDataFromCSV(UpdateableDataContext dataContext,String tableName){
        String schemaName = dataContext.getDefaultSchema().getName();
        Table table = dataContext.getTableByQualifiedLabel(schemaName + "." + tableName);
        Column column = new MutableColumn("DateInNumber", ColumnType.TIMESTAMP, table, 2,  false);
      // dataContext.executeUpdate(new DeleteFrom(table).where("DateInNumber").lessThanOrEquals(getDateValue()));
        dataContext.executeUpdate(new DeleteFrom(table).where(column).lessThanOrEquals(getDateValue()));
    }
 
}

在我的代码中,我正在创建 csv 并将数据插入到 csv 文件中,并且它正在工作。但是现在我要求根据日期时间格式(MM-dd-yyyy hh-mm-ss)从 csv 中删除日期数据,所以我想删除小于等于我在 where 条件下给出的日期的数据。

删除数据的代码是:

 public  static  void deleteExpireDataFromCSV(UpdateableDataContext dataContext,String tableName){
        String schemaName = dataContext.getDefaultSchema().getName();
        Table table = dataContext.getTableByQualifiedLabel(schemaName + "." + tableName);
        Column column = new MutableColumn("DateInNumber", ColumnType.TIMESTAMP, table, 3,  false);
      // dataContext.executeUpdate(new DeleteFrom(table).where("DateInNumber").lessThanOrEquals(getDateValue()));
        dataContext.executeUpdate(new DeleteFrom(table).where(column).lessThanOrEquals(getDateValue()));
    }

现在我的问题是,当我使用 Mutable 列删除数据时,它不会删除任何数据,例如:

 Column column = new MutableColumn("DateInNumber", ColumnType.TIMESTAMP, table, 3,  false);         
            dataContext.executeUpdate(new DeleteFrom(table).where(column).lessThanOrEquals(getDateValue()));

但我使用列名删除代码,然后删除但如果不正确,例如如果 csv 文件中的日期是“11-11-2020 07:59:02”,我将根据“02-01-2021 07”删除: 59:02' 然后它正在删除最新数据而不是旧数据。

代码:

dataContext.executeUpdate(new DeleteFrom(table).where("DateInNumber").lessThanOrEquals(getDateValue()));

如何使用 apache 元模型的时间戳列的 where 子句从 csv 中删除数据?

4

0 回答 0