SQLite数据库是android系统集成的轻量级数据库,适合移动设备
数据的操作和管理
app的数据库的路径为 data/data/com.android.contacts(应用包名)/databases/
1、通过命令行查看和管理SQLite
注:若adb shell命令无法执行,请检查android sdk环境变量是否配置成功
接下来就可以在命令行执行相应的SQL语句
注:sqlite3 可以在android sdk文件夹/platform-tools文件夹下找到
2、可视化管理工具管理数据库
通过Android Studio里集成的Android Device Monitor管理
进入Android Device Monitor后选择File Expoler
进入data/datacom.android.contacts(要操作的数据库应用包名)/databases/
选择相应的数据库文件然后导出
使用SqliteBrowser打开数据库进行增、删、改、查
最后导入数据库,完成
3、通过代码操作数据库
通过代码操作数据库主要要使用到SQLiteOpenHelper类和SQLiteDatabase类
创建操作数据库
(1)新建一个类继承自SQLiteOpenHelper类,并实现其中的构造方法、onCreate()方法和onUpgrade()方法
public class MySQLiteOpenHelper extends SQLiteOpenHelper { final static String DATABASE_NAME = "user";//数据库名 final static int DATABASE_VERSION = 1;//数据版本 onUpgrade()方法中会用到 public MySQLiteOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } /** * 在数据库中创建表,onCreate()只会在创建时执行一次 * * @param sqLiteDatabase */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { String createTable = "create table user(" + "id Integer not null autoincrement primary key," + "username varchar(10)," + "password varchar(6)" + ")"; sqLiteDatabase.execSQL(createTable); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
(2)在需要操作数据库的Acitivity中实例化SQLiteDataBase类public class MainActivity extends AppCompatActivity { SQLiteDatabase mSqLiteDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //=============实例化QLiteOpenHelper SQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this); //通过获取sqLiteOpenHelper.getReadableDatabase()获得SQLiteDatabase实例时,如果 //数据库存在就执行连接访问数据库,若数据库不存在则创建相应的数据库,然后访问连接 mSqLiteDatabase = sqLiteOpenHelper.getReadableDatabase(); //SQLiteDatabase sqLiteDatabase = sqLiteOpenHelper.getWritableDatabase(); // sqLiteOpenHelper.getReadableDatabase()和sqLiteOpenHelper.getWritableDatabase()的区别 //getReadableDatabase当内存空间不足时,属性为只读,不能写入数据导致程序崩溃, // 而getWritableDatabase可以继续写入,可能导致程序崩溃 //因此选择getReadableDatabase() //通过sqLiteDatabase实例就可以对数据库进行相关操作 } }
(3)通过SQLiteDatabase实例执行SQL语句 操作数据库
在android中操作数据库可以通过两种方式:①SQL语句②android封装好的方法①SQL语句
private void insertData() { String name = mUser.getText().toString();//mUser是一个EditText控件,这是获取mUser的内容 String password = mPassword.getText().toString();//同上 String insertSql = "insert into user(name,password) values(\"" + name + "\",\"" + password + "\")"; // Log.v("SQL语句", insertSql); mSqLiteDatabase.execSQL(insertSql);//mSqLiteDatabase为上面获取的SQLite实例 Toast.makeText(DataBaseManageActivity.this, "添加数据成功", Toast.LENGTH_LONG).show(); } private void deleteData() { String deleteSql = "delete from user where name=\"" + mUser.getText() + "\""; mSqLiteDatabase.execSQL(deleteSql); Toast.makeText(DataBaseManageActivity.this, "删除数据成功", Toast.LENGTH_LONG).show(); }
②android封装好的方法
/** * 安卓代码数据库添加操作 */ private void androidInsertData() { //要添加的数据 ContentValues contentValues = new ContentValues(); contentValues.put("name", mUser.getText().toString()); contentValues.put("password", mPassword.getText().toString()); mSqLiteDatabase.insert("user", null, contentValues); } /** * 安卓代码数据库删除操作 */ private void androidDeleteData() { //参数:表名,删除条件,删除的值 mSqLiteDatabase.delete("user", "name=?", new String[]{mUser.getText().toString()}); } private void androidUpdateData() { ContentValues contentValues = new ContentValues(); contentValues.put("name", mUser.getText().toString()); contentValues.put("password", mPassword.getText().toString()); //参数:String 表名,Content 修改的值,String 需要修改的记录,String[] 需要修改的记录的值 mSqLiteDatabase.update("user", contentValues, "name=?", new String[]{"zhangsan"}); Toast.makeText(DataBaseManageActivity.this, "修改数据成功", Toast.LENGTH_LONG).show(); }
数据库版本更新
修改版本号
在onUpgrade()方法中添加要更新的代码,如:final static int DATABASE_VERSION = 2;//修改版本号,新版本号要大于老版本号,版本号降级会报错无法运行
@Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { //i为oldVerrsion 老版本号 i1为newVerrsion 新版本号 //当版本号发生改变 newVerrsion>oldVerrsion时会执行onUpgrade()方法 switch (i) { case 1: case 2: } }