0

エミュレーターはデータベースにアクセスできますが、Android デバイスでは動作しません。Android デバイスは、このアプリケーションを開くと自動的に閉じます。Google API (Google Inc.) - API レベル 10 エミュレーター パッケージ ict.mobile を使用しています。

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class DatabaseMemberQuery extends Activity implements OnClickListener {
    SQLiteDatabase db;
String sql;
Cursor cursor = null;
String[] columns = { "mid", "name", "password", "age" };
TextView tvData;
String dataStrHeader = String.format("%4s %-12s %-9s %3s\n", "Mid", "Name", "Password", "Age");
String dataStr;
Button btnDBinitial, btnAction;

public void findView() {
    tvData = (TextView) findViewById(R.id.data);
    btnDBinitial = (Button) findViewById(R.id.btnDBinitial);
    btnAction = (Button) findViewById(R.id.btnAction);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    findView();
    btnDBinitial.setOnClickListener(this);
    btnAction.setOnClickListener(this);
    initialDB();
}

public void onClick(View v) {
    if (v.equals(btnDBinitial)) {
        initialDB();
    }
    else if (v.equals(btnAction)) {
        try {
            db = SQLiteDatabase.openDatabase("/data/data/ict.mobile/MemberDB", null, SQLiteDatabase.OPEN_READONLY);


            cursor = db.rawQuery("select * from Member where age >=30 order by mid", null);
            int result = cursor.getCount();
            Toast.makeText(this, "Count: " + result, Toast.LENGTH_SHORT).show();

            dataStr = dataStrHeader;
            while (cursor.moveToNext()) {
                int mid = cursor.getInt(cursor.getColumnIndex("mid"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String password = cursor.getString(cursor.getColumnIndex("password"));
                int age = cursor.getInt(cursor.getColumnIndex("age"));
                dataStr += String.format("%4d %-12s %-9s %3d\n", mid, name, password, age);

            }
            tvData.setText(dataStr);
            db.close();
        } catch (SQLiteException e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
}

public void initialDB() {
    try {

        db = SQLiteDatabase.openDatabase("/data/data/ict.mobile/MemberDB", null, SQLiteDatabase.CREATE_IF_NECESSARY);
        sql = "DROP TABLE if exists Member;";
        db.execSQL(sql);

        sql= "CREATE TABLE Member(" + "mid int PRIMARY KEY ," + "name text, "
                + "password text, "+ "age int); ";

        db.execSQL(sql);

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1001, 'Amy Carl', '12345', 16); ");

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1002, 'Helen Leung', '88888', 25); ");

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1003, 'Robert Chan', 'iloveu', 61); ");

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1004, 'Carol Wong', 'peterpan', 33); ");

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1005, 'Carman Wong', 'pooh', 44); ");

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1006, 'John Chan', 'johnchan', 28); ");

        db.execSQL("INSERT INTO Member(mid, name, password, age) values"
                + "(1007, 'Paul Lam', 'apple', 16); ");

        cursor = db.rawQuery("select * from Member order by mid", null);

        dataStr = dataStrHeader;
        while (cursor.moveToNext()) {
            int mid = cursor.getInt(cursor.getColumnIndex("mid"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String password = cursor.getString(cursor.getColumnIndex("password"));
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            dataStr += String.format("%4d %-12s %-9s %3d\n", mid, name, password, age);
        }
        tvData.setText(dataStr);
        Toast.makeText(this, "Table Member is created and initialised.", Toast.LENGTH_SHORT).show();
        db.close();
    }
    catch (SQLiteException e) {
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
    }
}

}

4

1 に答える 1

0

データベースのパスは

/data/data/ict.mobile/databases/MemberDB

ドキュメントによると

sqlite3 を使用するには、上記のようにエミュレータ インスタンスでリモート シェルに入り、sqlite3 コマンドを使用してツールを呼び出します。必要に応じて、sqlite3 を呼び出すときに、探索するデータベースへのフル パスを指定できます。エミュレーター/デバイス インスタンスは、SQLite3 データベースをフォルダー/data/data/< package_name >/databases/に格納します。

次に例を示します。

adb -s emulator-5554 shell
# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db`

新しいパスでアプリを実行する前に、エミュレーター/デバイスからアプリを削除してください。

于 2013-06-23T13:53:36.577 に答える