1、Sqlite数据库创建
1.1 SQLiteOpenHelper —-> 帮助类 * onCreate() —-> 创建方法 * onUpgrade() —-> 数据库升级方法 * onOpen() —-> 打开数据库方法 1.2
data 文件夹打不来
给sdcard加权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
给数据库问价配置 读写权限
两个exit是应为 多了一次进入root权限
H:\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo>adb shell
generic_x86:/ $ su
generic_x86:/
# chmod 777 /data/data/com.imooc.sqlitedemo/databases/info.db
generic_x86:/
# exit
generic_x86:/ $ exit
到数据库文件下把数据库文件考到 sdcard上
H:\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo>adb shell
generic_x86:/ $ su
generic_x86:/
# cd data
generic_x86:/data
# cd data
generic_x86:/data/data
# cd com.imooc.sqlitedemo/databases/
generic_x86:/data/data/
com.imooc.sqlitedemo/databases
# cat info.db > /sdcard/info.db
generic_x86:/data/data/
com.imooc.sqlitedemo/databases
# exit
generic_x86:/ $ exit
把数据库文件info.db 导入到 默认问价夹下
即(H:
\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo)
H:
\workplace\AndroidStudio\AndroidStudioProjects\SqliteDemo>adb pull /sdcard/info.db
/sdcard/info.db: 1 file pulled. 2.6 MB/s (16384 bytes in 0.006s)
错误:Duplicate label 标签重复
MainActivity.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.imooc.sqlitedemo.MainActivity"
android:orientation="vertical"
>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建数据库"
android:onClick="createDb"
android:background="#ffbbff"/>
<Button
android:id="@+id/btn_insert"
android:layout_height="wrap_content"
android:text="插入数据"
android:onClick="click"
android:background="#ffbbff"
android:layout_marginTop="15dp"
android:layout_width="wrap_content" />
<Button
android:id="@+id/btn_update"
android:layout_height="wrap_content"
android:text="修改数据"
android:onClick="click"
android:background="#ffbbff"
android:layout_marginTop="15dp"
android:layout_width="wrap_content" />
<Button
android:id="@+id/btn_delet"
android:layout_height="wrap_content"
android:text="删除数据"
android:onClick="click"
android:background="#ffbbff"
android:layout_marginTop="15dp"
android:layout_width="wrap_content" />
<Button
android:id="@+id/btn_insertAPI"
android:layout_height="wrap_content"
android:text="插入数据API"
android:onClick="onClick"
android:background="#ffbbff"
android:layout_marginTop="15dp"
android:layout_width="wrap_content" />
<Button
android:id="@+id/btn_updateAPI"
android:layout_height="wrap_content"
android:text="修改数据PI"
android:onClick="onClick"
android:background="#ffbbff"
android:layout_marginTop="15dp"
android:layout_width="wrap_content" />
<Button
android:id="@+id/btn_deletAPI"
android:layout_height="wrap_content"
android:text="删除数据API"
android:onClick="onClick"
android:background="#ffbbff"
android:layout_marginTop="15dp"
android:layout_width="wrap_content" />
</LinearLayout>
MainActivity.java
package com.imooc.sqlitedemo;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.imooc.utils.Constant;
import com.imooc.utils.DbManger;
import com.imooc.utils.MySqliteHelper;
import com.imooc.sqlitedemo.R;
public class MainActivity extends AppCompatActivity {
private MySqliteHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper = DbManger.getIntance(
this);
}
public void createDb(View view){
SQLiteDatabase db = helper.getWritableDatabase();
}
public void click(View view){
switch (view.getId()){
case R.id.btn_insert:
SQLiteDatabase db = helper.getWritableDatabase();
String sql =
"insert into "+ Constant.TABLE_NAME+
" values(1,'zhangsan',20)";
DbManger.execSQL(db,sql);
String sql1 =
"insert into "+ Constant.TABLE_NAME+
" values(2,'lisi',20)";
DbManger.execSQL(db,sql1);
db.close();
break;
case R.id.btn_update:
db = helper.getWritableDatabase();
String sql2 =
"update "+ Constant.TABLE_NAME+
" set "+Constant.NANE
+
"='xioaming' where "+Constant._ID+
"=1";
DbManger.execSQL(db,sql2);
db.close();
break;
case R.id.btn_delet:
db = helper.getWritableDatabase();
String sql3 =
"delete from "+Constant.TABLE_NAME+
" where "+Constant._ID+
" = 2";
DbManger.execSQL(db,sql3);
db.close();
break;
}
}
public void onClick(View view){
switch (view.getId()){
case R.id.btn_insertAPI:
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values =
new ContentValues();
values.put(Constant._ID,
110);
values.put(Constant.NANE,
"xaiosan");
values.put(Constant.AGE,
16);
long result = db.insert(Constant.TABLE_NAME,
null, values);
if(result !=
0){
Toast.makeText(
this,
"插入成功",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(
this,
"插入失败",Toast.LENGTH_SHORT).show();
}
db.close();
break;
case R.id.btn_updateAPI:
db = helper.getWritableDatabase();
ContentValues cv =
new ContentValues();
cv.put(Constant.NANE,
"小慕");
int count = db.update(Constant.TABLE_NAME,cv,Constant._ID+
"=?",
new String[]{
"110"});
if(count >
0){
Toast.makeText(MainActivity.
this,
"修改成功",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.
this,
"修改失败",Toast.LENGTH_SHORT).show();
}
db.close();
break;
case R.id.btn_deletAPI :
db = helper.getWritableDatabase();
int count2 = db.delete(Constant.TABLE_NAME,Constant._ID+
"=?",
new String[]{
"1"});
if(count2 >
0){
Toast.makeText(MainActivity.
this,
"删除成功",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.
this,
"删除失败",Toast.LENGTH_SHORT).show();
}
db.close();
break;
}
}
}
Constant.java
package com.imooc.utils;
/**
* Created by JC on 2017/8/30.
* 数据库常量
*/
public class Constant {
public static final String DATABASE_NAME=
"info.db";
public static final int DATABASE_VERSION=
1;
public static final String TABLE_NAME=
"person";
public static final String NANE =
"name";
public static final String _ID =
"_id";
public static final String AGE =
"age";
}
DbManger.java
package com.imooc.utils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
/**
* Created by JC on 2017/8/30.
* 数据库:数据持久化得存储,
* Activity:数据页面的展示,
* 专门业务逻辑处理的类,
*
* 主要是对数据库操作的工具类。
*/
public class DbManger {
private static MySqliteHelper helper;
public static MySqliteHelper
getIntance(Context context){
if(helper ==
null){
helper =
new MySqliteHelper(context);
}
return helper;
}
public static void execSQL(SQLiteDatabase db,String sql){
if( db !=
null){
if(sql !=
null && !
"".equals(sql)){
db.execSQL(sql);
}
}
}
}
MySqliteHelper.java
package com.imooc.utils;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
/**
* Created by JC on 2017/8/30.
*
* SQLiteOpenHelper
* 作用:
* 1.提供onCreate() onUpgrade()等创建数据库更新数据的方法
* 2.提供了获取数据库对象的函数
*/
public class MySqliteHelper extends SQLiteOpenHelper{
/**
*构造函数
* @param context 上下文对象
* @param name 表示创建数据库的名称
* @param factory 游标工厂
* @param version 表示当前创建数据库的版本 要求:version >= 1
*/
public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public MySqliteHelper(Context context){
super(context,Constant.DATABASE_NAME,
null,Constant.DATABASE_VERSION);
}
/**
*当数据库创建时回调的函数
*@param db 数据库对象
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i(
"tag",
"------ onCreate------");
String sql =
"create table "+Constant.TABLE_NAME+
"("+Constant._ID+
" Integer primary key,"+Constant.NANE+
" varchar(10),"+Constant.AGE+
" Integer)";
db.execSQL(sql);
}
/**
*当数据库版本更新时回调的函数
* @param db 数据库对象
* @param i 数据库旧版本
* @param i1 数据库新版本
*/
@Override
public void onUpgrade(SQLiteDatabase db,
int i,
int i1) {
Log.i(
"tag",
"------ onUpgrade------");
}
/**
* 当数据库打开时回调的函数
* @param db 数据库对象
*/
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
Log.i(
"tag",
"------ onOpen------");
}
}