本文将介绍使用root-access在Android上打开另一个应用程序的sqlite-database的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一
本文将介绍使用root-access在Android上打开另一个应用程序的sqlite-database的详细情况,。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于-Android 数据库 SQLiteDatabase 的使用、android intent隐式调用之一个应用程序启动另一个应用程序、Android SQLite Database、android SQLiteDatabase的知识。
本文目录一览:- 使用root-access在Android上打开另一个应用程序的sqlite-database
- -Android 数据库 SQLiteDatabase 的使用
- android intent隐式调用之一个应用程序启动另一个应用程序
- Android SQLite Database
- android SQLiteDatabase
使用root-access在Android上打开另一个应用程序的sqlite-database
我想打开另一个应用程序的数据库.
我知道我必须具有root访问权限,但似乎root访问权限仅适用于shell命令.
我想在数据库中进行大量选择和一些插入.
是否可以以root身份打开数据库,并在“普通”应用程序中使用db-handle?
提前致谢
拜伯
解决方法:
谢谢你的所有答案!
我认为唯一的方法是制作这样的东西:
Process p = Runtime.getRuntime().exec("su sqlite3 -csv test.db \"select * from test\";");
然后,我必须使用cvs解析器解析OutputStream,….
我希望我能以更简单的方式做到这一点,但我认为没有解决方案.
也许我可以在我的应用程序的目录中创建一个文件的硬链接,但这是非常危险的,因为这样一个数据库有两个“.journal”文件.
感谢帮助
拜伯
-Android 数据库 SQLiteDatabase 的使用

Android 提供了三种数据存储方式:
第一种是文件存储。
第二种是 SharedPreferences 存储。
第三种是数据库 SQLiteDatabase 存储。
文件存储我就不多说了,而 SharedPreferences 可以存取简单的数据 (int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列《Android 高手进阶教程》7.Android Preferences 的使用
今天我们将讲一下 Android SQLiteDatabase 的使用。而掌握 SqliteDatabase,将会我们接下来掌握 ContentProvider 打下良好的基石。
为了让大家更好的掌握,我们手把手完成该节的 Demo。
第一步:新建一个 Android 工程,命名为 SQLiteDatabaseDemo
第二步:创建一个新的类 BooksDB.java 这个类要继承于 android.database.sqlite.SQLiteOpenHelper 抽象类,我们要实现其中两个方法:onCreate (),onUpdate。具体代码如下:
第三步:修改 main.xml 布局如下,由两个 EditText 和一个 ListView 组成,代码如下:
第四步:修改 SQLiteDatabaseDemo.java 代码如下:
第五步:运行程序效果如下:
第六步:查看我们所建的数据库。有两种方法:第一种用命令查看:adb shell ls data/data/com.android.tutor/databases。
另一种方法是用 DDMS 查看,在 data/data 下面对应的应用程序的包名 下会有如下数据库,如图所示:
android intent隐式调用之一个应用程序启动另一个应用程序
理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。另外Intent除了发送外,还可用于广播.
显示调用 1.Intent intent = new Intent(); intent.setClass(A.this,B.class); //intent.setClassName("com.view","com.view.B");前者是A的包名,后者是B的代包类名
startActivity(Intent);
隐式调用:private static String MY_ACTION = "com.view.my_action";
Intent intent = new Intent(); intent.setAction(MY_ACTION);
或者// Intent intent = new Intent(MY_ACTION);
startActivity(Intent);
隐式调用注意不只是在AndroidManifest.xml文件中声明,还要加上intent-filter
在B类的activity中加上:
<intent-filter>
<action android:name="com.view.my_action"/> <!-- 自定义 -->
</intent-filter>
加上这句话就可以跳转到B类了
如果是想启动另外一个应用程序,如B类是在另外一个应用程序的入口,在其activity中再另外加上一个intent-filter
<activity android:name=".B" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="com.view.my_action"/>
<action android:name="android.intent.action.DEFAULT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Android SQLite Database
Create
public void insertAnimal(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("animalName", queryValues.get("animalName"));
database.insert("animals", null, values);
database.close();
}
Read
public HashMap<String, String> getAnimalInfo(String id) {
HashMap<String, String> wordList = new HashMap<String, String>();
SQLiteDatabase database = this.getReadableDatabase();
String selectQuery = "SELECT * FROM animals where animalId=''"+id+"''";
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
wordList.put("animalName", cursor.getString(1));
} while (cursor.moveToNext());
}
return wordList;
}
Update
public int updateAnimal(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("animalName", queryValues.get("animalName"));
return database.update("animals", values, "animalId" + " = ?", new String[] { queryValues.get("animalId") });
}
Delete
public void deleteAnimal(String id) {
Log.d(LOGCAT,"delete");
SQLiteDatabase database = this.getWritableDatabase();
String deleteQuery = "DELETE FROM animals where animalId=''"+ id +"''";
Log.d("query",deleteQuery);
database.execSQL(deleteQuery);
}
DBController.java
Complete code is as follows,
import java.util.ArrayList;
import java.util.HashMap;
import android.util.Log;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBController extends SQLiteOpenHelper {
private static final String LOGCAT = null;
public DBController(Context applicationcontext) {
super(applicationcontext, "androidsqlite.db", null, 1);
Log.d(LOGCAT,"Created");
}
@Override
public void onCreate(SQLiteDatabase database) {
String query;
query = "CREATE TABLE animals ( animalId INTEGER PRIMARY KEY, animalName TEXT)";
database.execSQL(query);
Log.d(LOGCAT,"animals Created");
}
@Override
public void onUpgrade(SQLiteDatabase database, int version_old, int current_version) {
String query;
query = "DROP TABLE IF EXISTS animals";
database.execSQL(query);
onCreate(database);
}
public void insertAnimal(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("animalName", queryValues.get("animalName"));
database.insert("animals", null, values);
database.close();
}
public int updateAnimal(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("animalName", queryValues.get("animalName"));
return database.update("animals", values, "animalId" + " = ?", new String[] { queryValues.get("animalId") });
}
public void deleteAnimal(String id) {
Log.d(LOGCAT,"delete");
SQLiteDatabase database = this.getWritableDatabase();
String deleteQuery = "DELETE FROM animals where animalId=''"+ id +"''";
Log.d("query",deleteQuery);
database.execSQL(deleteQuery);
}
public ArrayList<HashMap<String, String>> getAllAnimals() {
ArrayList<HashMap<String, String>> wordList;
wordList = new ArrayList<HashMap<String, String>>();
String selectQuery = "SELECT * FROM animals";
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
map.put("animalId", cursor.getString(0));
map.put("animalName", cursor.getString(1));
wordList.add(map);
} while (cursor.moveToNext());
}
return wordList;
}
public HashMap<String, String> getAnimalInfo(String id) {
HashMap<String, String> wordList = new HashMap<String, String>();
SQLiteDatabase database = this.getReadableDatabase();
String selectQuery = "SELECT * FROM animals where animalId=''"+id+"''";
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
wordList.put("animalName", cursor.getString(1));
} while (cursor.moveToNext());
}
return wordList;
}
}
布局自己看着弄吧!
android SQLiteDatabase
SQLiteDatabase
[功能]
SQLiteDatabase 是关于数据库操作的 可用于 insert delete update query 等操作可惜美中不足的是:
1. 其不支持创建数据库
2. 其不支持版本更新 或者说其不知道如何做 因为具体数据的差异
鉴于以上的缺陷 有一个辅助类可以完成上面功能 那就是:SQLiteOpenHelper
[代码]
1. 定义 SQLiteOpenHelper 并完成 创建 更新 功能
- publicclassDBHelper extendsSQLiteOpenHelper {
- publicstaticfinalString TB_NAME = "mycountry";
- publicstaticfinalString ID = "_id";
- publicstaticfinalString COUNTRY = "country";
- publicstaticfinalString CODE = "code";
- publicDBHelper(Context context, String name,
- CursorFactory factory,intversion) {
- super(context, name, factory, version);
- }
- publicvoidonCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE IF NOT EXISTS "
- + TB_NAME + " ("
- + ID + " INTEGER PRIMARY KEY,"
- + COUNTRY + " VARCHAR,"
- + CODE + " INTEGER)");
- }
- publicvoidonUpgrade(SQLiteDatabase db,
- intoldVersion, intnewVersion) {
- //TODO 删除数据库之前 做数据备份
- db.execSQL("DROP TABLE IF EXISTS "+TB_NAME);
- onCreate(db);
- }
- }
2. 从 SQLiteOpenHelper 得到 SQLiteDatabase 的实例
- DBHelper helper = newDBHelper(this, DB_NAME, null, VERSION);
- SQLiteDatabase db = helper.getWritableDatabase();
3. SQLiteDatabase 的一些操作:
* 插入数据:
- ContentValues values = newContentValues();
- values.put(DBHelper.COUNTRY, "中国");
- values.put(DBHelper.CODE, 86);
- db.insert(DBHelper.TB_NAME,DBHelper.ID, values);
* 改动数据
- db.insert(DBHelper.TB_NAME,DBHelper.ID,null);
- values.clear();
- values.put(DBHelper.COUNTRY, "意大利");
- values.put(DBHelper.CODE, 39);
- db.update(DBHelper.TB_NAME, values,DBHelper.ID + " = 2",null);
* execSQL 执行 SQL 语言
- db.execSQL("INSERT INTO "
- + DBHelper.TB_NAME + "("
- + DBHelper.COUNTRY + ","
- + DBHelper.CODE + ") VALUES "
- + "('' 洪都拉斯 '',504)");
* 查询数据
- Cursor c = db.query(DBHelper.TB_NAME,null,null,null,null,null,
- DBHelper.CODE+" DESC");
* 删除数据所有数据
- db.delete(DBHelper.TB_NAME,null,null);
数据库的生成 调用 getWiterAbleDatabase getReadAbleDatabase 生成数据库 i
android 嵌入式数据库 为单用户数据库 所以 可以不调用 db.close () 来关闭数据库这样反而可以提高性能
关于使用root-access在Android上打开另一个应用程序的sqlite-database的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于-Android 数据库 SQLiteDatabase 的使用、android intent隐式调用之一个应用程序启动另一个应用程序、Android SQLite Database、android SQLiteDatabase等相关内容,可以在本站寻找。
本文标签: