Android将DATE(now)添加到SQLite数据库

问题描述:

目前我的SQLite数据库工作得很好,我已经阅读了各种方法,如this one来实现这一目标,尽管目前我在设置Date构造函数时遇到问题,以及如何定义使用的数据在把它的数据库(和得到它回来了!)Android将DATE(now)添加到SQLite数据库

到目前为止,我已经使用静态最后弦乐来定义我的数据变量,notsure这是使用日期的正确方法。

我不关心的时候,只是入门的创建日期。

下面是我的java类:

import java.sql.Date; 
import java.text.SimpleDateFormat; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class Stats { 

    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_WEIGHT = "weight"; 
    public static final String KEY_WAIST = "waist"; 
    public static final String KEY_CHEST = "chest"; 
    public static final String KEY_LEGS = "legs"; 
    public static final String KEY_ARMS = "arms"; 
    public static final String KEY_DATE = "date"; 


    private static final String DATABASE_NAME = "statsDB"; 
    private static final String DATABASE_TABLE = "personalStats"; 
    private static final int DATABASE_VERSION = 3; 

    private DbHelper ffHelper; 
    private final Context ffContext; 
    private SQLiteDatabase ffDatabase; 

    private static class DbHelper extends SQLiteOpenHelper { 

     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 

     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_WEIGHT 
        + " TEXT NOT NULL, " + KEY_WAIST + " TEXT NOT NULL, " 
        + KEY_CHEST + " TEXT NOT NULL, " + KEY_LEGS 
        + " TEXT NOT NULL, " + KEY_ARMS + " TEXT NOT NULL, " 
        + KEY_DATE + " TEXT NOT NULL);"); 

     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(db); 

     } 
    } 

    public Stats(Context c) { 
     ffContext = c; 
    } 

    public Stats open() throws SQLException { 
     ffHelper = new DbHelper(ffContext); 
     ffDatabase = ffHelper.getWritableDatabase(); 
     return this; 

    } 

    public void close() { 
     ffHelper.close(); 

    } 

    public long createEntry(String weight, String waist, String chest, String legs, String arms) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date date = new Date(); 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_WEIGHT, weight); 
     cv.put(KEY_WAIST, waist); 
     cv.put(KEY_CHEST, chest); 
     cv.put(KEY_LEGS, legs); 
     cv.put(KEY_ARMS, arms); 
     cv.put("date_created", dateFormat.format(date)); 
     return ffDatabase.insert(DATABASE_TABLE, null, cv); 

    } 

    public String getData() { 
     String[] columns = new String[] { KEY_ROWID, KEY_WEIGHT, KEY_WAIST, KEY_CHEST, KEY_LEGS, KEY_ARMS, KEY_DATE }; 
     Cursor c = ffDatabase.query(DATABASE_TABLE, columns, null, null, null, 
       null, null); 
     String result = ""; 
     int iRow = c.getColumnIndex(KEY_ROWID); 
     int iWeight = c.getColumnIndex(KEY_WEIGHT); 
     int iWaist = c.getColumnIndex(KEY_WAIST); 
     int iChest = c.getColumnIndex(KEY_CHEST); 
     int iLegs = c.getColumnIndex(KEY_LEGS); 
     int iArms = c.getColumnIndex(KEY_ARMS); 
     int iDate = c.getColumnIndex(KEY_DATE); 
     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      result = result + c.getString(iRow) + " " + c.getString(iWeight) 
        + " " + c.getString(iWaist) 
        + " " + c.getString(iChest) 
        + " " + c.getString(iLegs) 
        + " " + c.getString(iArms) 
        + " " + c.getString(iDate)+ "\n"; 

     } 

     return result; 
    } 
} 

显然被提及任何时间日期是我尝试添加这个额外的功能。

+0

问题出在哪里准确?我们没有成功插入当前日期?你有没有错误日志? – 2013-05-09 13:56:20

+0

问题是我不能输入当前日期到我的数据库,我导入了java.util中的类和我绑在几种不同的方法的过程中日是否有人知道根据我目前做的最好的办法,想知道码? – dyatesupnorth 2013-05-09 14:00:15

+0

你应该把它声明为一个日期,而不是文本: 'KEY_DATE + “DATE NOT NULL);”' ,改变您的格式: 'DATEFORMAT =新的SimpleDateFormat( “YYYY-MM-DD”)' – 2013-05-09 14:03:16

你可以把日期就像在数据库中的字符串,但该字符串必须有良好的格式。 SQLite的是:

YYYY-MM-dd 
YYYY-MM-dd hh:mm 
YYYY-MM-dd hh:mm:ss 
YYYY-MM-dd hh:mm:ss.sss 
YYYY-MM-DDThh:mm 
YYYY-MM-DDThh:mm:ss 
YYYY-MM-DDThh:mm:ss.sss 
hh:mm 
hh:mm:ss 
hh:mm:ss.sss 

像约恩写,你可以转换日期字符串:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

String dateForinsert = dateFormat(new GregorianCalendar(2013, GregorianCalendar.MAY, 5).getTime()); 

“现在,” 你可以用设置:

String dateForinsert = dateFormat(new GregorianCalendar().getTime());