teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

Androidの例をけいさ

2016/12/25 02:52

投稿

sugidodan
sugidodan

スコア26

title CHANGED
File without changes
body CHANGED
@@ -23,8 +23,103 @@
23
23
  あまり良い方法ではないのかもしれませんが
24
24
  pickerviewを表示する際に、コード表のテキストファイルを読み込む
25
25
 
26
+ ちなみに、Android SQLliteでは、以下のような記述で、所望の処理ができます。これをRealmで実現したい。
27
+
28
+ 簡単に内容を説明すると
29
+ sql/以下にCreate文でテーブルを作成したり、Insert文でテーブルに値を挿入するSQL文を記述したファイルを置く。
30
+
31
+
26
32
  ```
33
+ public class DataBaseOpenHelper extends SQLiteOpenHelper {
34
+
35
+ private static final String DB_NAME = "ScoreBook.db";
36
+ private static final int DB_VERSION = 1;
37
+ private Context m_Context;
38
+
39
+ public DataBaseOpenHelper(Context context ) {
40
+ super(context, DB_NAME, null, DB_VERSION);
41
+ // TODO 自動生成されたコンストラクター・スタブ
42
+ m_Context = context;
43
+ }
27
44
 
45
+ @Override
46
+ public void onCreate(SQLiteDatabase db) {
47
+ // TODO 自動生成されたメソッド・スタブ
48
+ try {
49
+ execSql(db,"sql/create");
50
+ } catch (IOException e) {
51
+ e.printStackTrace();
52
+ }
53
+ }
54
+
55
+ @Override
56
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
57
+ // TODO 自動生成されたメソッド・スタブ
58
+ try {
59
+ execSql(db,"sql/alter");
60
+ } catch (IOException e) {
61
+ e.printStackTrace();
62
+ }
63
+ onCreate(db);
64
+ }
65
+ /**
66
+ * 引数に指定したassetsフォルダ内のsqlを実行します。
67
+ * @param db データベース
68
+ * @param assetsDir assetsフォルダ内のフォルダのパス
69
+ * @throws IOException
70
+ */
71
+ private void execSql(SQLiteDatabase db,String assetsDir) throws IOException {
72
+ AssetManager as = m_Context.getResources().getAssets();
73
+ try {
74
+ String files[] = as.list(assetsDir);
75
+ for (int i = 0; i < files.length; i++) {
76
+ String str = readFile(as.open(assetsDir + "/" + files[i]));
77
+ for (String sql: str.split("/")){
78
+ db.execSQL(sql);
79
+ }
80
+ }
81
+ } catch (IOException e) {
82
+ e.printStackTrace();
83
+ }
84
+ }
85
+
86
+ /**
87
+ * ファイルから文字列を読み込みます。
88
+ * @param is
89
+ * @return ファイルの文字列
90
+ * @throws IOException
91
+ */
92
+ private String readFile(InputStream is) throws IOException{
93
+ BufferedReader br = null;
94
+ try {
95
+ br = new BufferedReader(new InputStreamReader(is,"SJIS"));
96
+
97
+ StringBuilder sb = new StringBuilder();
98
+ String str;
99
+ while((str = br.readLine()) != null){
100
+ sb.append(str +"\n");
101
+ }
102
+ return sb.toString();
103
+ } finally {
104
+ if (br != null) br.close();
105
+ }
106
+ }
107
+ }
108
+ ```
109
+ sql/以下に置くSQLテキストファイルの例
110
+ ```ここに言語を入力
111
+ CREATE TABLE prefecture(
112
+ _id integer PRIMARY KEY,
113
+ name text
114
+ )
115
+ INSERT INTO prefecture values
116
+ (1,"北海道"),
117
+ (2,"青森県"),
118
+ (3,"岩手県"),
119
+ (4,"宮城県"),
120
+ ```
121
+ ```
122
+
28
123
  class prefecture: object{
29
124
 
30
125
  dynamic private var id

1

加筆

2016/12/25 02:52

投稿

sugidodan
sugidodan

スコア26

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  iOS, swift3 xcode8 でアプリを作成しています。
2
2
 
3
- 例えば、realm のテーブルとして、以下の都道府県コードをアプリを一番初めに起動する時、もしくはインストール時に作成するにはどうすれば良いでしょうか?
3
+ 例えば、realm のテーブルとして、以下の都道府県コードをアプリを一番初めに起動する時、もしくはインストール時に作成するにはどうすれば良いでしょうか?
4
4
 
5
5
  アプリでの利用方法はpickerviewに都道府県名を表示させ、選択した都道府県のコードをrealmに保存することを考えています。
6
6