質問編集履歴
1
質問内容を修正した
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,18 +4,170 @@
|
|
4
4
|
sqliteにおいて、日本時間にしたいと思っています。ですがdate関数で取得しても日本時間になりません。以下のように宣言をしてもsql文のエラーが出ます。
|
5
5
|
どのようにしたらタイムゾーンをそろえられるのでしょうか。
|
6
6
|
参考url
|
7
|
-
https://o
|
7
|
+
https://qiita.com/TomK/items/132831ab45e2aba822a8#:~:text=SQLite%E3%81%A7%E3%81%AF%E6%97%A5%E4%BB%98%E3%83%BB%E6%99%82%E5%88%BB%E3%83%BB%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%81%AF%E5%8D%98%E3%81%AA%E3%82%8B%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%82%8F%E3%82%8C%E3%82%8B%E3%80%82%20SQLite%E3%81%A7%E6%A0%BC%E7%B4%8D%E3%81%95%E3%82%8C%E3%82%8B%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%81%AB%E3%81%AF%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%81%AE%E6%A6%82%E5%BF%B5%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%82%92UTC%E3%81%A8%E3%81%97%E3%81%A6%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B,1%20%E3%80%82%20%E3%81%9F%E3%81%A0%E3%81%97%E3%80%81%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%A6%E3%81%82%E3%82%8B%E6%97%A5%E4%BB%98%E3%83%BB%E6%99%82%E5%88%BB%E3%83%BB%E6%97%A5%E4%BB%98%E6%99%82%E5%88%BB%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB%E3%80%81%E6%AC%B2%E3%81%97%E3%81%84%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%9F%E3%82%8A%E6%99%82%E5%B7%AE%E3%82%92%E8%80%83%E6%85%AE%E3%81%97%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82
|
8
8
|
|
9
9
|
### 実現したいこと
|
10
10
|
|
11
11
|
タイムゾーンを日本に合わせたい
|
12
12
|
|
13
|
+
### エラーコード
|
14
|
+
```エラーコード
|
15
|
+
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'));
|
16
|
+
```
|
17
|
+
|
13
18
|
### 該当のソースコード
|
14
19
|
|
15
|
-
```s
|
20
|
+
```DatabaseHelper
|
21
|
+
import android.content.Context;
|
22
|
+
import android.database.sqlite.SQLiteDatabase;
|
23
|
+
import android.database.sqlite.SQLiteOpenHelper;
|
24
|
+
|
25
|
+
/**
|
26
|
+
* データベースのヘルパークラス。
|
27
|
+
*/
|
28
|
+
public class DatabaseHelper extends SQLiteOpenHelper {
|
29
|
+
/**
|
30
|
+
* データベースフォイル名の定数フィールド。
|
31
|
+
*/
|
32
|
+
private static final String DATABASE_NAME = "StudyApplication.db";
|
33
|
+
/**
|
34
|
+
* バージョン情報の定義フィールド
|
35
|
+
*/
|
36
|
+
private static final int DATABASE_VERSION = 1;
|
37
|
+
|
38
|
+
/**
|
39
|
+
* コンストラクタ。
|
40
|
+
*
|
41
|
+
* @param context コンテキスト
|
42
|
+
*/
|
43
|
+
public DatabaseHelper(Context context){
|
44
|
+
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
45
|
+
}
|
46
|
+
|
47
|
+
@Override
|
48
|
+
public void onCreate(SQLiteDatabase db){
|
49
|
+
//宣言しているテーブル
|
50
|
+
StringBuffer aftersb = new StringBuffer();
|
16
|
-
CREATE TABLE
|
51
|
+
aftersb.append("CREATE TABLE test2(");
|
17
|
-
id INTEGER PRIMARY KEY,
|
52
|
+
aftersb.append("id INTEGER PRIMARY KEY,");
|
18
|
-
created_at TEXT DEFAULT datetime(CURRENT_TIMESTAMP, 'localtime')
|
53
|
+
aftersb.append("created_at TEXT DEFAULT datetime(CURRENT_TIMESTAMP, 'localtime')");
|
54
|
+
aftersb.append(");");
|
55
|
+
String aftersbsql = aftersb.toString();
|
56
|
+
|
57
|
+
db.execSQL(aftersbsql);
|
58
|
+
//宣言何もしていないテーブル
|
59
|
+
StringBuffer beforesb = new StringBuffer();
|
60
|
+
beforesb.append("CREATE TABLE test1(");
|
61
|
+
beforesb.append("id INTEGER PRIMARY KEY,");
|
62
|
+
beforesb.append("created_at TEXT");
|
63
|
+
beforesb.append(");");
|
64
|
+
String beforesbsql = beforesb.toString();
|
65
|
+
|
66
|
+
db.execSQL(beforesbsql);
|
19
|
-
|
67
|
+
}
|
68
|
+
|
69
|
+
@Override
|
70
|
+
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
|
71
|
+
}
|
72
|
+
}
|
20
73
|
```
|
21
74
|
|
75
|
+
```test.java
|
76
|
+
public class Test {
|
77
|
+
private String _date;
|
78
|
+
|
79
|
+
public String getDate(){
|
80
|
+
return _date;
|
81
|
+
}
|
82
|
+
public void setDate(String date){
|
83
|
+
_date = date;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
```
|
87
|
+
|
88
|
+
```testDAO.java
|
89
|
+
import android.database.Cursor;
|
90
|
+
import android.database.sqlite.SQLiteDatabase;
|
91
|
+
import android.database.sqlite.SQLiteStatement;
|
92
|
+
|
93
|
+
public class TestDAO {
|
94
|
+
public static Test beforefindIdByPK(SQLiteDatabase db, long id){
|
95
|
+
//id=_id
|
96
|
+
String sql = "SELECT * FROM test1 WHERE id = '" + id + "'";
|
97
|
+
Cursor cursor = db.rawQuery(sql, null);
|
98
|
+
Test result = new Test();
|
99
|
+
if (cursor.moveToFirst()) {
|
100
|
+
int idxDate = cursor.getColumnIndex("created_at");
|
101
|
+
String date = cursor.getString(idxDate);
|
102
|
+
result.setDate(date);
|
103
|
+
}
|
104
|
+
return result;
|
105
|
+
}
|
106
|
+
public static Test afterfindIdByPK(SQLiteDatabase db, long id){
|
107
|
+
//id=_id
|
108
|
+
String sql = "SELECT * FROM test2 WHERE id = '" + id + "'";
|
109
|
+
Cursor cursor = db.rawQuery(sql, null);
|
110
|
+
Test result = new Test();
|
111
|
+
if (cursor.moveToFirst()) {
|
112
|
+
int idxDate = cursor.getColumnIndex("created_at");
|
113
|
+
String date = cursor.getString(idxDate);
|
114
|
+
result.setDate(date);
|
115
|
+
}
|
116
|
+
return result;
|
117
|
+
}
|
118
|
+
|
119
|
+
public static long beforeiInsert(SQLiteDatabase db) {
|
120
|
+
String sql = "INSERT INTO test1 (created_at) VALUES (datetime('now'))";
|
121
|
+
SQLiteStatement stmt = db.compileStatement(sql);
|
122
|
+
long insertedId = stmt.executeInsert();
|
123
|
+
return insertedId;
|
124
|
+
}
|
125
|
+
public static long afterInsert(SQLiteDatabase db) {
|
126
|
+
String sql = "INSERT INTO test2 (created_at) VALUES (datetime('now'))";
|
127
|
+
SQLiteStatement stmt = db.compileStatement(sql);
|
128
|
+
long insertedId = stmt.executeInsert();
|
129
|
+
return insertedId;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
```
|
133
|
+
|
134
|
+
```MainActivity.java
|
135
|
+
import androidx.appcompat.app.AppCompatActivity;
|
136
|
+
|
137
|
+
import android.database.sqlite.SQLiteDatabase;
|
138
|
+
import android.os.Bundle;
|
139
|
+
import android.view.View;
|
140
|
+
import android.view.ViewGroup;
|
141
|
+
import android.widget.ArrayAdapter;
|
142
|
+
import android.widget.ListView;
|
143
|
+
|
144
|
+
import java.util.ArrayList;
|
145
|
+
import java.util.List;
|
146
|
+
|
147
|
+
public class MainActivity extends AppCompatActivity {
|
148
|
+
|
149
|
+
/**
|
150
|
+
* データベースヘルパーオブジェクト。
|
151
|
+
*/
|
152
|
+
private DatabaseHelper _helper;
|
153
|
+
|
154
|
+
@Override
|
155
|
+
protected void onCreate(Bundle savedInstanceState) {
|
156
|
+
super.onCreate(savedInstanceState);
|
157
|
+
setContentView(R.layout.activity_main);
|
158
|
+
|
159
|
+
//データベースに接続
|
160
|
+
_helper = new DatabaseHelper(this);
|
161
|
+
SQLiteDatabase db = _helper.getWritableDatabase();
|
162
|
+
|
163
|
+
long id = TestDAO.beforeiInsert(db);
|
164
|
+
|
165
|
+
Test result = TestDAO.beforefindIdByPK(db, id);
|
166
|
+
System.out.println("before:"+result.getDate());
|
167
|
+
id = TestDAO.afterInsert(db);
|
168
|
+
|
169
|
+
result = TestDAO.afterfindIdByPK(db, id);
|
170
|
+
System.out.println("before:"+result.getDate());
|
171
|
+
}
|
172
|
+
}
|
173
|
+
```
|