I am working on java project in which i am creating csv file using apache metamodel.
Code is:
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()));
}
}
In my code i am creating csv and inserting data into csv file and it is working. But now my requirement to delete date data from csv according to datetime format (MM-dd-yyyy hh-mm-ss) so i want to delete the data which are less then equal to date which i have given in where condition.
code for delete data is:
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()));
}
Now my problem i.e when i used Mutable column to delete data then it is not deleling any data for eg:
Column column = new MutableColumn("DateInNumber", ColumnType.TIMESTAMP, table, 3, false);
dataContext.executeUpdate(new DeleteFrom(table).where(column).lessThanOrEquals(getDateValue()));
But i used column name to delete code then it deleting but if not in correct way for example if date in csv file is '11-11-2020 07:59:02' and i am deleting according '02-01-2021 07:59:02' then it is deleting latest data not old data.
code:
dataContext.executeUpdate(new DeleteFrom(table).where("DateInNumber").lessThanOrEquals(getDateValue()));
How can i delele data from csv using where clause for timestamp column using apache metamodel?