Android開発 虎の巻

SQLite

■コマンドラインの操作

1.adbのパスを通す。

[スタートメニュー]から「コンピュータ」を右クリックし、[プロパティ]の「システムの詳細設定」で「環境変数」をクリック システム環境変数「path」を選択し、「編集」を押す。 「変数値」の最後に ; を加え、その後に、c:\android\sdk\platform-tools を追加。OKを押し閉じる。

2.エミュレータが起動している状態でコマンドプロンプトを開き、adb shell を行う。

スタートメニューから[すべてのプログラム]-[アクセサリ]-[コマンドプロンプト]でコマンドプロンプトを開き、「adb shell」を入力。

3.ファイル一覧を見るコマンド ls を行ってみる。その後、cd sdcard でsdcardのフォルダに移動する。

■sqlite3の操作

以下のコマンドを入力。

sqlite3 ファイル名

そして、SQLを入力し、操作する。

■SQL以外の sqlite3 の操作

.exit終了
.tablesテーブル一覧
.schema テーブル名スキーマの表示
.header ON または OFFヘッダ表示のON/OFF
.explain ON または OFFテーブル表示の際の整形

■sqliteのデータ型

TEXT テキスト
INTEGER 符号付整数
REAL 浮動小数点数
BLOB Binary Large OBject
NULL NULL

■テーブルの作成

CREATE TABLE テーブル名(フィールド名1 データ型1 制約, フィールド名2 データ型2 制約, フィールド名3 データ型3 制約,,,, );

例
CREATE TABLE shouhin ( sid INTEGER PRIMARY KEY,  sname TEXT,  tanka INTEGER); 

◎制約

primary keyプライマリキーとする
not nullNULLを許可しない
autoincrement自動連番

■レコード追加(INSERT)

レコードを一件追加する

INSERT INTO テーブル名 ( フィールド名 ,,, ) VALUES ( 値 ,,,)

フィールド名と値を対応させて記述する、

例:
INSERT INTO shouhin (sid , sname , tanka ) VALUES ( 1, 'りんご', 200 ); 

■レコード検索(SELECT)

SELECT:レコードの検索を行う

全件、全項目表示

SELECT * FROM テーブル名;

例
SELECT * FROM shouhin; 

■レコード変更(UPDATE)

レコードの内容を変更する

UPDATE テーブル名 SET フィールド名= ? , フィールド名 = ?,,, WHERE 条件;

例:
UPDATE shouhin SET tanka = 100 WHERE sid = 1; 

注意:WHERE をつけない場合、全レコードが対象となる

■レコード削除(DELETE)

レコードを削除する

DELETE FROM テーブル名 WHERE 検索条件;

例:
DELETE FROM shouhin WHERE sid = 3; 

注意:WHERE をつけない場合、全レコードが対象となる。

■Androidでのsqliteの使用

1.SQLiteOpenHelperを継承したクラスを作成(例:DbHelper)

そのクラスのonCreateで新規テーブルを作成するようにする(最初にファイルを作成するときに呼ばれる)

	public void onCreate(SQLiteDatabase db) {
		  String sql = "create table shouhin(sid integer primary key,sname text,tanka integer)";

		  db.execSQL(sql);

	}

2.作成したクラスのインスタンスを生成

フィールドとして DbHelper クラスを宣言

public class MainActivity extends Activity {
	private DbHelper dbHelper;

onCreate内でインスタンスを生成

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		dbHelper = new DbHelper(this,"hanbai.db",null,1);
	}

※コンストラクタの 1 はバージョン

3.追加、更新、削除などの処理

単純な追加の例

		String sql ="insert into shouhin( sname,tanka) values ('りんご',100)"; 
		
		SQLiteDatabase db = dbHelper.getWritableDatabase();
		db.execSQL(sql);

ファイルは /data/data/(パッケージ名)/databases に保存される。

変数の値を使用した例

		String sql ="insert into shouhin( sname,tanka) values (?,?)"; 
		Object[] params = new Object[]{sname,tanka};
		
		SQLiteDatabase db = dbHelper.getWritableDatabase();
		db.execSQL(sql,params);

4.データ取得処理

※下記ソースの前提としてListViewに adapter を設定しています

フィールド

	private ArrayAdapter<string> adapter;

onCreate内

		ListView listview = (ListView)findViewById(R.id.listView1);
		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
		listview.setAdapter(adapter);

単純なデータの取得

		SQLiteDatabase db = dbHelper.getReadableDatabase();
		
		Cursor cur = db.rawQuery("select * from shouhin", null);

		while (cur.moveToNext()){  
			adapter.add(cur.getString(1));
		}

※項目位置の番号は cur.getColumnIndex("sname") で取得可能

パラメータの指定

		SQLiteDatabase db = dbHelper.getReadableDatabase();
		String[] params = {"150"};
		
		Cursor cur = db.rawQuery("select * from shouhin where tanka >= ?",params );
Android開発 虎の巻