我正在研究 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 中删除数据?