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