Android基础-初识SQLite第2章SQLite数据库的操作 2-1数据库的创建

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 文件

<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>

Android基础-初识SQLite第2章SQLite数据库的操作 2-1数据库的创建_第1张图片

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){
        /*
        *来自MySqliteHelper的父类(即SQLiteOpenHelper)
         *  getReadableDatabase()  getWritableDatabase()  创建或打开数据库。
        *如果数据库不存在则创建数据库 如果数据库存在直接打开数据库
        * 默认情况下这两个函数都表示打开或者创建可读可写的数据库对象
        *
        * 如果磁盘已满或者是数据库本身权限等情况下 getReadableDatabase() 打开的是只读数据库
        * */
        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();
                /*
                 *查看API代码的快捷键 ctrl+Q
                 *insert(String table, String nullColumnHack, ContentValues values)
                 *String table 表示插入数据表的名称
                 * String nullColumnHack   参数:null 表示插入空行
                 * ContentValues values 键为String类型的hashmap集合
                 * 返回值 log 表示插入数据的列数
                 */
                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();
                /*
                *
                * update(String table, ContentValues values, String whereClause, String[] whereArgs);
                * String table 表示修改的数据表的名称
                * ContentValues values 表示键为String类型的hasmap
                * String whereClause 表示修改条件
                * String[] whereArgs 表示修改条件的占位符
                * 返回值 int 表示修改的条数
                * */
                ContentValues cv = new ContentValues();
                cv.put(Constant.NANE,"小慕");//put(需要修改的字段名称,修改后的字段值)

                //int count = db.update(Constant.TABLE_NAME,cv,"Constant._ID+"=?",null);
                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 delete(String table, String whereClause, String[] whereArgs)
                * String table 表示删除数据表的名称
                * String whereClause 表示删除的条件
                * String[] whereArgs 表示删除条件的占位符
                * */
                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){ //获得 helper对象
        if(helper == null){
            helper = new MySqliteHelper(context);
        }
        return helper;//else
    }
    /*
    根据sql语句在数据库中执行语句
    * @param db 数据库对象
    * @param sql sql语句
    */
    public static void execSQL(SQLiteDatabase db,String sql){
        if( db != null){
            if(sql != null && !"".equals(sql)){  //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是参数的解释
    /**
     *当数据库创建时回调的函数
     *@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);//执行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------");
    }
}

你可能感兴趣的:(Android数据库)