1

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?

santosh
  • 435
  • 1
  • 7
  • 24

0 Answers0