2013-05-31 7 views
13

私は、Androidアプリに取り組んでいると私は4列ありRAWDATAと呼ばれるテーブルがあるHealthDev.dbと呼ばれるデータベース作成しています:SQLiteデータベースの列にタイムスタンプを挿入するには?関数time( 'now')を使用していますか?

は、私はプログラムsqlite3の中で働いている _id、foreignUserId、データを、タイムスタンプをbashシェルと私は、次の列スキーマパラメータを使用してタイムスタンプ列を持つことができることを考え出した: タイムスタンプTIMESTAMPのDEFAULT CURRENT_TIMESTAMP

をので、私は、私が使用するテーブルを作成する場合: 表RAWDATA(_id整数主キーの自動インクリメントを作成します、foreignUserId整数、データ実数、タイムスタンプTIMESTAMP DEFAULT CURRENT_TIMESTAMP);

これはbashでうまくいきました。

次に、私はsqlite3で練習し、timeStamp列に挿入し、time( 'now')関数を使用して値を格納すると、タイムスタンプを実際にHH:MM:SS協定時刻。

Androidアプリのjavaに変換したので、私は以下のコードを使用しました。このようにして、onCreateが呼び出されるとテーブルは自動的に約20行を生成します。これは、私が時刻( 'now')をjavaに正しく渡しているかどうかをテストするためのものです。

 // Below are variables to the database table name and the 
// database column names. 
public static final String TABLE_RAW_DATA = "rawData"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_FOREIGN_USER_ID = "foreignUserId"; 
public static final String COLUMN_DATA = "data"; 
    public static final String COLUMN_TIME_STAMP = "timeStamp"; 

// Database creation sql statement. 
private static final String DATABASE_CREATE = "create table " 
    + TABLE_RAW_DATA 
    + "(" 
    + COLUMN_ID + " integer primary key autoincrement, " 
    + COLUMN_FOREIGN_USER_ID + " integer, " 
    + COLUMN_DATA + " real, " 
    + COLUMN_TIME_STAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP" 
    + ");"; 

// initializes the columns of the database given by passing the DATABASE_CREATE 
// sql statement to the incoming database. 
public static void onCreate(SQLiteDatabase database) { 
    database.execSQL(DATABASE_CREATE); 
    // For testing 

    ContentValues contentValues = new ContentValues(); 
    System.out.println("The database is open? " + database.isOpen()); 
    for (int i = 0; i < 20; i++) 
    { 
     contentValues.put(COLUMN_FOREIGN_USER_ID, 8976); 
     contentValues.put(COLUMN_DATA, Math.random()*100); 
     contentValues.put(COLUMN_TIME_STAMP, " time('now') "); 

     database.insert(TABLE_RAW_DATA, null, contentValues); 

     //contentValues = new ContentValues(); 

    } 

    } 

食エミュレータでこのコードを実行した後、私は、次に日食アンドロイドプロジェクトのDDMSビューモードでファイルエクスプローラからデータベースファイルを引っ張ります。次に、データベースをbashシェルで開き、テーブルrawDataからすべての列を選択してシェルに表示しました。私は時間(「今」)が文字列として扱われ、関数ではないことに気づいた。 time( 'now')関数が機能したことを証明するために、timeStamp値にtime( 'now')を使って手動で新しい行を挿入しました。次に、すべての列を再度選択して、それらを再度表示します。タイムスタンプをHH:MM:SSとして正常に印刷しました。

環境に違いがあると思いますか? bashシェルは関数の時刻( 'now')を認識します。これはbashにsqlite3プログラムがあるので、cで書かれていますか?しかし、私はSQLデータベースを使用し、挿入を使用して日食では、時間( '今')を文字列として扱います。私はWindows 7 OSで作業していることを覚えておいてください。私はホストである私の学校からクライアント(SSH Secure Shell)としてbashにアクセスしています。

私の主な質問は、それが時間( 'now')関数を認識するようにコード化することです。

contentValues.put(COLUMN_TIME_STAMP, " time('now') "); 

それがデフォルトでその列に現在のタイムスタンプを挿入しません:列のデフォルト以来

答えて

20

あなたは完全にこの行を残せば何、CURRENT_TIMESTAMPのですか?

+0

ありがとうございました!あなたは素晴らしいです!それは働いた:) – fgharo91

+0

優秀!私の答えを「受け入れる」ように自由に感じてください! :-) – mharper

+0

確かに!私の質問に答えることができますか?最初の投稿に写真をアップロードしたかったので、評判が足りなかったのでできなかった。初めてstackoverflowで質問をする。ありがとう! – fgharo91

関連する問題