質問編集履歴

2

Androidの例をけいさ

2016/12/25 02:52

投稿

sugidodan
sugidodan

スコア26

test CHANGED
File without changes
test CHANGED
@@ -48,6 +48,196 @@
48
48
 
49
49
 
50
50
 
51
+ ちなみに、Android SQLliteでは、以下のような記述で、所望の処理ができます。これをRealmで実現したい。
52
+
53
+
54
+
55
+ 簡単に内容を説明すると
56
+
57
+ sql/以下にCreate文でテーブルを作成したり、Insert文でテーブルに値を挿入するSQL文を記述したファイルを置く。
58
+
59
+
60
+
61
+
62
+
63
+ ```
64
+
65
+ public class DataBaseOpenHelper extends SQLiteOpenHelper {
66
+
67
+
68
+
69
+ private static final String DB_NAME = "ScoreBook.db";
70
+
71
+ private static final int DB_VERSION = 1;
72
+
73
+ private Context m_Context;
74
+
75
+
76
+
77
+ public DataBaseOpenHelper(Context context ) {
78
+
79
+ super(context, DB_NAME, null, DB_VERSION);
80
+
81
+ // TODO 自動生成されたコンストラクター・スタブ
82
+
83
+ m_Context = context;
84
+
85
+ }
86
+
87
+
88
+
89
+ @Override
90
+
91
+ public void onCreate(SQLiteDatabase db) {
92
+
93
+ // TODO 自動生成されたメソッド・スタブ
94
+
95
+ try {
96
+
97
+ execSql(db,"sql/create");
98
+
99
+ } catch (IOException e) {
100
+
101
+ e.printStackTrace();
102
+
103
+ }
104
+
105
+ }
106
+
107
+
108
+
109
+ @Override
110
+
111
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
112
+
113
+ // TODO 自動生成されたメソッド・スタブ
114
+
115
+ try {
116
+
117
+ execSql(db,"sql/alter");
118
+
119
+ } catch (IOException e) {
120
+
121
+ e.printStackTrace();
122
+
123
+ }
124
+
125
+ onCreate(db);
126
+
127
+ }
128
+
129
+ /**
130
+
131
+ * 引数に指定したassetsフォルダ内のsqlを実行します。
132
+
133
+ * @param db データベース
134
+
135
+ * @param assetsDir assetsフォルダ内のフォルダのパス
136
+
137
+ * @throws IOException
138
+
139
+ */
140
+
141
+ private void execSql(SQLiteDatabase db,String assetsDir) throws IOException {
142
+
143
+ AssetManager as = m_Context.getResources().getAssets();
144
+
145
+ try {
146
+
147
+ String files[] = as.list(assetsDir);
148
+
149
+ for (int i = 0; i < files.length; i++) {
150
+
151
+ String str = readFile(as.open(assetsDir + "/" + files[i]));
152
+
153
+ for (String sql: str.split("/")){
154
+
155
+ db.execSQL(sql);
156
+
157
+ }
158
+
159
+ }
160
+
161
+ } catch (IOException e) {
162
+
163
+ e.printStackTrace();
164
+
165
+ }
166
+
167
+ }
168
+
169
+
170
+
171
+ /**
172
+
173
+ * ファイルから文字列を読み込みます。
174
+
175
+ * @param is
176
+
177
+ * @return ファイルの文字列
178
+
179
+ * @throws IOException
180
+
181
+ */
182
+
183
+ private String readFile(InputStream is) throws IOException{
184
+
185
+ BufferedReader br = null;
186
+
187
+ try {
188
+
189
+ br = new BufferedReader(new InputStreamReader(is,"SJIS"));
190
+
191
+
192
+
193
+ StringBuilder sb = new StringBuilder();
194
+
195
+ String str;
196
+
197
+ while((str = br.readLine()) != null){
198
+
199
+ sb.append(str +"\n");
200
+
201
+ }
202
+
203
+ return sb.toString();
204
+
205
+ } finally {
206
+
207
+ if (br != null) br.close();
208
+
209
+ }
210
+
211
+ }
212
+
213
+ }
214
+
215
+ ```
216
+
217
+ sql/以下に置くSQLテキストファイルの例
218
+
219
+ ```ここに言語を入力
220
+
221
+ CREATE TABLE prefecture(
222
+
223
+ _id integer PRIMARY KEY,
224
+
225
+ name text
226
+
227
+ )
228
+
229
+ INSERT INTO prefecture values
230
+
231
+ (1,"北海道"),
232
+
233
+ (2,"青森県"),
234
+
235
+ (3,"岩手県"),
236
+
237
+ (4,"宮城県"),
238
+
239
+ ```
240
+
51
241
  ```
52
242
 
53
243
 

1

加筆

2016/12/25 02:52

投稿

sugidodan
sugidodan

スコア26

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 例えば、realm のテーブルとして、以下の都道府県コードをアプリを一番初めに起動する時、もしくはインストール時に作成するにはどうすれば良いでしょうか?
5
+ 例えば、realm のテーブルとして、以下の都道府県コードをアプリを一番初めに起動する時、もしくはインストール時に作成するにはどうすれば良いでしょうか?
6
6
 
7
7
 
8
8