質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1591閲覧

iOS開発での一般的なデータベース操作

tarofess

総合スコア127

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2015/08/17 01:07

iOSにおける一般的なデータベースの扱い方はどのようなものでしょうか?
独学で勉強しており、イマイチ正しいデータベースの使い方がわかりません。
僕は今まで以下のようにデータベースから値を取ってきていました。

objective

1NSString* sql = @"SELECT id, name FROM users;"; 2 3[db open]; 4 5FMResultSet* results = [db executeQuery:sql]; 6NSMutableArray* users = [[NSMutableArray alloc] initWithCapacity:0]; 7 8while( [results next] ) { 9 [users addObject:[result stringForColumn:@"id"]]; 10 [users addObject:[result stringForColumn:@"name"]]; 11} 12 13[db close];

もしデータが複数あるならば2次元配列を作って各ユーザのデータを格納しています。
そして二人目のユーザの名前を取り出す時は、

objective

1users[1][2]

のようにしています。
しかしこのような1や2と指定するようなデータの扱い方でいいものなのか最近少し疑問に感じています。
一般的にデータベースから値を取得するにはどうやってみなさんは取得しているのでしょうか?

あと、データを更新したり削除したりする時は、必ずid(主キー)を使ってデータを操作するものでしょうか?
色々と分からないことがあるのですが、どなたか分かる方がいれば教えていただきたいです。
すみませんが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

質問されている事は下記の2点ですか?

  1. 1や2を使ってデータを指定するのはいい方法か?
  2. データを更新したり削除したりする時は、必ずid(主キー)を使ってデータを操作するものか?

それぞれ回答します。

1や2を使ってデータを指定するのはいい方法か?

1や2等の数字を直接使ってデータを指定するのはよくない方法です。

objective

1users[1][2]

iOSアプリに限らず、配列の要素の位置を示すインデックスの指定を数値のままにするのは避けた方がいいです。この回答を見て、[2]がなんの要素を表すのか、コードを読む人はここだけ見ただけではわかりません。こういう数字の事をマジックナンバーと呼んでいます。

マジックナンバーでなくすためにはどうしているか、と言えば、定数を定義します。例えば下記のようにします。

objective

1#define INDEX_OF_USER_NAME 2 2users[1][INDEX_OF_USER_NAME]

コードの書き方について学ぶための参考書として、リーダブルコードを推薦します。それほど厚くない本なのでさらりと読めるでしょう。

データを更新したり削除したりする時は、必ずid(主キー)を使ってデータを操作するものか?

はい。更新時や削除時に限らず特定の要素を取得する場合も主キーをよく使います。というのも、主キーとは一意に要素を特定できるように設計したキーのことです。任意の特定要素を取得したいのであれば、主キーを使います。

投稿2015/08/17 01:37

編集2015/08/17 01:39
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarofess

2015/08/18 04:47

ご回答ありがとうございます。ご提示の通り定数を使ってコードを理解しやすいコードに変えようと思います。 データを操作する時は基本的に主キーを使って操作するのですね。今主キー以外を使ってデータを操作していて変な結果が返ってくるので、主キーを使ったデータ操作に切り替えたいと思います。ありがとうございました。
guest

0

Objective-C は恐らく関係はないと思いますが、データベースを使う上で正しい作法はどうするべきかは参考書などには書かれていないことが多いのは確かだと思います。
本格的な書籍には書かれていますが、初心者向きではないことが多いです。

プログラムの書き方は置いといて、SQLの話のみ回答します。
削除については、可能なら主キーを条件に対象レコードを削除するほうが確実でしょう。
更新についても、可能なら主キーを条件に対象レコードを更新するほうが確実でしょう。

ただし、更新、削除についても条件に当てはまるものは全て消したいというケースはあると思います。
その場合は、必ずしも主キーを条件に加える必要はありません。

また1や2と指定して疑問を持たれている点については、良いと思います。
1の部分はリストで持っているので仕方ないと思いますが、データベースの場合は位置情報というのはありませんので、インデックスで管理するよりはDictionaryなどでカラム名で管理したほうが良いのではないでしょうか。

参考になれば幸いです。

投稿2015/08/17 01:30

YasuhiroMiyake

総合スコア1336

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarofess

2015/08/18 04:49

ご回答ありがとうございます。やはり基本的には主キーを使ってデータの操作を行うのですね。しかしご提示のような例外もあるとのことを頭に入れておきたいと思います。 データベースからの値を管理するのにDictionaryで管理するのも良さそうですね。参考にさせていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問