SQlite数据库简介&介绍以及使用API调用

打开虚拟机的数据库

1.xml文件

   <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="OnCreat"
        android:text="@string/creat" />
    <Button
        android:id="@+id/btn_insert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="@string/insertdata" />
    <Button
        android:id="@+id/btn_updata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="@string/updata" />
    <Button
        android:id="@+id/btn_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="@string/delete" />
    <Button
        android:id="@+id/btn_insertApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:text="@string/apiinsert" />
    <Button
        android:id="@+id/btn_updataApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="Api修改数据" />
    <Button
        android:id="@+id/btn_deleteApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="Api删除数据" />
</LinearLayout>

2,主Activity

public class MainActivity extends AppCompatActivity {

    private MySqliteHelper helper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper = DbManager.getIntance(this); //获取了数据库帮助类的对象
    }
    //点击创建按钮,创建数据库
    public void OnCreat(View view){
        /**
         * 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.TABLENAME+" values(1,'zhangshan',20)";
                //双引号里面不能再用双引号,要用单引号
                DbManager.execSQL(db,sql);

                String sql2 = "insert into "+ Constant.TABLENAME+" values(2,'lisi',20)";
                DbManager.execSQL(db,sql2);
                db.close(); //防止数据库使用资源的占用
                break;
            case R.id.btn_updata:
                db = helper.getWritableDatabase();
                String sql3 = "updata person set name = 'xiaoming' where _id=1";
                DbManager.execSQL(db,sql3);
                db.close();
                break;
            case R.id.btn_delete:
                db = helper.getWritableDatabase();
                String deletedatabase = "delete from person where _id=1";
                DbManager.execSQL(db,deletedatabase);
                db.close();
                break;
        }

    }
    public void onClick(View view){
        switch (view.getId()){
            case R.id.btn_insertApi:
                SQLiteDatabase db = helper.getWritableDatabase();
                /**
                 * table 插入数据库的名称
                 * String nullColumnHack SQLite规定不能插入全是空的一条数据
                 * ContentValues values 键为String类型的hashmap集合
                 * 返回值long 表示插入数据的列数
                 */
                ContentValues values =new ContentValues();
                values.put(Constant._ID,3);
                values.put(Constant.NAME,"xiaoming");
                values.put(Constant.AGE,12);
                long result =db.insert(Constant.TABLENAME,null,values);
                if (result>0){
                    Toast.makeText(MainActivity.this,"插入数据成功",Toast.LENGTH_SHORT);
                }else {
                    Toast.makeText(MainActivity.this,"插入数据失败",Toast.LENGTH_SHORT);
                }
                db.close();
                break;
            case R.id.btn_updataApi:
                db=helper.getWritableDatabase();
                /**
                 * ContentValues values 键为String类型的hashmap集合
                 * String whereClause  修改的条件
                 * String[] whereArgs  修改条件的占位符
                 */
                ContentValues cv = new ContentValues();
                cv.put(Constant.NAME,"sl");//put(需要修改的字段名称,修改后的字段值)
                int count = db.update(Constant.TABLENAME, cv,"_id=3",null);
//                int count = db.update(Constant.TABLENAME, cv,"_id=?",new String[]{"3"});  与上面的效果完全一样
                if (count>0){
                    Toast.makeText(MainActivity.this,"修改数据成功",Toast.LENGTH_SHORT);
                }else {
                    Toast.makeText(MainActivity.this,"修改数据失败",Toast.LENGTH_SHORT);
                }
                db.close();
                break;
            case R.id.btn_deleteApi:
                db = helper.getWritableDatabase();
                /**
                 * String table, String whereClause, String[] whereArgs
                 */
                int  deleteresult=db.delete(Constant.TABLENAME,"_id=3",null);
                if (deleteresult>0){
                    Toast.makeText(MainActivity.this,"删除数据成功",Toast.LENGTH_SHORT);
                }else {
                    Toast.makeText(MainActivity.this,"删除数据失败",Toast.LENGTH_SHORT);
                }
                db.close();
        }

    }
3,实例化一些常数

public class Constant {
    public static final String DATABASENAME="info.db"; //数据库名称
    public static final int DATABASE_VERSION = 1; //数据库版本号
    public static final String TABLENAME = "person";  //表名
    public static final String NAME = "name";
    public static final String AGE = "age";
    public static final String _ID = "_id";

}
4,对数据库操作的常用类

/**
 * 对数据库操作的工具类
 * Created by sky on 2017/1/5.
 */
public class DbManager {
    private static MySqliteHelper helper; //构建一个帮助类的对象
    //相应类的获取方式
    //开发模式中的单例模式
    public static MySqliteHelper getIntance(Context context) {
        if (helper == null){
            helper =new MySqliteHelper(context);
        }
        return helper;
    }

    /**
     * 根据SQL语句在数据库中执行语句
     * 可以执行除查询外的所有语句
     * @param db 数据库对象
     * @param sql SQL语句
     */
    public static void execSQL(SQLiteDatabase db,String sql){
        if (db !=null){
            if (sql!=null && !"".equals(sql)){
                db.execSQL(sql);

            }
        }

    }
}
5,打开或创建数据库的类

/**
 * Created by sky on 2017/1/5.
 * sqliteopenhelper
 * 1。提供了OnceatOnupgrade()等创建数据库更新数据库的方法
 * 2.提供了获取数据库对象的函数
 */
public class MySqliteHelper extends SQLiteOpenHelper {

    /**
     * 构造函数
     * @param context
     * @param name 表示创建数据库的名称
     * @param factory 游标工厂
     * @param 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.DATABASENAME,null,Constant.DATABASE_VERSION);
    }
    /**
     *
     * 当数据库创建时回d调的函数
     * @param db 数据库对象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {

        /**
         * 创建表的语句
         */
        //String sql = "creat table person(_id Integer primary key ,name varchar(10),age Integer)";
        String sql = "creat table"+Constant.TABLENAME+"("+Constant._ID+"Integer primary key,"
                +Constant.NAME+"varchar(10),"+Constant.AGE
                +" Integer)";

        /**
         * 执行SQ语句
         */
        db.execSQL(sql);
        Log.i("tag","<<<<<<<<OnCreat>>>>>>>");
    }

    /**
     * 当数据库有版本更新时回调的函数
     * @param db
     * @param oldVersion  数据库旧版本
     * @param newVersion  数据库新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    /**
     * 当数据库打开时回调的函数
     * @param db
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        Log.i("tag","<<<<<<<<OnOpen>>>>>>>");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章