サンプル集  >  Android  >  SQLite検索
SQLite検索
2014/04/23

Androidアプリで、SQLiteへデータの読み込みをします。

◆環境
OS Windows 7 Professional Service Pack 1 64bit
eclipse 4.2.2
Android 4.4
Android端末 Nexus7

@eclipseで[File]-[New]-[Project]を選択します。

ANew Projectウィンドウが開いたら[Android]-[Android Application Project]を選択し「Next」ボタンを押します。

BNew Android Applicationウィンドウが開いたら「Aplication Name」に AndroidSQLiteSelectTest と入力し「Next」ボタンを押します。

CConfigure Projectウィンドウが開いたらそのまま「Next」ボタンを押します。

DConfigure the attributes of the icon setウィンドウが開いたらそのまま「Next」ボタンを押します。

ECreate Activityウィンドウが開いたらそのまま「Next」ボタンを押します。

FBlank Activityウィンドウが開いたらそのまま「Finish」ボタンを押します。

ボタンを1つ追加し、ボタンを押したときに button1_click関数が呼ばれるよう activity_main.xml にandroid:onClickを追記します。 続けてデータベースの処理クラスを作成します。 ※ボタンの配置やデータベース処理クラスは SQLite と同じです。

MainActivity.java にボタンを押されたらデータベースを検索して結果をLogへ出力する処理を入れます。

MainActivity.java
 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: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
package com.example.androidsqliteselecttest;

import com.example.androidsqliteselecttest.R;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity
{
    SQLiteDatabase mydb;

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

        MyOpenHelper hlpr
        = new MyOpenHelper( getApplicationContext() );

        mydb = hlpr.getWritableDatabase();
    }

    @Override
    public boolean onCreateOptionsMenu( Menu menu )
    {
        getMenuInflater().inflate( R.menu.main, menu );
        return true;
    }

    public void button1_click( View v )
    {
        String sql = "SELECT uid, data from myTbl";
        Log.d( "INFO""SQL=" + sql );

        Cursor cur = mydb.rawQuery( sql, null );

        while( cur.moveToNext() )
        {
            Log.d( "INFO""uid="  + cur.getInt( 0 ) );
            Log.d( "INFO""data=" + cur.getString( 1 ) );
        }

        Log.d( "INFO""finish." );

        mydb.close();
    }
}

実行してボタンを押したところ、以下のログが出力されました。

04-24 09:42:23.641: D/INFO(11587): SQL=SELECT uid, data from myTbl
04-24 09:42:23.651: D/INFO(11587): finish.

SQLiteで作ったデータベースの内容が表示されると思ったのですが、1行もデータが表示されませんでした。

SQLiteの取得と内容確認でデータベースを取得するときに、途中のパスにパッケージ名が入っていました。

/data/data/com.example.androidsqlitetest/databases/SQLiteTestDB.db

パッケージ名を同じにすれば取得できるでしょうか。 パッケージ名を「com.example.androidsqlitetest」に変更して実行してみます。

結果は同じでした。 LogCatを見ると、Applicationは変更前のパッケージ名のままでした。

他にも変更しなければならない箇所があるようです。

gen 配下の名前も変更します。 変更すると、すぐに2つフォルダができました。Auto Buildにしているからでしょうか。

最後に AndroidManifest.xml の package を変更します。

AndroidManifest.xml
 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: 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/andro
id"

    package="com.example.androidsqlitetest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.androidsqlitetest.MainActiv
ity"

            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"
 />

                <category android:name="android.intent.category.L
AUNCHER"
 />
            </intent-filter>
        </activity>
    </application>

</manifest>

再度実行してみます。

04-24 10:34:05.701: D/INFO(12475): SQL=SELECT uid, data from myTbl
04-24 10:34:05.701: D/INFO(12475): uid=1
04-24 10:34:05.711: D/INFO(12475): data=DATA
04-24 10:34:05.711: D/INFO(12475): uid=2
04-24 10:34:05.711: D/INFO(12475): data=DATA
04-24 10:34:05.711: D/INFO(12475): uid=3
04-24 10:34:05.711: D/INFO(12475): data=DATA
04-24 10:34:05.711: D/INFO(12475): finish.

SQLiteで作ったデータベースの内容が表示されました。 複数プロジェクトで同じデータベースを扱いたい場合、パッケージ名を合わせる必要があるようですね。

▲ PageTop  ■ Home


Copyright (C) 2014 ymlib.com