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.