Datetime does not show up

后端 未结 2 501
臣服心动
臣服心动 2021-01-26 02:04

I am trying to get timestamp to show- I have tried the onCreate query in different ways and also tried to to have addTime as a value in addPrime<

2条回答
  •  感情败类
    2021-01-26 02:44

    This seems to work.

    In your values create db.xml

    
    
        prime
    
        _id
        prime_no
        date_time
    
        
            @string/prime_table_column_id
            @string/prime_table_column_prime_no
            @string/prime_table_column_datetime
        
    
        CREATE TABLE prime ( _id INTEGER PRIMARY KEY AUTOINCREMENT, prime_no TEXT, date_time DATETIME DEFAULT CURRENT_TIMESTAMP );
        DROP TABLE IF EXISTS prime
        INSERT INTO prime (prime_no, date_time) VALUES(?,?)
    
    

    Prime class

    package si.kseneman.utilities;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Locale;
    
    public class Prime {
    
        private static final String format = "yyyy-MM-dd HH:mm:ss";
        private static final SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.ENGLISH);
    
        private int id;
        private String primeNo;
        private Calendar dateTime;
    
        public Prime(String primeNo) {
            this.id = -1;
            this.primeNo = primeNo;
            this.dateTime = Calendar.getInstance();
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getPrimeNo() {
            return primeNo;
        }
    
        public void setPrimeNo(String primeNo) {
            this.primeNo = primeNo;
        }
    
        public String getDateTime() {
            return formatter.format(dateTime.getTime());
        }
    
        public void setDateTime(Calendar calendar) {
            this.dateTime = (Calendar) calendar.clone();
        }
    
        public void setDateTime(String dateTimeString) {
            try {
               dateTime.setTime(formatter.parse(dateTimeString));
            } catch (ParseException e) {
              dateTime.setTimeInMillis(0);
           }
        }
    
        public void setDateTimeToNow() {
            this.dateTime = Calendar.getInstance();
        }
    }
    

    Prie SQL Lite Helper

    package si.kseneman.utilities;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    
    import java.lang.ref.WeakReference;
    
    import si.kseneman.mobile.R;
    
    public class PrimeDBSQLLiteHelper extends SQLiteOpenHelper {
    
        public static final int DATABASE_VERSION = 1;
        public static final String DATABASE_NAME = "Prime.db";
        private static final String TAG = PrimeDBSQLLiteHelper.class.getSimpleName();
        private WeakReference mContext;
    
        public PrimeDBSQLLiteHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            mContext = new WeakReference(context);
    
        }
    
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            sqLiteDatabase.execSQL(getString(R.string.createTableOfPrimes));
            Log.i(TAG, "DataBase created");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
            sqLiteDatabase.execSQL(getString(R.string.dropTableOfPrimes));
            this.onCreate(sqLiteDatabase);
        }
    
        private String getString(int resID) {
            return mContext.get() != null ? mContext.get().getString(resID) : null;
        }
    }
    

    Prime SingleTon database

     package si.kseneman.utilities;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteStatement;
    import android.os.Environment;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    
    import si.kseneman.mobile.R;
    
    public class PrimeDataSource {
    
        private static final String TAG = PrimeDataSource.class.getSimpleName();
        private static byte numberOfInstances;
        private SQLiteDatabase database;
        private PrimeDBSQLLiteHelper primeDBSQLLiteHelper;
        private static PrimeDataSource instance;
        private static final Object LOCK = new Object();
    
        private Context context;
    
    
        protected PrimeDataSource(Context context) {
            this.context = context.getApplicationContext();
        }
    
        public static synchronized PrimeDataSource getInstance(Context context) {
            if (instance == null) {
                instance = new PrimeDataSource(context);
            }
            numberOfInstances++;
            return instance;
        }
    
        public static synchronized void decrementNumberOfInstances() {
    
            if (--numberOfInstances <= 0) {
                instance.close();
            }
            numberOfInstances = numberOfInstances < 0 ? 0 : numberOfInstances; //Sanity?
        }
    
        public static synchronized void forceClose() {
            numberOfInstances = 0;
            instance.close();
        }
    
        private void close() {
            if (isDatabaseOpenOpen()) {
                primeDBSQLLiteHelper.close();
            }
            primeDBSQLLiteHelper = null;
            instance = null;
            database = null;
        }
    
        public synchronized void open() {
            if (database == null || !database.isOpen()) {
                primeDBSQLLiteHelper = new PrimeDBSQLLiteHelper(context);
                database = primeDBSQLLiteHelper.getWritableDatabase();
            }
        }
    
        public boolean isDatabaseOpenOpen() {
            return database != null && database.isOpen();
        }
    
    
        public synchronized void deleteAllPrimesFromDb() {
            try {
                database.delete(getString(R.string.prime_table_name), null, null);
            } catch (Exception e) {
                // Was it really created?
                createTableOfPrimes();
            }
        }
    
        public synchronized void createTableOfPrimes() {
            database.execSQL(getString(R.string.createTableOfPrimes));
        }
    
        public synchronized void dropTableOfJobs() {
            database.execSQL(getString(R.string.dropTableOfPrimes));
        }
    
        public synchronized void dropDataBase() {
            database.execSQL("DROP DATABASE IF EXISTS " + PrimeDBSQLLiteHelper.DATABASE_NAME);
        }
    
        public String getDatabasePath() {
            return (Environment.getDataDirectory() + File.separator + PrimeDBSQLLiteHelper.DATABASE_NAME);
        }
    
        public synchronized void insertListOfPrimes(List data) {
            synchronized (LOCK) {
                database.beginTransaction();
                SQLiteStatement stmt = database.compileStatement(getString(R.string.insertIntoTableOfPrimes));
                for (Prime p : data) {
                    stmt.bindString(1, p.getPrimeNo());
                    stmt.bindString(2, p.getDateTime());
    
                    stmt.executeInsert();
                    stmt.clearBindings();
                }
                database.setTransactionSuccessful();
                database.endTransaction();
                Log.i(TAG, "Insertion success");
            }
        }
    
        private Prime cursorToPrime(Cursor cursor) {
            // ID = 0 ; primeNo = 1; dateTime = 2;
            Prime p = new Prime(cursor.getString(1));
            p.setId(cursor.getInt(0));
            p.setDateTime(cursor.getString(2));
            return p;
        }
    
        public List getListOfPrimes() {
            synchronized (LOCK) {
                List listOfPrimes = new ArrayList();
    
                Cursor cursor = database.query(getString(R.string.prime_table_name), getStringArray(R.array.prime_table_all_columns), null, null, null, null, null);
    
                cursor.moveToFirst();
    
                while (!cursor.isAfterLast()) {
                    listOfPrimes.add(cursorToPrime(cursor));
                    cursor.moveToNext();
                }
    
                return listOfPrimes;
            }
        }
    
        public void insertPrime(Prime prime) {
            synchronized (LOCK) {
                database.beginTransaction();
                SQLiteStatement stmt = database.compileStatement(getString(R.string.insertIntoTableOfPrimes));
    
                stmt.bindString(1, prime.getPrimeNo());
                stmt.bindString(2, prime.getDateTime());
    
                stmt.executeInsert();
                stmt.clearBindings();
    
                database.setTransactionSuccessful();
                database.endTransaction();
            }
        }
    
        private int getCountFromCursor(Cursor cursor) {
            int result = cursor.moveToFirst() ? cursor.getCount() : 0;
            cursor.close();
            return result;
        }
    
        public int getPrimeCount() {
            synchronized (LOCK) {
                Cursor cursor = database.query(getString(R.string.prime_table_name), new String[]{getString(R.string.prime_table_column_id)}, null, null, null, null, null);
                return getCountFromCursor(cursor);
            }
        }
    
    
        private String getString(int resID) {
            return context.getString(resID);
        }
    
        private String[] getStringArray(int resID) {
            return context.getResources().getStringArray(resID);
        }
    
        private String[] getStringArrayFromResources(int... integers) {
            String[] result = new String[integers.length];
            for (int i = 0; i < integers.length; ++i) {
                result[i] = getString(integers[i]);
            }
            return result;
        }
    
    
    }
    

    In Activity

    private PrimeDataSource dataSource;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            dataSource = PrimeDataSource.getInstance(getApplicationContext());
            dataSource.open();
    
            List demoListOfPrimes = new ArrayList(5);
    
            demoListOfPrimes.add(new Prime("1"));
            demoListOfPrimes.add(new Prime("3"));
            demoListOfPrimes.add(new Prime("5"));
            demoListOfPrimes.add(new Prime("7"));
            demoListOfPrimes.add(new Prime("11"));
    
            dataSource.insertListOfPrimes(demoListOfPrimes);
    
            demoListOfPrimes = dataSource.getListOfPrimes();
    
            if(demoListOfPrimes.size() == 0){
                Log.i("", "Empty list");
            }
    
            for (Prime p : demoListOfPrimes) {
                Log.i("Prime: ", p.getPrimeNo() + " ; " + p.getDateTime());
            }
    
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            dataSource = null;
            PrimeDataSource.decrementNumberOfInstances();
        }
    

    LogCat output:

    04-07 22:45:18.590    1005-1005/si.kseneman.mobile I/PrimeDataSource﹕ Insertion success
    04-07 22:45:18.590    1005-1005/si.kseneman.mobile I/Prime:﹕ 1 ; 2015-04-07 22:45:18
    04-07 22:45:18.590    1005-1005/si.kseneman.mobile I/Prime:﹕ 3 ; 2015-04-07 22:45:18
    04-07 22:45:18.590    1005-1005/si.kseneman.mobile I/Prime:﹕ 5 ; 2015-04-07 22:45:18
    04-07 22:45:18.590    1005-1005/si.kseneman.mobile I/Prime:﹕ 7 ; 2015-04-07 22:45:18
    04-07 22:45:18.590    1005-1005/si.kseneman.mobile I/Prime:﹕ 11 ; 2015-04-07 22:45:18
    

    P.S. you may need to uninstall your app or drop your table for this to work

    Here is a zip of a simple project that displays the numbers in a listview activity: LINK

提交回复
热议问题