Android:我在SQLite中插入日期时收到错误

时间:2014-04-24 11:10:19

标签: android android-sqlite

这不是一个错误,而是一个问题。 我没有收到任何错误,也没有应用程序崩溃。一切正常,但是当我将数据库下载到我的PC并使用KiSQLite访问它时,我在表中插入的日期显示为"无效的日期"。 我试过两种方法: 1.

public void SaveInfo(String value){
        SQLiteDatabase mDatabase = new myDbHelper(getApplicationContext()).getWritableDatabase();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        String dt = dateFormat.format(date);
        mDatabase.execSQL("insert into mytableinfo(datakm,km) values ('"+dt+"',"+value+")");
        mDatabase.close();
    }

2

public void SaveInfo(String value){
        SQLiteDatabase mDatabase = new myDbHelper(getApplicationContext()).getWritableDatabase();
        mDatabase.execSQL("insert into mytableinfo(datakm,km) values (datetime(),"+value+")");
        mDatabase.close();
    }

我想要做的就是在该表中插入一条记录,其日期为今天(现在)和另一个值。

我该怎么办? 这两种方法似乎都插入了无效的日期值......

请帮忙 谢谢

修改 这是我的表格声明

sqlu = "CREATE TABLE IF NOT EXISTS " + TABLE_PARCURS + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                PARC_DATA + " DATE NOT NULL, " +
                PARC_KM + " TEXT) ";
        Log.e("CREATE tbl:", sqlu);
        db.execSQL(sqlu);

是不是错了?我应该将日期声明为TEXT而不是DATE吗?

3 个答案:

答案 0 :(得分:0)

试试这个

String mydate = dateFormat.format(Calendar.getInstance().getTime());

答案 1 :(得分:0)

我不能告诉你的代码有什么问题,但你可能会像我一样。

   ContentValues newValues = new ContentValues();

    // Assign values for each row.
    newValues.put(Constants.EVENT_TYPE_ID, event.getEvent_type_id().getId());
    newValues.put(Constants.EVENT_TITLE, event.getEvent_title());
    newValues.put(Constants.EVENT_TEXT, event.getEvent_text());
    newValues.put(Constants.EVENT_DATE, event.getEvent_date());
    newValues.put(Constants.CREATE_DATE, event.getCreate_date());
    newValues.put(Constants.EVENT_PIC, event.getEvent_pic());
    newValues.put(Constants.EVENT_DISPLAY_DATE, event.getDisplay_date());
    newValues.put(Constants.EVENT_INTERVAL, 0.0);
    newValues.put(Constants.EVENT_SONG, "");
    newValues.put(Constants.EVENT_VIDEO, "");
    long numOfCulm = myDataBase.insert(Constants.TABLE_EVENTS, null, newValues);

常量 - 是我保存所有键的类。

答案 2 :(得分:0)

看起来我的问题的解决方案是将日期字段声明为TEXT并在字段中插入格式化日期。显然,如果我这样做,SQLite / Android会将TEXT字段视为DATE。

因此,表声明将是:

sqlu = "CREATE TABLE IF NOT EXISTS " + TABLE_PARCURS + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                PARC_DATA + " TEXT NOT NULL, " + // <-- here is what I changed
                PARC_KM + " TEXT) ";
        Log.e("CREATE tbl:", sqlu);
        db.execSQL(sqlu);

插入代码将是相同的(具有格式化日期)

稍后我可以使用DATE utils(如

)查询表
SELECT * FROM table where date(datakm)=date(datetime())

(这将返回表中当前日期在datakm字段中的所有行)

基本上,我的问题已经解决了。 谢谢你的时间,但我自己找到了解决方案。我写了解决方案作为答案,以便其他有此问题的开发人员可以解决他们的问题。 祝你好运