My Photo

« 第20節、新潟ホームで大勝 | Main | 瀬川さんちとかわいそう »

August 07, 2011

Androidアプリ開発メモ011:SQLiteの利用

SQLiteの利用

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
 
public class SQLiteSimpleExample2 extends Activity {
  
//  private static final String DATABASE_NAME = "kishi.db";
  private static final int DB_VERSION = 1;
  private static final String TABLE_NAME = "kishiData";
  public static final String KISHI_ID = "kishiId";
  public static final String NAME = "name";
  public static final String WIN = "win";
  public static final String LOSE = "lose";
  private KishiData players;
  
  private TextView aTextView;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    aTextView = (TextView)findViewById(R.id.myTextView);
    
    // DB作成
    players = new KishiData(this);
    
    // データをdeleteで削除
    SQLiteDatabase sqlwdb = players.getWritableDatabase();
    int numDelete = sqlwdb.delete(
        TABLE_NAME,
        NAME + " = ? OR " + KISHI_ID + " = ?",
        new String[] { "T.Kubo", "235" });
    Log.v("db", "number of delete = " + numDelete);
    
    // データをselectで取得
    String[] columns = { "_id", KISHI_ID, NAME, WIN, LOSE };
    SQLiteDatabase sqlrdb = players.getReadableDatabase();
    Cursor cursor = sqlrdb.query(
        TABLE_NAME, columns,
        NAME + "=" + "'Y.Habu'",
        null, null, null, null);
    Log.v("db", "number of rows = " + cursor.getCount());
    if (cursor.getCount() != 0) {
      cursor.moveToFirst();
      aTextView.setText(
          cursor.getString(1) + ","
          + cursor.getString(2) + ","
          + cursor.getInt(3) + ","
          + cursor.getInt(4));
    } else {
      aTextView.setText("no data to display");
    }
  }
  
  public class KishiData extends SQLiteOpenHelper {
    public KishiData(Context context) {
//    super(context, DATABASE_NAME, null, DB_VERSION);
      super(context, null, null, DB_VERSION);
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
      
      // テーブル作成
      db.execSQL(
          "CREATE TABLE " + TABLE_NAME
          + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
          + KISHI_ID + " TEXT, "
          + NAME + " TEXT, "
          + WIN + " INTEGER, "
          + LOSE + " INTEGER);");
      
      ContentValues cv = new ContentValues(4);
      
      // 初期データをINSERTで作成
      cv.put(KISHI_ID, "175");
      cv.put(NAME, "Y.Habu");
      cv.put(WIN, 1);
      cv.put(LOSE, 0);
      db.insert(TABLE_NAME, null, cv);
      
      cv.put(KISHI_ID, "235");
      cv.put(NAME, "A.Watanabe");
      cv.put(WIN, 1);
      cv.put(LOSE, 0);
      db.insert(TABLE_NAME, null, cv);
      
      cv.put(KISHI_ID, "207");
      cv.put(NAME, "T.Kubo");
      cv.put(WIN, 0);
      cv.put(LOSE, 1);
      db.insert(TABLE_NAME, null, cv);
    }
    
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
  }
}

SQLiteOpenHelperを使用してDBを作成する

public SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)
context:コンテキスト(?)
name:データベースファイルの名前。nullの場合はインメモリーデータベース。
factory:カーソルオブジェクト作成に使われるfactory(?)。nullの場合はデフォルト
version:データベースのバージョンナンバー(1から始まる)。

android.database.sqlite.SQLiteDatabaseのメソッド

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
columns:取得するカラムのカラム名の配列
selections:where句。値にピリオドを含む場合はシングルクウォーテーションで歓呼でおいたほうが良い。たとえば "version=3.3.1"はエラーではエラーになるので、"version='3.3.1'"とする。ピリオドってSQLで特別な意味を持ってたっけ?
selectionArgs:selectionsに'?'を含む場合の引数
public long insert(String table, String nullColumnHack, ContentValues values)
nullColumnHack:普通はnullでよい。nullじゃない場合、not nullなところの値がnullだったら"NULL"という値を入れる(?)(全く自信なし)。

public int delete(String table, String whereClause, String[] whereArgs) whereClauseとwhereArgsは query() のselectionsとselectionArgsと同じ。 以下の2つは同じ結果になる。

delete(tableName,"NAME=?", new String[] {"Taro"});
delete(tableName,"NAME='Taro'", null);

public int update(String table, ContentValues values, String whereClause, String[] whereArgs)

« 第20節、新潟ホームで大勝 | Main | 瀬川さんちとかわいそう »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/52418786

Listed below are links to weblogs that reference Androidアプリ開発メモ011:SQLiteの利用:

« 第20節、新潟ホームで大勝 | Main | 瀬川さんちとかわいそう »

March 2017
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof