使用SQLiteAssetHelper

时间:2016-01-05 21:09:00

标签: android sqlite android-sqlite

MyDatabase类

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class Mydatabase extends SQLiteAssetHelper{

    private static final String DATABASE_NAME = "databases/mydb.db";
    private static final int DATABASE_VERSION = 1;

    public Mydatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public Cursor getEmployees() {

        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder  qb = new SQLiteQueryBuilder();

        String [] sqlSelect = {"_id", "name", "email"};
        String sqlTables = "contacts";

        qb.setTables(sqlTables);
        Cursor c = qb.query(db, sqlSelect, null, null,
                null, null, null);

        c.moveToFirst();
        return c;

    }

MainActivity类

public class MainActivity extends ListActivity {

    private Cursor employees;
    private MyDatabase db;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        db = new MyDatabase(this);
        employees = db.getEmployees(); // you would not typically call this on the main thread

        ListAdapter adapter = new SimpleCursorAdapter(this, 
                android.R.layout.simple_list_item_1, 
                employees, 
                new String[] {"name"}, 
                new int[] {android.R.id.list});

        getListView().setAdapter(adapter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        employees.close();
        db.close();
    }

}

我想连接assets文件夹中的数据库 我从GitHub尝试这个例子,但应用程序停止工作

logcate:  致命异常:主java.lang.IllegalStateException:无法执行活动的方法

      Caused by: java.lang.IllegalArgumentException: File databases/mydb.db contains a path separator

请帮助 感谢

1 个答案:

答案 0 :(得分:0)

我刚刚使用了数据库,但我没有将数据库引用为

   private static final String DATABASE_NAME = "databases/mydb.db";

我按如下方式访问它:

  private static final String DATABASE_NAME = "mydb.db";

我只是测试了你的方式,果然它打破了它。所以删除 database/只有mydb.db,它应该有用。