質問編集履歴

1

質問内容を修正した

2023/01/04 16:34

投稿

syosinsya109
syosinsya109

スコア41

test CHANGED
File without changes
test CHANGED
@@ -4,18 +4,170 @@
4
4
  sqliteにおいて、日本時間にしたいと思っています。ですがdate関数で取得しても日本時間になりません。以下のように宣言をしてもsql文のエラーが出ます。
5
5
  どのようにしたらタイムゾーンをそろえられるのでしょうか。
6
6
  参考url
7
- https://onl.la/BpgW4yn
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
- ```sql
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 Test(
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
+ ```