我想直接通过数据库访问Android联系人。为此我
SQLiteDatabase data=null;
File file = new File(".... some path ... contacts2.db");
data = SQLiteDatabase.openOrCreateDatabase(file, null);
但它失败了,因为异常android.database.sqlite.SQLiteCantOpenDatabaseException无法打开数据库。为什么会这样?该文件完全包含所需的数据。
第二个问题是:如何获取联系人数据库文件的路径,在其他版本中可能会有所不同?
答案 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();
}