Tips

SQLiteDatabaseクラスを使いSQLを実行する(execSQL) 【Android TIPS】

SQLiteDatabaseオブジェクトを使い、SQL文を実行するにはexecSQL()を使用します。
execSQL()は結果を返すことができないため、SELECT文を使用したデータの取得はできませんが、結果を必要としないSQLであればどのようなSQL文でも実行することが可能です。

シグネチャは以下の2つです。

public void execSQL (String sql)
public void execSQL (String sql, Object[] bindArgs)

1つ目のメソッドは、引数にSQLをそのまま渡すことができます。

2つ目のメソッドは、第1引数のSQL中で「?」とした箇所に第2引数の値をあてはめる(バインドする)ことができます。

 

 

実行例です。

MyOpenHelper helper = new MyOpenHelper(this);
SQLiteDatabase db = helper.getWritableDatabase();

db.execSQL(
    "CREATE TABLE person(" +
    "   name TEXT NOT NULL," +
    "   age INTEGER " +
    ");"
);
 
db.execSQL("INSERT INTO person(name,age) VALUES ('佐藤 一郎', 24);");
db.execSQL("INSERT INTO person(name,age) VALUES (?, ?);",new Object[]{"鈴木 二郎",18});

 

実行結果イメージです。

name

age

佐藤 一郎 24
鈴木 二郎 18

 

 

注意しなくてはいけない点は、このexecSQL()メソッドは戻り値を返さないということです。

このメソッドで実行するのに適したSQLは以下となります。

  • ALTER TABLE
  • CREATE table / trigger / view / index / virtual table
  • DROP table / trigger / view / index / virtual table
  • REINDEX
  • RELEASE
  • SAVEPOINT

上記例では、INSERT文を実行していますが、戻り値がないためにINSERTに成功したかどうか判別する方法がありません。

同じ理由で、UPDATE文やDELETE文を実行するメソッドとしても適切とはいえないでしょう。(もちろんSELECT文は言うまでもありません。)

 

SQL

推奨されるメソッド

ALTER文/CREATE文/DROP文など execSQL()
SELECT文 query()
rawQuery()
queryWithFactory()
rawQueryWithFactory()
INSERT文 insert()
insertOrThrow()
insertWithOnConflict()
UPDATE文 update()
updateWithOnConflict()
DELETE文 delete()

 

また、AndroidのSQLiteでは、JDBCでおなじみのPreparedStatementを利用することもできます。

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search