Android 애플리케이션에서 datetime이 'now'로 설정된 SQLite 레코드를 삽입하는 방법은 무엇입니까?


109

다음과 같이 생성 된 테이블이 있습니다.

create table notes (_id integer primary key autoincrement, created_date date)

레코드를 삽입하려면

ContentValues initialValues = new ContentValues(); 
initialValues.put("date_created", "");
long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

하지만 date_created 열을 지금 설정하는 방법 무엇입니까? 명확히하기 위해

initialValues.put("date_created", "datetime('now')");

올바른 해결책이 아닙니다. 열을 "datetime ( 'now')"텍스트로 설정합니다.


1
여기서 한 가지 문제는 Android가 DB에 SQLite를 사용한다는 것입니다. 열을 특정 유형으로 설정할 수 있지만 '친 화성'열만 설정합니다. SQLite를 사용하면 선언 방법에 관계없이 모든 열에 값을 넣을 수 있습니다. SQLite에게 문자열 '날짜'를 어디에 든 넣는 것은 꽤 괜찮습니다. sqlite.org에 더 자세한 설명이 있습니다. 나는 아래 e-satis의 답변에 투표하고 있는데, 그것이 내가하는 방법 (특히 Java 방식)입니다.
Will

답변:


194

Java 랩퍼 "ContentValues"를 사용하여 datetime 함수를 사용할 수 없습니다. 다음을 사용할 수 있습니다.

  • SQLiteDatabase.execSQL을 사용하여 원시 SQL 쿼리를 입력 할 수 있습니다.

    mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
  • 또는 자바 날짜 시간 기능 :

    // set the format to sql date time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = new Date();
    ContentValues initialValues = new ContentValues(); 
    initialValues.put("date_created", dateFormat.format(date));
    long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

1
코드를 '코드 샘플'로 다시 포맷하십시오. 그렇지 않으면 좋은 대답입니다.
Will

3
java.util.Date 또는 java.sql.Date입니까?
Greg B

5
java.util.Date,하지만 java.sql.Date 날짜로도 할 수 있다고 확신합니다.
e-satis

44

내 코드에서는 DATETIME DEFAULT CURRENT_TIMESTAMP열의 유형과 제약 조건으로 사용합니다.

귀하의 경우 귀하의 테이블 정의는

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)

32

방법 1

CURRENT_TIME  Inserts only time
CURRENT_DATE  Inserts only date
CURRENT_TIMESTAMP  Inserts both time and date

CREATE TABLE users(
    id INTEGER PRIMARY KEY,
    username TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

방법 2

db.execSQL("INSERT INTO users(username, created_at) 
            VALUES('ravitamada', 'datetime()'");

3 가지 방법 중 3 : 자바 날짜 함수 사용하기

private String getDateTime() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return dateFormat.format(date);
}

ContentValues values = new ContentValues();
values.put('username', 'ravitamada');
values.put('created_at', getDateTime());
// insert the row
long id = db.insert('users', null, values);

궁금한 점이 있으면 결과 문자열을 DATE 객체로 다시 전환하는 방법을 보여줄 수 있습니까?
erik apr

@erik 더 많은 정보를 제공 할 수 있습니까? 당신이 말한 것을 정확히 이해하고 있지 않습니다.
Rikin Patel 2015-04-30

그래서 위에서는 Date 객체를 가져 와서 sqlite 열에 배치 할 문자열로 변환합니다.하지만 데이터베이스에서 해당 문자열을 가져올 때 어떻게 Date 객체로 다시 변환합니까?
erik

1
@erik SimpleDateFormat 포맷터 = new SimpleDateFormat ( "yyyy-MM-dd HH : mm : ss"); formatter.parse (created_at);
Saksham

8

사용할 수있는 몇 가지 옵션이 있습니다.

  1. 대신 "(DATETIME ( 'now'))"문자열을 사용해 볼 수 있습니다.
  2. 날짜 시간을 직접 삽입하십시오. 즉 System.currentTimeMillis ()
  3. SQLite 테이블을 생성 할 때 created_date 열의 기본값을 현재 날짜 시간으로 지정하십시오.
  4. SQLiteDatabase.execSQL 을 사용 하여 직접 삽입 하십시오 .

숫자 1은 사용할 때 이상하지 (하지 작업을 수행 ContentValues하고 update()그냥 문자열을두고, DATETIME('now')열에.
바트 Friederichs

1
두 번째는 시간대에 문제가 있습니다. 나는 레코드를 삽입 DEFAULT CURRENT_TIMESTAMP하고 나중에 System.currentTimeMillis()업데이트 하는 데 사용 했습니다. 시간 차이가 있습니다.
Bart Friederichs 2013

@sooniln (DATETIME ( 'now'))가 실제로 현재 날짜 시간을 삽입하는지 확인 했습니까?
IgorGanapolsky 2014 년

로컬 datetime을 추가하려면 대신 "datetime ( 'now', 'localtime')"을 사용하십시오
Simon

7

나에게 문제는 "datetime('now')"값이 아닌 문자열로 보내는 것처럼 보입니다 .

내 생각은 현재 날짜 / 시간을 가져 와서 데이터베이스에 날짜 / 시간 값으로 보내는 방법을 찾거나 SQLite의 내장 (DATETIME('NOW'))매개 변수 를 사용하는 방법을 찾는 것입니다.

이 SO.com 질문 에서 답변을 확인하세요 . 올바른 방향으로 안내 할 수 있습니다.

도움이 되었기를 바랍니다.


5

다음과 같은 Java 기능을 사용할 수 있습니다.

ContentValues cv = new ContentValues();
cv.put(Constants.DATE, java.lang.System.currentTimeMillis());  

이런 식으로 db에 숫자를 저장합니다.
이 숫자는 다음과 같이 해석 될 수 있습니다.

    DateFormat dateF = DateFormat.getDateTimeInstance();
    String data = dateF.format(new Date(l));

new Date (l)에 l 대신 숫자를 date 열에 삽입합니다.
그래서 당신은 당신의 데이트가 있습니다.
예를 들어 DB에 다음 번호를 저장합니다 : 1332342462078
하지만 위의 메서드를 호출하면 다음 결과가 나타납니다. 21-mar-2012 16.07.42


3

@ e-satis 답변을 기반으로 "DBTools"클래스에 개인 메서드를 만들었으므로 현재 날짜를 추가하는 것이 정말 쉽습니다.

...
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
...
        private String getNow(){
            // set the format to sql date time
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            return dateFormat.format(date);
        }
...

다음과 같이 지금 사용하십시오. values.put("lastUpdate", getNow());


1

나를 위해 완벽하게 작동합니다.

    values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());

날짜를 오래 저장하십시오.



0

"(DATETIME ( 'now'))"표현식을 사용하여 기본 타임 스탬프를 삽입하려는 동시에 필드가 'not null'로 표시되지 않았는지 확인합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.