スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

データの挿入

SQLiteOpenHelper の記事で作成した accountテーブルにデータを挿入してみます。


execSQL()メソッド


SQL文をそのまま使うなら execSQL()メソッドを使います。execSQL()メソッドは、SELECT文等のデータを返すSQL文以外のクエリを実行可能です。

package sample.basic;

import android.app.Activity;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;

public class HelloAndroid extends Activity{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

DatabaseHelper dbHelper = new DatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();

try{
String sql="insert into account(name, money) values('太郎', 1000);";
db.execSQL(sql);
}catch(SQLException e){
Log.e("Hello", e.toString());
}
db.close();
}
}


SQL文の打ち間違え等で例外が発生する恐れが大きいので、try~catch文でログを残すようにしました。

SQLite Managerでデータが挿入されているか確認します。

20111211_1



ContentValuesクラスとinsert()メソッド


ContentValuesクラスは、カラムと値をセットにして保存することのできるクラスです。

使い方としては、ContentValuesインスタンスを生成して、put()メソッドでインスタンスにカラムの値を追加します。

public void put(String key, 型 value)



こうして設定したデータを insert()メソッドでデータベースに追加します。

long insert(String table, String nullColumnHack, ContentValues values)

戻り値は追加された行のIDで、エラーが発生した場合は-1が返ります。

package sample.basic;

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;

public class HelloAndroid extends Activity{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

DatabaseHelper dbHelper = new DatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();

ContentValues cv=new ContentValues();
cv.put("name", "次郎");
cv.put("money", 2000);
long id=db.insert("account", null, cv);
if(id<0){
Log.e("Hello", "データ追加に失敗");
}
db.close();
}
}


SQLite Managerで確認
20111212_1



データ挿入処理を改良


ContentsValuesインスタンスの生成から始まる一連のデータ挿入処理は長々と面倒なので、DatabaseHelperクラスに、必要な項目を引数で指定するだけでデータを挿入できるinsert()メソッドを定義しました。

package sample.basic;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseHelper extends SQLiteOpenHelper{

private static final String DB_NAME = "sample.db";
private static final String TABLE = "account";
private static final int DB_VERSION = 1;
private static final String CREATE_TABLE =
"create table " + TABLE + "("
+"id integer primary key autoincrement,"
+"name varchar(30) not null,"
+"money integer);";

public DatabaseHelper(Context context){
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public static void insert(SQLiteDatabase db, String name, int money) {
ContentValues cv=new ContentValues();
cv.put("name", name);
cv.put("money", money);
long id=db.insert("account", null, cv);
if(id<0){
Log.e("Hello", "データ追加に失敗");
}
}
}



package sample.basic;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class HelloAndroid extends Activity{

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

DatabaseHelper dbHelper = new DatabaseHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();

DatabaseHelper.insert(db, "三郎", 3000);
db.close();
}
}


insert()メソッドを定義したおかげで、コードが少しすっきりしました。

SQLite Managerで確認
20111212_2


関連記事
スポンサーサイト

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

2012-10-18 Thu 07:00:40

このコメントは管理者の承認待ちです

2012-10-25 Thu 07:01:43

このコメントは管理者の承認待ちです

2012-10-29 Mon 23:16:12

このコメントは管理人のみ閲覧できます

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://androidhacker.blog94.fc2.com/tb.php/85-e5fe072d
  • 閉じるボタン
レファレンス
月別アーカイブ
リンク
カテゴリ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。