前提
実現したいこと
タイムゾーンを日本に合わせたい
エラーコード
Caused by: android.database.sqlite.SQLiteException: near "(": syntax error (code 1 SQLITE_ERROR): , while compiling: CREATE TABLE test2(id INTEGER PRIMARY KEY,created_at TEXT DEFAULT datetime(CURRENT_TIMESTAMP, 'localtime'));
該当のソースコード
DatabaseHelper
1import android.content.Context; 2import android.database.sqlite.SQLiteDatabase; 3import android.database.sqlite.SQLiteOpenHelper; 4 5/** 6 * データベースのヘルパークラス。 7 */ 8public class DatabaseHelper extends SQLiteOpenHelper { 9 /** 10 * データベースフォイル名の定数フィールド。 11 */ 12 private static final String DATABASE_NAME = "StudyApplication.db"; 13 /** 14 * バージョン情報の定義フィールド 15 */ 16 private static final int DATABASE_VERSION = 1; 17 18 /** 19 * コンストラクタ。 20 * 21 * @param context コンテキスト 22 */ 23 public DatabaseHelper(Context context){ 24 super(context, DATABASE_NAME, null, DATABASE_VERSION); 25 } 26 27 @Override 28 public void onCreate(SQLiteDatabase db){ 29 //宣言しているテーブル 30 StringBuffer aftersb = new StringBuffer(); 31 aftersb.append("CREATE TABLE test2("); 32 aftersb.append("id INTEGER PRIMARY KEY,"); 33 aftersb.append("created_at TEXT DEFAULT datetime(CURRENT_TIMESTAMP, 'localtime')"); 34 aftersb.append(");"); 35 String aftersbsql = aftersb.toString(); 36 37 db.execSQL(aftersbsql); 38 //宣言何もしていないテーブル 39 StringBuffer beforesb = new StringBuffer(); 40 beforesb.append("CREATE TABLE test1("); 41 beforesb.append("id INTEGER PRIMARY KEY,"); 42 beforesb.append("created_at TEXT"); 43 beforesb.append(");"); 44 String beforesbsql = beforesb.toString(); 45 46 db.execSQL(beforesbsql); 47 } 48 49 @Override 50 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 51 } 52}
test.java
1public class Test { 2 private String _date; 3 4 public String getDate(){ 5 return _date; 6 } 7 public void setDate(String date){ 8 _date = date; 9 } 10}
testDAO.java
1import android.database.Cursor; 2import android.database.sqlite.SQLiteDatabase; 3import android.database.sqlite.SQLiteStatement; 4 5public class TestDAO { 6 public static Test beforefindIdByPK(SQLiteDatabase db, long id){ 7 //id=_id 8 String sql = "SELECT * FROM test1 WHERE id = '" + id + "'"; 9 Cursor cursor = db.rawQuery(sql, null); 10 Test result = new Test(); 11 if (cursor.moveToFirst()) { 12 int idxDate = cursor.getColumnIndex("created_at"); 13 String date = cursor.getString(idxDate); 14 result.setDate(date); 15 } 16 return result; 17 } 18 public static Test afterfindIdByPK(SQLiteDatabase db, long id){ 19 //id=_id 20 String sql = "SELECT * FROM test2 WHERE id = '" + id + "'"; 21 Cursor cursor = db.rawQuery(sql, null); 22 Test result = new Test(); 23 if (cursor.moveToFirst()) { 24 int idxDate = cursor.getColumnIndex("created_at"); 25 String date = cursor.getString(idxDate); 26 result.setDate(date); 27 } 28 return result; 29 } 30 31 public static long beforeiInsert(SQLiteDatabase db) { 32 String sql = "INSERT INTO test1 (created_at) VALUES (datetime('now'))"; 33 SQLiteStatement stmt = db.compileStatement(sql); 34 long insertedId = stmt.executeInsert(); 35 return insertedId; 36 } 37 public static long afterInsert(SQLiteDatabase db) { 38 String sql = "INSERT INTO test2 (created_at) VALUES (datetime('now'))"; 39 SQLiteStatement stmt = db.compileStatement(sql); 40 long insertedId = stmt.executeInsert(); 41 return insertedId; 42 } 43}
MainActivity.java
1import androidx.appcompat.app.AppCompatActivity; 2 3import android.database.sqlite.SQLiteDatabase; 4import android.os.Bundle; 5import android.view.View; 6import android.view.ViewGroup; 7import android.widget.ArrayAdapter; 8import android.widget.ListView; 9 10import java.util.ArrayList; 11import java.util.List; 12 13public class MainActivity extends AppCompatActivity { 14 15 /** 16 * データベースヘルパーオブジェクト。 17 */ 18 private DatabaseHelper _helper; 19 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 25 //データベースに接続 26 _helper = new DatabaseHelper(this); 27 SQLiteDatabase db = _helper.getWritableDatabase(); 28 29 long id = TestDAO.beforeiInsert(db); 30 31 Test result = TestDAO.beforefindIdByPK(db, id); 32 System.out.println("before:"+result.getDate()); 33 id = TestDAO.afterInsert(db); 34 35 result = TestDAO.afterfindIdByPK(db, id); 36 System.out.println("before:"+result.getDate()); 37 } 38}

回答2件
あなたの回答
tips
プレビュー