SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
第6回 Cocoa 勉強会(2004/7/10)

SQLite を Cocoa で使う(新居雅行)
SQL データベースの SQLite
SQLite の特徴


Public Dmain 、 オ ー プ ン ソ ー ス で 、 事 実 上 自 由 に 使 え る SQL デ ー タ ベ ー ス
(http://www.sqlite.org/)



オリジナルには C/C++および TCL のインタフェースだけが用意されている



PHP5 への標準バンドル、さらには Mac OS X v10.4 へのバンドルが予定されている



ネットワークには基本的には非対応のため、
組み込み用途が主なものとなる。
データベース
は、1 つのファイルに保存される



「タイプレス」という独特の考え方。フィールドにはタイプを指定しないでもいい(という
か、指定してもあまり意味はないかも)



数値については「精度」
「桁数」的な概念はまったくない。数値は倍精度浮動小数点数(64
ビット)にすべて展開される。



文字も数値もある意味は区別がないためちょっと独特。ただし、そのため BLOB 処理がち
ょっと甘いとも言える



SQL の非サポート機能で目につくのは GRANT がないこと。アクセス権はデータベースフ
ァイルに対して設定するというのが基本コンセプト。また、タイプレスのためか CHECK
制約は機能しないなどもある



Ver.2.8 系列は UTF-8 対応、Ver.3 より UTF-8/16 の両方に対応。なお、Ver.3 ではタイプ
の扱いが違ってくる模様。



MySQL よりも速いといったベンチマークテストを掲載している。
PostgreSQL よりは 10∼
20 倍、MySQL よりも 2 倍速いとしているが、SQLite では 1 つのトランザクションで処理
する事でそのスピードが出る

SQLite を Mac OS X で使うには
バイナリとして配布されているのは、Linux と Windows のみ。そのため、Mac OS X で使うに
はビルドしないといけないが、配布されているソース群には make すらない。Mac OS X で手
軽に使うには、以下のものが必要。
SQLite の Mac OS X 版ビルド
http://www.c-command.com/tools/sqlite.shtml
QuickLite
http://www.webbotech.com/
1
SQLite のコネクティビティ
SQLite の接続機能を強化するものとしては以下のものがある。
SQLite 用の ODBC および JDBC のドライバ
http://www.ch-werner.de/sqliteodbc/ http://www.ch-werner.de/javasqlite/
SQLiteServer 1.0(SQLite をネットワークからアクセス。REALbasic で制作)
http://sqlabs.net/

QuickLite について


SQLite を使うための Cocoa のクラスをオープンソースで提供しているのが QuickLite



確かに、Xcode で開いてデータベース処理はできるが、事実上、自分で SQL 文をテキスト
で作成しなければならない。
つまり、
データベースの内容をオブジェクト化するものではな
く、SQLite へのインタフェースを取るための Cocoa クラス



そのため、以下の 3 種類のオブジェクト(クラス)について知るだけで使える(というか、
その程度の機能)
。以下の表は主なメソッドの紹介で、他にもメソッドがある

NSQuickLiteDatabase
databaseWithFile:
open
close
performQuery:
prepareStringForQuery:
encodeDataToBase64:

NSQuickLiteCursor
rowCount
columnCount
columnNames
rowAtIndex:
valuesForColumn:
valuesForRow:

NSQuickLiteRow
stringForColumn:
dataForColumn: andRow:
values

データベースファイルの抽象化
データベースファイルを指定して初期化
データベースをオープン
データベースをクローズ
文字列で指定した SQL 文を発行、NSQuickLinkCursor
を戻す
SQL 文をクエリーできるように変換。つまりクォートの
置き換え
NSData を base64 にして NSString を戻す
クエリー結果の抽象化クラス
レコード数
フィールド数
フィールド名の NSArray を得る
レコード番号を指定して NSQuickLinkRow への参照を
得る
文字列で指定したフィールドのデータを NSArray で得る
レコード番号で指定したレコードのデータを
NSDictionary で得る
クエリー結果の中の 1 レコードを抽象化するクラス
フィールド名を指定してそのフィールドのデータを文字
列として得る
フィールド名とレコード番号指定してそのフィールドの
データを NSData として得る
レコードのデータを NSDictionary で得る
2


NSString での Unicode でインプット/アプトプットがきちんとできる。もちろん日本語も
OK



BLOB 対応のために base64 でエンコードする。挿入するデータについては自分で base64
にしないといけないが、メソッドは用意されている。取り出しは NSData として取り出す
メソッドで元のバイナリが得られる



SQLite をフレームワークにするというプロジェクトもあるが、激しくバグっており(きっ
と、プロジェクトを作ったけど、ほんとにフレームワークとして使ってはいないだろう)
、
それはそのままでは使えない。動くフレームワークは、Cocoa 勉強会のサーバ領域に保存
(ファイル名: QuickLite Framework.zip)



テキストファイルのインポート機能があることはあるが、
これはちょっと使えない…。
まじ
めにテキストファイルのインポートする人はちゃんと改造するか、自分で作りましょう

QuickLite を使ったサンプルプログラム
ファイル名:msykQLsample.zip
"SQL1" = "INSERT INTO TEST1(str1,str2) VALUES( '表示', 'aaa strings' );";
"SQL2" = "INSERT INTO TEST1(str1,str2) VALUES( '日本語', 'aaa strings' );";
"SQL3" = "INSERT INTO TEST1(str1,str2) VALUES( '東京特許許可局', 'aaa strings' );";
"SQL4" = "INSERT INTO TEST1(str1,str2) VALUES( '髙島屋', 'aaa strings' );";
"SQL5" = "INSERT INTO TEST1(str1,str2) VALUES( '美しい日本語', 'aaa strings' );";
"SQL6" = "INSERT INTO TEST1(str1,str2) VALUES( '日本語', 'aaa strings' );";

3
#import "DBAccess.h"
//フレームワーク化したQuickLiteをインポート
#import <QuickLite/QuickLite.h>
@implementation DBAccess
- (IBAction)testRun:(id)sender
{
long i;
NSString* dbPath = @"~/testdb"; //データベースファイル
QuickLiteDatabase* db = [QuickLiteDatabase databaseWithFile: dbPath];
//データベースファイルをもとにしたデータベースオブジェクトを構築する
[db open];

//データベースを開く

NSArray* tableArray = [db tables];

//テーブルの個数を参照

for (i = 0; i < [tableArray count]; i++)

//とりあえずテーブルをすべて消す

[db dropTable: [tableArray objectAtIndex: i]];
[db performQuery: @"CREATE TABLE TEST1(id INTEGER PRIMARY KEY, str1, str2);"];
//テーブルを作成するクエリーを発行する
[db performQuery: NSLocalizedString( @"SQL1", @"" ) ];

//INSERTのクエリーを発行

[db performQuery: NSLocalizedString( @"SQL2", @"" ) ];
:
[db performQuery: NSLocalizedString( @"SQL9", @"" ) ];
[db performQuery: NSLocalizedString( @"SQL10", @"" ) ];
QuickLiteCursor* cursor = [db performQuery: @"SELECT * FROM TEST1;"];
//テーブルのレコードをすべて取り出す
long rowCount = [cursor rowCount];

//レコード数を求める

if (rowCount > 0) {
for (i = 0; i < rowCount; i++) {

//それぞれのレコードについて

QuickLiteRow* row = [cursor rowAtIndex: i]; //行データを参照し
if (row != nil) {

//各フィールドの値を取り出す

NSLog(@"%@: %@", @"id", [row stringForColumn: @"id"]);
NSLog(@"%@: %@", @"str1", [row stringForColumn: @"str1"]);
NSLog(@"%@: %@", @"str2", [row stringForColumn: @"str2"]);
}
}
}
[db close]; //データベースを閉じる
}
@end

4

Weitere ähnliche Inhalte

Andere mochten auch

Forbidden love 4
Forbidden love 4Forbidden love 4
Forbidden love 4SATANAPUN
 
Finance Deck 11062014
Finance Deck 11062014Finance Deck 11062014
Finance Deck 11062014Elske Meines
 
Some Dewey, Some Don't - Final Youth Branch Categories
Some Dewey, Some Don't - Final Youth Branch CategoriesSome Dewey, Some Don't - Final Youth Branch Categories
Some Dewey, Some Don't - Final Youth Branch CategoriesGail Borden Public Library
 
Regulamento interno2
Regulamento interno2Regulamento interno2
Regulamento interno2nacyr
 
Humans are getting dumber ii
Humans are getting dumber iiHumans are getting dumber ii
Humans are getting dumber iiEncarni González
 

Andere mochten auch (6)

Forbidden love 4
Forbidden love 4Forbidden love 4
Forbidden love 4
 
Finance Deck 11062014
Finance Deck 11062014Finance Deck 11062014
Finance Deck 11062014
 
Some Dewey, Some Don't - Final Youth Branch Categories
Some Dewey, Some Don't - Final Youth Branch CategoriesSome Dewey, Some Don't - Final Youth Branch Categories
Some Dewey, Some Don't - Final Youth Branch Categories
 
El Cant Del BarçA
El Cant Del BarçAEl Cant Del BarçA
El Cant Del BarçA
 
Regulamento interno2
Regulamento interno2Regulamento interno2
Regulamento interno2
 
Humans are getting dumber ii
Humans are getting dumber iiHumans are getting dumber ii
Humans are getting dumber ii
 

Ähnlich wie Cocoa勉強会#6-SQLiteをCocoaで使う

uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoyauroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoyaKenichi Hoshi
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンKazuyuki Miyake
 
初心者向け SQLite の始め方
初心者向け SQLite の始め方初心者向け SQLite の始め方
初心者向け SQLite の始め方suno88
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
PhpでMySqlを使う
PhpでMySqlを使うPhpでMySqlを使う
PhpでMySqlを使うpcod
 
FMDBの利用方法
FMDBの利用方法FMDBの利用方法
FMDBの利用方法uske7i
 
10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~智治 長沢
 
本当にあった怖い話し Db編
本当にあった怖い話し Db編本当にあった怖い話し Db編
本当にあった怖い話し Db編Oda Shinsuke
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
2011/12/3 わんくま同盟
2011/12/3 わんくま同盟2011/12/3 わんくま同盟
2011/12/3 わんくま同盟貴仁 大和屋
 
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターンAzure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターンKazuyuki Miyake
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreChihiro Ito
 
Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Shotaro Suzuki
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングKazuki Takai
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 

Ähnlich wie Cocoa勉強会#6-SQLiteをCocoaで使う (20)

uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoyauroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
uroboroSQLの紹介 (OSC2017 Nagoya) #oscnagoya
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターンAzure Cosmos DB を使った高速分散アプリケーションの設計パターン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
 
初心者向け SQLite の始め方
初心者向け SQLite の始め方初心者向け SQLite の始め方
初心者向け SQLite の始め方
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
PhpでMySqlを使う
PhpでMySqlを使うPhpでMySqlを使う
PhpでMySqlを使う
 
[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005[Japan Tech summit 2017] DAL 005
[Japan Tech summit 2017] DAL 005
 
FMDBの利用方法
FMDBの利用方法FMDBの利用方法
FMDBの利用方法
 
10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~
 
本当にあった怖い話し Db編
本当にあった怖い話し Db編本当にあった怖い話し Db編
本当にあった怖い話し Db編
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
2011/12/3 わんくま同盟
2011/12/3 わんくま同盟2011/12/3 わんくま同盟
2011/12/3 わんくま同盟
 
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターンAzure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
 
2011/11/26 Dot netlab
2011/11/26 Dot netlab2011/11/26 Dot netlab
2011/11/26 Dot netlab
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data Store
 
Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティング
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 

Mehr von Masayuki Nii

Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)Masayuki Nii
 
トップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediatorトップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-MediatorMasayuki Nii
 
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみるCocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみるMasayuki Nii
 
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法Masayuki Nii
 
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnectionCocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnectionMasayuki Nii
 
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModalityCocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModalityMasayuki Nii
 
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号Masayuki Nii
 
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-BaseによるローカライズまとめCocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-BaseによるローカライズまとめMasayuki Nii
 
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しないCocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しないMasayuki Nii
 
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみるCocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみるMasayuki Nii
 
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビューCocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビューMasayuki Nii
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlMasayuki Nii
 
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号するCocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号するMasayuki Nii
 
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方Masayuki Nii
 
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプCocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプMasayuki Nii
 
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装Masayuki Nii
 
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法Masayuki Nii
 
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUICocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUIMasayuki Nii
 
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証Masayuki Nii
 
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーションCocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーションMasayuki Nii
 

Mehr von Masayuki Nii (20)

Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
Framework Enabling End-Users to Maintain Web Applications (ICICWS2015)
 
トップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediatorトップエスイー勉強会2014第1回-INTER-Mediator
トップエスイー勉強会2014第1回-INTER-Mediator
 
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみるCocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
 
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
Cocoa勉強会#34-iPhoneでタブバーを非表示に無理矢理する方法
 
Cocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnectionCocoa勉強会#61-メインスレッド外でNSURLConnection
Cocoa勉強会#61-メインスレッド外でNSURLConnection
 
Cocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModalityCocoa勉強会#23-カスタムシートとModality
Cocoa勉強会#23-カスタムシートとModality
 
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
Cocoa勉強会#60-Common Cryptoを使った共通鍵の暗号と復号
 
Cocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-BaseによるローカライズまとめCocoa勉強会#57-Baseによるローカライズまとめ
Cocoa勉強会#57-Baseによるローカライズまとめ
 
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しないCocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
Cocoa勉強会#56-小ネタ集あなたの常識はすでに通用しない
 
Cocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみるCocoa勉強会#45-AWS SimpleDBを使ってみる
Cocoa勉強会#45-AWS SimpleDBを使ってみる
 
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビューCocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
Cocoa勉強会#36-iPhone OS 3.0で変更されたテーブルビュー
 
Cocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurlCocoa勉強会#33-意外に楽に使えるlibcurl
Cocoa勉強会#33-意外に楽に使えるlibcurl
 
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号するCocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
Cocoa勉強会#28-OpenSSLで暗号化したファイルを復号する
 
Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方Cocoa勉強会#27-QuickLookプラグインの作り方
Cocoa勉強会#27-QuickLookプラグインの作り方
 
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプCocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
Cocoa勉強会23-識別情報の変換〜文字エンコードとデータタイプ
 
Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装Cocoa勉強会#37-シェイクイベントの実装
Cocoa勉強会#37-シェイクイベントの実装
 
Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法Cocoa勉強会#32-表形式のデータに順序を記録する方法
Cocoa勉強会#32-表形式のデータに順序を記録する方法
 
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUICocoa勉強会#35-iPhoneでのコピペとカスタムUI
Cocoa勉強会#35-iPhoneでのコピペとカスタムUI
 
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
Cocoa勉強会#47-NSURLConnectionのデリゲートメソッドと認証
 
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーションCocoa勉強会#38-UITableViewテーブル内のナビゲーション
Cocoa勉強会#38-UITableViewテーブル内のナビゲーション
 

Kürzlich hochgeladen

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Kürzlich hochgeladen (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Cocoa勉強会#6-SQLiteをCocoaで使う

  • 1. 第6回 Cocoa 勉強会(2004/7/10) SQLite を Cocoa で使う(新居雅行) SQL データベースの SQLite SQLite の特徴  Public Dmain 、 オ ー プ ン ソ ー ス で 、 事 実 上 自 由 に 使 え る SQL デ ー タ ベ ー ス (http://www.sqlite.org/)  オリジナルには C/C++および TCL のインタフェースだけが用意されている  PHP5 への標準バンドル、さらには Mac OS X v10.4 へのバンドルが予定されている  ネットワークには基本的には非対応のため、 組み込み用途が主なものとなる。 データベース は、1 つのファイルに保存される  「タイプレス」という独特の考え方。フィールドにはタイプを指定しないでもいい(という か、指定してもあまり意味はないかも)  数値については「精度」 「桁数」的な概念はまったくない。数値は倍精度浮動小数点数(64 ビット)にすべて展開される。  文字も数値もある意味は区別がないためちょっと独特。ただし、そのため BLOB 処理がち ょっと甘いとも言える  SQL の非サポート機能で目につくのは GRANT がないこと。アクセス権はデータベースフ ァイルに対して設定するというのが基本コンセプト。また、タイプレスのためか CHECK 制約は機能しないなどもある  Ver.2.8 系列は UTF-8 対応、Ver.3 より UTF-8/16 の両方に対応。なお、Ver.3 ではタイプ の扱いが違ってくる模様。  MySQL よりも速いといったベンチマークテストを掲載している。 PostgreSQL よりは 10∼ 20 倍、MySQL よりも 2 倍速いとしているが、SQLite では 1 つのトランザクションで処理 する事でそのスピードが出る SQLite を Mac OS X で使うには バイナリとして配布されているのは、Linux と Windows のみ。そのため、Mac OS X で使うに はビルドしないといけないが、配布されているソース群には make すらない。Mac OS X で手 軽に使うには、以下のものが必要。 SQLite の Mac OS X 版ビルド http://www.c-command.com/tools/sqlite.shtml QuickLite http://www.webbotech.com/ 1
  • 2. SQLite のコネクティビティ SQLite の接続機能を強化するものとしては以下のものがある。 SQLite 用の ODBC および JDBC のドライバ http://www.ch-werner.de/sqliteodbc/ http://www.ch-werner.de/javasqlite/ SQLiteServer 1.0(SQLite をネットワークからアクセス。REALbasic で制作) http://sqlabs.net/ QuickLite について  SQLite を使うための Cocoa のクラスをオープンソースで提供しているのが QuickLite  確かに、Xcode で開いてデータベース処理はできるが、事実上、自分で SQL 文をテキスト で作成しなければならない。 つまり、 データベースの内容をオブジェクト化するものではな く、SQLite へのインタフェースを取るための Cocoa クラス  そのため、以下の 3 種類のオブジェクト(クラス)について知るだけで使える(というか、 その程度の機能) 。以下の表は主なメソッドの紹介で、他にもメソッドがある NSQuickLiteDatabase databaseWithFile: open close performQuery: prepareStringForQuery: encodeDataToBase64: NSQuickLiteCursor rowCount columnCount columnNames rowAtIndex: valuesForColumn: valuesForRow: NSQuickLiteRow stringForColumn: dataForColumn: andRow: values データベースファイルの抽象化 データベースファイルを指定して初期化 データベースをオープン データベースをクローズ 文字列で指定した SQL 文を発行、NSQuickLinkCursor を戻す SQL 文をクエリーできるように変換。つまりクォートの 置き換え NSData を base64 にして NSString を戻す クエリー結果の抽象化クラス レコード数 フィールド数 フィールド名の NSArray を得る レコード番号を指定して NSQuickLinkRow への参照を 得る 文字列で指定したフィールドのデータを NSArray で得る レコード番号で指定したレコードのデータを NSDictionary で得る クエリー結果の中の 1 レコードを抽象化するクラス フィールド名を指定してそのフィールドのデータを文字 列として得る フィールド名とレコード番号指定してそのフィールドの データを NSData として得る レコードのデータを NSDictionary で得る 2
  • 3.  NSString での Unicode でインプット/アプトプットがきちんとできる。もちろん日本語も OK  BLOB 対応のために base64 でエンコードする。挿入するデータについては自分で base64 にしないといけないが、メソッドは用意されている。取り出しは NSData として取り出す メソッドで元のバイナリが得られる  SQLite をフレームワークにするというプロジェクトもあるが、激しくバグっており(きっ と、プロジェクトを作ったけど、ほんとにフレームワークとして使ってはいないだろう) 、 それはそのままでは使えない。動くフレームワークは、Cocoa 勉強会のサーバ領域に保存 (ファイル名: QuickLite Framework.zip)  テキストファイルのインポート機能があることはあるが、 これはちょっと使えない…。 まじ めにテキストファイルのインポートする人はちゃんと改造するか、自分で作りましょう QuickLite を使ったサンプルプログラム ファイル名:msykQLsample.zip "SQL1" = "INSERT INTO TEST1(str1,str2) VALUES( '表示', 'aaa strings' );"; "SQL2" = "INSERT INTO TEST1(str1,str2) VALUES( '日本語', 'aaa strings' );"; "SQL3" = "INSERT INTO TEST1(str1,str2) VALUES( '東京特許許可局', 'aaa strings' );"; "SQL4" = "INSERT INTO TEST1(str1,str2) VALUES( '髙島屋', 'aaa strings' );"; "SQL5" = "INSERT INTO TEST1(str1,str2) VALUES( '美しい日本語', 'aaa strings' );"; "SQL6" = "INSERT INTO TEST1(str1,str2) VALUES( '日本語', 'aaa strings' );"; 3
  • 4. #import "DBAccess.h" //フレームワーク化したQuickLiteをインポート #import <QuickLite/QuickLite.h> @implementation DBAccess - (IBAction)testRun:(id)sender { long i; NSString* dbPath = @"~/testdb"; //データベースファイル QuickLiteDatabase* db = [QuickLiteDatabase databaseWithFile: dbPath]; //データベースファイルをもとにしたデータベースオブジェクトを構築する [db open]; //データベースを開く NSArray* tableArray = [db tables]; //テーブルの個数を参照 for (i = 0; i < [tableArray count]; i++) //とりあえずテーブルをすべて消す [db dropTable: [tableArray objectAtIndex: i]]; [db performQuery: @"CREATE TABLE TEST1(id INTEGER PRIMARY KEY, str1, str2);"]; //テーブルを作成するクエリーを発行する [db performQuery: NSLocalizedString( @"SQL1", @"" ) ]; //INSERTのクエリーを発行 [db performQuery: NSLocalizedString( @"SQL2", @"" ) ]; : [db performQuery: NSLocalizedString( @"SQL9", @"" ) ]; [db performQuery: NSLocalizedString( @"SQL10", @"" ) ]; QuickLiteCursor* cursor = [db performQuery: @"SELECT * FROM TEST1;"]; //テーブルのレコードをすべて取り出す long rowCount = [cursor rowCount]; //レコード数を求める if (rowCount > 0) { for (i = 0; i < rowCount; i++) { //それぞれのレコードについて QuickLiteRow* row = [cursor rowAtIndex: i]; //行データを参照し if (row != nil) { //各フィールドの値を取り出す NSLog(@"%@: %@", @"id", [row stringForColumn: @"id"]); NSLog(@"%@: %@", @"str1", [row stringForColumn: @"str1"]); NSLog(@"%@: %@", @"str2", [row stringForColumn: @"str2"]); } } } [db close]; //データベースを閉じる } @end 4