0

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

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

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

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

4

3 回答 3

2

android中的联系人存储在sqlite数据库和名为contacts.db的文件中

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

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

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

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

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

于 2013-01-22T10:34:08.970 回答
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);

    }

我希望我有所帮助。

于 2013-01-22T09:37:37.200 回答
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();
    }
于 2013-01-22T09:52:23.707 回答