Android数据库问题

Android数据库问题,android,database,Android,Database,模拟器可以访问数据库,但不能在android设备上工作。 android设备将在我打开时自动关闭此应用程序。 我使用的是谷歌API(谷歌公司)-API 10级仿真器 包ict.mobile import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException;

模拟器可以访问数据库,但不能在android设备上工作。 android设备将在我打开时自动关闭此应用程序。 我使用的是谷歌API(谷歌公司)-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();
    }
}

}

数据库的路径应为

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

要使用sqlite3,请在emulator实例上输入一个远程shell,如上所述,然后使用sqlite3命令调用该工具。或者,在调用sqlite3时,可以指定要浏览的数据库的完整路径。Emulator/device实例将SQLite3数据库存储在文件夹/data/data//databases/

下面是一个例子:

adb -s emulator-5554 shell
# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db`
在使用新路径执行应用程序之前,请从模拟器/设备中删除应用程序。

显示logcat的输出: