码迷,mamicode.com
首页 > 数据库 > 详细

SQLite增、删、改操作

时间:2017-03-25 15:25:48      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:教程   cto   open   img   hid   util   ted   tac   磁盘   

注:慕课网详细教程:http://www.imooc.com/learn/748

 

一、准备工作:http://www.cnblogs.com/bky1225987336/p/6612011.html

 

二、工程结构

技术分享

 

三、实现代码

1.创建存放数据库字段的常量类

技术分享
package com.example.sqlitedemo.utils;

/**
 * Created by 袁磊 on 2017/3/24.
 */
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 _ID = "_id";
    public static final String NAME = "name";
    public static final String AGE = "age";
}
Constant

 

2.自定义数据库辅助类

技术分享
package com.example.sqlitedemo.utils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * 1.提供了onCreate() onUpgrade()等创建数据库更新数据库的方法
 * 2.提供了获取数据库对象的函数
 * Created by 袁磊 on 2017/3/24.
 */
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.DATABASE_NAME, null, Constant.DATABASE_VERSION);
    }

    /**
     * 当数据库创建时回调的函数
     *
     * @param db 数据库对象
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("TAG", "----------onCreate-----------");
        //创建表
        String sql = "create table " + Constant.TABLE_NAME + "(" + Constant._ID +
                " Integer primary key," + Constant.NAME + " varchar(10),"
                + Constant.AGE + " Integer)";
        db.execSQL(sql);//执行sql语句
    }

    /**
     * 当数据库版本更新时回调的函数
     *
     * @param db         数据库对象
     * @param oldVersion 数据库旧版本
     * @param newVersion 数据库新版本
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d("TAG", "----------onUpgrade-----------");
    }

    /**
     * 当数据库打开时回调的函数
     *
     * @param db 数据库对象
     */
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        Log.d("TAG", "----------onOpen-----------");
    }
}
MySQLiteHelper

 

3.操作数据库,执行SQL语句的工具类

技术分享
package com.example.sqlitedemo.utils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

/**
 * 主要是对数据库操作的工具类
 * Created by 袁磊 on 2017/3/24.
 */
public class DBManager {
    /**
     * 采用单例模式
     */
    private static MySQLiteHelper helper;

    public static MySQLiteHelper getInstance(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);
            }
        }
    }
}
DBManager

 

4.界面操作,SQL语句代码

技术分享
package com.example.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.example.sqlitedemo.utils.Constant;
import com.example.sqlitedemo.utils.DBManager;
import com.example.sqlitedemo.utils.MySQLiteHelper;

public class MainActivity extends AppCompatActivity {

    private Button btnCreate;
    private Button btnInsert;
    private Button btnUpdate;
    private Button btnDelete;
    private Button btnInsertApi;
    private Button btnUpdateApi;
    private Button btnDeleteApi;


    private MySQLiteHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initListener();
        initData();
    }

    private void initView() {
        btnCreate = (Button) findViewById(R.id.btn_create);
        btnInsert = (Button) findViewById(R.id.btn_insert);
        btnUpdate = (Button) findViewById(R.id.btn_update);
        btnDelete = (Button) findViewById(R.id.btn_delete);
        btnInsertApi = (Button) findViewById(R.id.btn_insertApi);
        btnUpdateApi = (Button) findViewById(R.id.btn_updateApi);
        btnDeleteApi = (Button) findViewById(R.id.btn_deleteApi);
    }

    private void initListener() {
        // 点击按钮创建数据库
        btnCreate.setOnClickListener(myOnClickListener);
        btnInsert.setOnClickListener(myOnClickListener);
        btnUpdate.setOnClickListener(myOnClickListener);
        btnDelete.setOnClickListener(myOnClickListener);
        btnInsertApi.setOnClickListener(myOnClickListener);
        btnUpdateApi.setOnClickListener(myOnClickListener);
        btnDeleteApi.setOnClickListener(myOnClickListener);
    }


    private void initData() {
        helper = DBManager.getInstance(this);
    }


    private View.OnClickListener myOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            /**
             * getReadableDatabase(),getWritableDatabase()创建或者打开数据库
             * 如果数据库不存在则创建数据库,如果数据库存在则打开数据库
             * 默认情况下两个函数都表示打开或者创建可读可写的数据库对象,
             * 如果磁盘已满或者是数据库本身权限等的情况下
             * getReadableDatabase()打开的是只读数据库
             */
            SQLiteDatabase db = helper.getWritableDatabase();
            switch (v.getId()) {
                case R.id.btn_create:
                    break;
                case R.id.btn_insert:
                    String sql = "insert into " + Constant.TABLE_NAME + " values(1,‘zhangsan‘,20)";
                    DBManager.execSQL(db, sql);
                    String sql2 = "insert into " + Constant.TABLE_NAME + " values(2,‘lisi‘,23)";
                    DBManager.execSQL(db, sql2);
                    break;
                case R.id.btn_update:
                    String updateSql = "update " + Constant.TABLE_NAME + " set " +
                            Constant.NAME + "=‘xiaoming‘ where " + Constant._ID + "=1";
                    DBManager.execSQL(db, updateSql);
                    break;
                case R.id.btn_delete:
                    String delSql = "delete from " + Constant.TABLE_NAME
                            + " where " + Constant._ID + "=2";
                    DBManager.execSQL(db, delSql);
                    break;
                case R.id.btn_insertApi:
                    /**
                     * insert(String table, String nullColumnHack, ContentValues values)
                     * String table 表示插入数据表的名称
                     * String nullColumnHack
                     * ContentValues values 键为String类型的hashMap集合
                     * 返回值 long 表示插入数据的列数
                     */
                    ContentValues values = new ContentValues();
                    values.put(Constant._ID, 3);//put(插入数据库的字段名称,插入该字段的具体值)
                    values.put(Constant.NAME, "张三");
                    values.put(Constant.AGE, 30);
                    long result = db.insert(Constant.TABLE_NAME, null, values);
                    if (result >= 0) {
                        Toast.makeText(MainActivity.this, "插入数据成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "插入数据失败", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.btn_updateApi:
                    /**
                     * update(String table, ContentValues values, String whereClause, String[] whereArgs)
                     * String table 表示修改的数据表的名称
                     * ContentValues values 表示键为String类型的HashMap
                     * String whereClause 表示修改条件
                     * String[] whereArgs 表示修改条件的占位符
                     * 返回值 int 表示修改的条数
                     */
                    ContentValues cv = new ContentValues();
                    cv.put(Constant.NAME, "小红"); //put(需要修改的字段名称,修改后的字段值)
                    //int count = db.update(Constant.TABLE_NAME, cv, Constant._ID + "=3", null);
                    int count = db.update(Constant.TABLE_NAME, cv, Constant._ID + "=?", new String[]{"3"});
                    if (count > 0) {
                        Toast.makeText(MainActivity.this, "修改数据成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "修改数据失败", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.btn_deleteApi:
                    /**
                     * delete(String table, String whereClause, String[] whereArgs)
                     * String table 表示删除数据表的名称
                     * String whereClause 表示删除的条件
                     * String[] whereArgs 表示删除条件的占位符
                     */
                    int counts2 = db.delete(Constant.TABLE_NAME, Constant._ID + "=?", new String[]{"1"});
                    if (counts2 > 0) {
                        Toast.makeText(MainActivity.this, "删除数据成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(MainActivity.this, "删除数据失败", Toast.LENGTH_SHORT).show();
                    }
                    break;
            }
            db.close();//防止资源占用
        }
    };
}
MainActivity

    界面布局

技术分享
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <Button
        android:id="@+id/btn_create"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="创建数据库" />

    <Button
        android:id="@+id/btn_insert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="插入数据" />

    <Button
        android:id="@+id/btn_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改数据" />

    <Button
        android:id="@+id/btn_delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除数据" />

    <Button
        android:id="@+id/btn_insertApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="API插入数据" />

    <Button
        android:id="@+id/btn_updateApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="API修改数据" />

    <Button
        android:id="@+id/btn_deleteApi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="API删除数据" />


</LinearLayout>
activity_main

 

 

四、操作界面

技术分享

 

首次安装apk后,查看RE文件管理器

技术分享

 

五、点击相应按钮后数据库变化

1.创建数据库

技术分享

 

2.插入数据

技术分享

 

3.修改数据

技术分享

 

4.删除数据

技术分享

 

5.API插入数据

技术分享

 

6.API修改数据

技术分享

 

7.API删除数据

技术分享

 

SQLite增、删、改操作

标签:教程   cto   open   img   hid   util   ted   tac   磁盘   

原文地址:http://www.cnblogs.com/bky1225987336/p/6617150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!