Android Contacts - SQLite数据库连接失败

时间:2013-01-22 09:31:28

标签: android sqlite

我想直接通过数据库访问Android联系人。为此我

SQLiteDatabase data=null;
File file = new File(".... some path ... contacts2.db");
data = SQLiteDatabase.openOrCreateDatabase(file, null);

但它失败了,因为异常android.database.sqlite.SQLiteCantOpenDatabaseException无法打开数据库。为什么会这样?该文件完全包含所需的数据。

第二个问题是:如何获取联系人数据库文件的路径,在其他版本中可能会有所不同?

3 个答案:

答案 0 :(得分:2)

android中的联系人是sqlite数据库中的商店,名为 contacts.db的文件

开发工具Android Debug Bridge(ADB)可用于从EMULATOR中提取文件

ADB也可以从手机中提取文件,但必须先将其设置为root,并且必须在机器上安装ADB驱动程序

(您可以使用ContentProvider访问android中的联系人。)

contacts.db 文件存储在受保护的系统内存中,文件路径为:

数据/数据/ com.android.providers.contacts /数据库/ contacts.db

答案 1 :(得分:0)

如果要连接到联系人数据库,则清单中必须具有“READ_CONTACTS”权限。联系人数据库位于/data/data/com.android.provider.contacts位置,如果没有root权限,则无法访问它们。唯一的解决方案是使用ContactContract和managedQuery。我给你代码样本。

public void kontakt()
    {
        Cursor k = this.kontakty();
        int a = k.getCount();
        while(k.moveToNext())
        {

            String s = k.getString(k.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            tv.append(s);
            tv.append("\n");

        }

    }




    @SuppressWarnings("deprecation")
    public Cursor kontakty()
    {
        Uri u = ContactsContract.Contacts.CONTENT_URI;
        String[] cochcemy = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME}; 
        return managedQuery(u, cochcemy, null, null, null);

    }

我希望我能帮忙。

答案 2 :(得分:0)

public class DatabaseHelper extends SQLiteOpenHelper {


    private static final String DATABASE_NAME = "upgrade.db";
    public static final String TITLE = "title";
    public static final String AUTHOR = "author";
    public static final String ISBN = "isbn";
    public static final String CITY = "city";
    public static final String CITY2 = "city2";



    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null,3); 

    }


    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL( "CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT ,author TEXT,isbn TEXT,city TEXT );");


        Log.v("onCreate-------","called onCreate"); 

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        android.util.Log.w("books",
        "Upgrading database, which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS books");
    onCreate(db);
        Log.v("onUpgrade-------","called onUpgrade with alter"); 
    }
}

在其他课程中你可以打电话: -

 public void onLoad(View v)
    {

        DatabaseHelper dbh = new DatabaseHelper(this);
        SQLiteDatabase sl = dbh.getReadableDatabase();


        Cursor c = sl.rawQuery("select * from books",null);

        c.moveToFirst();
        /* here your code to fetch data*/


        Toast.makeText(this,"hello",Toast.LENGTH_SHORT).show();
        sl.close();
    }