回答編集履歴

5

誤記修正

2017/10/22 19:52

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  追記
28
28
 
29
- ご提示いただいたコードを確認させてもらいました。このコードが全部ではないと言うことでしたが、少なくとも2点、問題がありましたので追記します。MySQLOpenHelper 内で生成しているSQLに問題があります。
29
+ ご提示いただいたコードを確認させてもらいました。このコードが全部ではないと言うことでしたが、少なくとも2点、問題を見つけましたので追記します。MySQLiteOpenHelper 内で生成しているSQLに問題があります。
30
30
 
31
31
 
32
32
 

4

誤記修正。

2017/10/22 19:52

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -82,11 +82,11 @@
82
82
 
83
83
  ご提示のコードでは上記のように途中でExceptionが発生し、完了しないのでテーブルが完成していません。
84
84
 
85
- ただ、上の指摘はCREATE文の問題なので、データベースファイル自体は`getReadableDatabase`を呼び出した時点で作成されるはずです。その後、`SQLiteOpenHelper.onCreate`が呼ばれるはずですので、ブレークポイントを張って確認してみてください。尚、既にファイルがあれば`SQLiteOpenHelper.onCreate`は呼ばれません。
85
+ ただ、上の指摘はSQLの問題なので、データベースファイル自体は`getReadableDatabase`を呼び出した時点で作成されるはずです。その後、`SQLiteOpenHelper.onCreate`が呼ばれるはずですので、ブレークポイントを張って確認してみてください。尚、既にファイルがあれば`SQLiteOpenHelper.onCreate`は呼ばれません。
86
86
 
87
87
 
88
88
 
89
- ファイルはadb shellで確認できるのですが、実機を使っているとユーザーのパーミッションの関係で実行が失敗するかもしれません。以下はAndroidエミュレーター実行した結果です。myregister.dbファイルがあることが分かります。す。Test27と言うアプリ名、packageが examples.products で確認用アプリを作ったのでこのようになPATHになっていま
89
+ ファイルはadb shellで確認できるのですが、実機を使っているとユーザーのパーミッションの関係で実行が失敗するかもしれません。以下はmacOS上のAndroidエミュレーターを相手として実行した結果です。myregister.dbファイルがあることが分かります。
90
90
 
91
91
  ```Bash
92
92
 
@@ -96,6 +96,6 @@
96
96
 
97
97
  -rw------- u0_a57 u0_a57 8720 2017-10-23 04:23 myregister.db-journal
98
98
 
99
+ ```
99
100
 
100
-
101
- ```
101
+ Test27と言うアプリ名、packageが examples.products で確認用アプリを作ったのでこのようなPATHになっています。

3

コード提示に伴い、動作確認して追記しました。

2017/10/22 19:49

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -19,3 +19,83 @@
19
19
 
20
20
 
21
21
  「本体を再起動させれば」と書いたのは念の為で、データベースを作るコードがどこにあるか、Activityの`onCreate`にある場合や`onResume`など、Activityのライフサイクルに関わるメソッドで変わってくるからです。`onCreate`上にあると、操作の流れによって呼び出されないことがあります。このあたりは「Android Activity ライフサイクル」などで検索して確認してみてください。
22
+
23
+
24
+
25
+ ---
26
+
27
+ 追記
28
+
29
+ ご提示いただいたコードを確認させてもらいました。このコードが全部ではないと言うことでしたが、少なくとも2点、問題がありましたので追記します。MySQLOpenHelper 内で生成しているSQLに問題があります。
30
+
31
+
32
+
33
+ 1つ目、2つのカラムにプライマリキー指定がされているので、CREATE文の実行でエラー(Exception)になります。
34
+
35
+ ```Java
36
+
37
+ //整数用テーブル作成
38
+
39
+ db.execSQL("CREATE TABLE " + TABLE_NAME_INTEGER + " ("
40
+
41
+ + COLUMN_NAME_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
42
+
43
+ + COLUMN_NAME_INTEGER_NOMINAL + "TEXT PRIMARY KEY NOT NULL"
44
+
45
+ + COLUMN_NAME_INTEGER_VALUE + " INTEGER)");
46
+
47
+ ```
48
+
49
+ ```
50
+
51
+ # Exceptionの内容
52
+
53
+ android.database.sqlite.SQLiteException: table "integer_table" has more than one primary key (code 1): , while compiling: CREATE TABLE integer_table (_id INTEGER PRIMARY KEY AUTOINCREMENT,nominalTEXT PRIMARY KEY NOT NULLvalue INTEGER)
54
+
55
+ ```
56
+
57
+ 2つ目、INSERT文のSQLにも問題があり、正しくカラム名が指定できてません。
58
+
59
+ ```Java
60
+
61
+ db.execSQL("INSERT INTO " + TABLE_NAME_INTEGER + " VALUES("
62
+
63
+ + RECORD_NAME_SALESAMOUNT + ",0)");
64
+
65
+ ```
66
+
67
+ ```
68
+
69
+ # Exceptionの内容
70
+
71
+ android.database.sqlite.SQLiteException: no such column: salesAmount (code 1): , while compiling: INSERT INTO integer_table VALUES(salesAmount,0)
72
+
73
+ ```
74
+
75
+ ひとつの例ですが、以下のようなSQLにしてカラムを指定し、完成させる必要があるかと思います。
76
+
77
+ ```SQL
78
+
79
+ INSERT INTO integer_table(nominal,value) VALUES ('salesAmount',0)
80
+
81
+ ```
82
+
83
+ ご提示のコードでは上記のように途中でExceptionが発生し、完了しないのでテーブルが完成していません。
84
+
85
+ ただ、上の指摘はCREATE文の問題なので、データベースファイル自体は`getReadableDatabase`を呼び出した時点で作成されるはずです。その後、`SQLiteOpenHelper.onCreate`が呼ばれるはずですので、ブレークポイントを張って確認してみてください。尚、既にファイルがあれば`SQLiteOpenHelper.onCreate`は呼ばれません。
86
+
87
+
88
+
89
+ ファイルはadb shellで確認できるのですが、実機を使っているとユーザーのパーミッションの関係で実行が失敗するかもしれません。以下はAndroidエミュレーターで実行した結果です。myregister.dbファイルがあることが分かります。す。Test27と言うアプリ名、packageが examples.products で確認用アプリを作ったのでこのようになPATHになっていま
90
+
91
+ ```Bash
92
+
93
+ bash-3.2$ adb shell ls -l /data/data/examples.products.test27/databases/
94
+
95
+ -rw-rw---- u0_a57 u0_a57 24576 2017-10-23 04:23 myregister.db
96
+
97
+ -rw------- u0_a57 u0_a57 8720 2017-10-23 04:23 myregister.db-journal
98
+
99
+
100
+
101
+ ```

2

誤記修正

2017/10/22 19:44

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  例えば自アプリが「Sample」で、パッケージが「products.examples」、データベースファイル名が「sample.db」であれば、ファイルは
8
8
 
9
- /data/data/examples.products.test26/databases/sample.db
9
+ /data/data/examples.products.sample/databases/sample.db
10
10
 
11
11
  として作成されます。これを本体の「設定」でアプリデータの消去をするとdatabases/sample.dbが削除されてしまうので、開けなくなります。
12
12
 

1

改行位置修正、追記。

2017/10/22 02:41

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -1,8 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- 開けなくなるのが正常な動作ですので大丈夫です。SQLiteのデータベースを作ると、
3
+ 開けなくなるのが正常な動作ですので大丈夫です。SQLiteのデータベースを作ると、データベースのファイルは自アプリで読み書きできるディレクトリ下に作成されます。
4
-
5
- データベースのファイルは自アプリで読み書きできるディレクトリ下に作成されます。
6
4
 
7
5
 
8
6
 
@@ -12,9 +10,7 @@
12
10
 
13
11
  として作成されます。これを本体の「設定」でアプリデータの消去をするとdatabases/sample.dbが削除されてしまうので、開けなくなります。
14
12
 
15
-
16
-
17
- (ファイルの位置はAndroid Device Monitorやadb shellで確認することもできます)
13
+ (ファイルの位置はAndroid Device Monitorや、場合にもよりますがadb shellでシェル上で確認することもできます)
18
14
 
19
15
 
20
16
 
@@ -22,4 +18,4 @@
22
18
 
23
19
 
24
20
 
25
- 「本体を再起動させれば」と書いたのは念の為で、データベースを作るコードがActivityの`onCreate`にある場合や`onResume`など、Activityのライフサイクルに関わるメソッドで変わってくるからです。このあたりは「Android Activity ライフサイクル」などで検索して確認してみてください。
21
+ 「本体を再起動させれば」と書いたのは念の為で、データベースを作るコードがどこにあるか、Activityの`onCreate`にある場合や`onResume`など、Activityのライフサイクルに関わるメソッドで変わってくるからです。`onCreate`上にあると、操作の流れによって呼び出されないとがあります。このあたりは「Android Activity ライフサイクル」などで検索して確認してみてください。