Android Sqlite数据库常用操作

来源:互联网 发布:淘宝网点结算没反应 编辑:程序博客网 时间:2024/05/16 07:23
很久前也写过一篇Android数据库操作相关内容。在正式项目中,我们通常会使用数据库开源框架如GreenDao来对数据库进行操作。感觉很久没有直接使用Sql语句了,这几天有时间,就温习了下相关知识。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统.是开源的,高效率的,可嵌入且程序驱动的数据库。使用起来非常方便,因为其API简单易用,代码量少。1,数据类型有:1).  NULL,值是NULL2).  INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放3).  REAL,值是浮点型值,以8字节IEEE浮点数存放4).  TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放5).  BLOB,只是一个数据块,完全按照输入存放(即没有准换)实际也支持我们觉的Integer,varchar,time,double等类型。在使用数据库时,我们通常要使用到的sql语句有:1,创建表create table 表名(字段名称 数据类型 约束,字段名称 数据类型 约束......)例如创建一个学生表student:create table student(_id Integer primary key,name varchar(10) not null,age Integer,scroe float)2,删除表drop table 表名例如删除刚刚创建的student表:drop table student3,表中添加(插入数据)insert into 表名(字段1,字段2...)values (值1,值2...)或者:insert into 表名 values(值1,值2...值n) 这种方式添加数据要求后面的值与数据表中字段一一对应且不能空缺字段例如给student表中添加一条数据:insert into student (_id,name,age,scroe) values(1,'张三',13,85.6)4,表中删除数据delete from 表名 where 删除的条件比如删除student表中姓名为张三的数据:delete from student where name="张三"5,修改表中的数据update 表名 set 字段=新值 where 修改的条件例如,修改student表中张三的成绩为90update student set score=90 where _id=16,查询表中的数据1,查找全部数据select * from 表名例如查的student表中所有数据:select * from student2,查找指定数据:select 字段名 from 表名 where 查询条件 group by 分组字段 having 筛选条件 order by 排序字段例如查询学生表student中姓名为张三的成绩:select scroe from student where name='张三'

简单例子:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private Button db_create;    private Button table_insert;    private Button table_query;    private Button table_delete;    private Button table_update;    private TextView show_tv;    //判断是否已经创建数据库    private boolean isCreateDb = false;    private DBManager mDbManager;    private MyDBHelper mDbHelper;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mDbManager = DBManager.getInstance(this);        //执行这句代码就可以创建数据库及表信息        mDbHelper = new MyDBHelper(this);        initViews();    }    /**     * @param     * @description 初始化UI及监听事件     * @author ldm     * @time 2016/11/10 9:47     */    private void initViews() {        this.db_create = (Button) findViewById(R.id.db_create);        this.table_insert = (Button) findViewById(R.id.table_insert);        this.table_query = (Button) findViewById(R.id.table_query);        this.table_delete = (Button) findViewById(R.id.table_delete);        this.table_update = (Button) findViewById(R.id.table_update);        this.show_tv = (TextView) findViewById(R.id.show_tv);        this.db_create.setOnClickListener(this);        this.table_insert.setOnClickListener(this);        this.table_query.setOnClickListener(this);        this.table_delete.setOnClickListener(this);        this.table_update.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.db_create://创建数据库(表)                //调用mDbManager.getDBHelper(),                if (mDbHelper == null) {                    mDbHelper = new MyDBHelper(this);                }                isCreateDb = true;                //每次操作后,查询数据库显示结果                queryAndShow();                break;            case R.id.table_insert://表中插入数据                if (!isCreateDb) {                    Toast.makeText(this, "请先点击按钮创建数据库相关信息", Toast.LENGTH_SHORT).show();                    return;                }                //先插入6条数据                String sql0 = "insert into " + MyDBHelper.T_NAME + " values(1,'赵一',14,99)";                String sql4 = "insert into " + MyDBHelper.T_NAME + " values(2,'吴二',15,67.5)";                String sql = "insert into " + MyDBHelper.T_NAME + " values(3,'李四',14,59)";                String sql1 = "insert into " + MyDBHelper.T_NAME + " values(4,'王五',15,80)";                String sql2 = "insert into " + MyDBHelper.T_NAME + " values(5,'陈六',16,77.5)";                String sql3 = "insert into " + MyDBHelper.T_NAME + " values(6,'刘大',15,83.4)";                mDbManager.execSql(mDbHelper.getWritableDatabase(), sql0);                mDbManager.execSql(mDbHelper.getWritableDatabase(), sql4);                mDbManager.execSql(mDbHelper.getWritableDatabase(), sql);                mDbManager.execSql(mDbHelper.getWritableDatabase(), sql1);                mDbManager.execSql(mDbHelper.getWritableDatabase(), sql2);                mDbManager.execSql(mDbHelper.getWritableDatabase(), sql3);                //每次操作后,查询数据库显示结果                queryAndShow();                break;            case R.id.table_query://查询表中数据                if (!isCreateDb) {                    Toast.makeText(this, "请先点击按钮创建数据库相关信息", Toast.LENGTH_SHORT).show();                    return;                }                //每次操作后,查询数据库显示结果                queryAndShow();                break;            case R.id.table_delete://删除表中数据                if (!isCreateDb) {                    Toast.makeText(this, "请先点击按钮创建数据库相关信息", Toast.LENGTH_SHORT).show();                    return;                }                String delSql = "delete from " + MyDBHelper.T_NAME + " where " + MyDBHelper.TABLE_ID + "=3";                mDbManager.execSql(mDbHelper.getWritableDatabase(), delSql);                //每次操作后,查询数据库显示结果                queryAndShow();                break;            case R.id.table_update://修改表中数据                if (!isCreateDb) {                    Toast.makeText(this, "请先点击按钮创建数据库相关信息", Toast.LENGTH_SHORT).show();                    return;                }                String updSql = "update " + MyDBHelper.T_NAME + " set " + MyDBHelper.TABLE_NAME + "='李九'" + " where " + MyDBHelper.TABLE_ID + "=5";                mDbManager.execSql(mDbHelper.getWritableDatabase(), updSql);                //每次操作后,查询数据库显示结果                queryAndShow();                break;        }    }    /**     * @param     * @description 查询数据并显示数据内容     * @author ldm     * @time 2016/11/10 10:18     */    private void queryAndShow() {        String sql = "select * from " + MyDBHelper.T_NAME;        StringBuffer sb = new StringBuffer();        Cursor cursor = mDbHelper.getWritableDatabase().rawQuery(sql, null);        while (cursor.moveToNext()) {            sb.append("_id=").append(cursor.getString(cursor.getColumnIndex(MyDBHelper.TABLE_ID))).append(" ")                    .append("name=").append(cursor.getString(cursor.getColumnIndex(MyDBHelper.TABLE_NAME))).append(" ")                    .append("age=").append(cursor.getInt(cursor.getColumnIndex(MyDBHelper.TABLE_AGE))).append(" ")                    .append("score=").append(cursor.getInt(cursor.getColumnIndex(MyDBHelper.TABLE_SCORE)))                    .append("\n");        }        show_tv.setText("查询结果是:\n" + sb.toString());    }/*--除了用基础的Sql语句操作数据外,还可以直接使用Android提示的数据库操作方法,网上资料很多,就不记录啦---**/}

数据库操作类:SQLiteOpenHelper

public class MyDBHelper extends SQLiteOpenHelper {    private final static String DB_NAME = "test";    private final static int DB_VERSION = 1;    public final static String T_NAME = "student";    public final static String TABLE_ID = "_id";    public final static String TABLE_NAME = "name";    public final static String TABLE_AGE = "age";    public final static String TABLE_SCORE = "score";    public MyDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);    }    //定义参数简单地构造方法    public MyDBHelper(Context context) {        super(context, DB_NAME, null, DB_VERSION);    }    //数据库创建时调用    @Override    public void onCreate(SQLiteDatabase db) {        //如果写有创建表的Sql语句时,就会在创建数据的时候创建对应的表格        String sql = "create table " + T_NAME + "("                + TABLE_ID + " Integer primary key,"                + TABLE_NAME + " varchar(10),"                + TABLE_AGE + " Integer,"                + TABLE_SCORE + " float"                + ")";        //执行创建表格语句        db.execSQL(sql);    }    //数据库版本发生更新时调用    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        //更新数据库    }    //打开数据库时调用    @Override    public void onOpen(SQLiteDatabase db) {        //如果数据库已经存在,则再次运行不执行onCreate()方法,而是执行onOpen()打开数据库        super.onOpen(db);    }}

实际 项目中应该把数据库操作方法统一封装一下:

public class DBManager {    private static DBManager dbManager;    private Context context;    private DBManager(Context context) {        this.context = context;    }    public static DBManager getInstance(Context context) {        if (null == dbManager) {            dbManager = new DBManager(context);        }        return dbManager;    }    /**     * @param     * @description 通过执行sql语句来操作数据库     * @author ldm     * @time 2016/11/10 9:25     */    public void execSql(SQLiteDatabase db, String sql) {        if (null != db && !TextUtils.isEmpty(sql)) {            db.execSQL(sql);        }        db.close();    }}

主界面布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    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"    tools:context="com.ldm.androiddb.MainActivity">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Sqlite数据库操作" />    <Button        android:id="@+id/db_create"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:text="创建数据库"        android:textSize="16sp" />    <Button        android:id="@+id/table_insert"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:text="表中插入数据"        android:textSize="16sp" />    <Button        android:id="@+id/table_query"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:text="查询表中数据"        android:textSize="16sp" />    <Button        android:id="@+id/table_delete"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:text="删除表中数据"        android:textSize="16sp" />    <Button        android:id="@+id/table_update"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:text="修改表中数据"        android:textSize="16sp" />    <TextView        android:id="@+id/show_tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="10dp"        android:textSize="15sp"        android:textColor="@android:color/holo_blue_bright"/></LinearLayout>

添加权限 :

 <!-- 在SDCard中创建与删除文件权限 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 往SDCard写入数据权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

效果贴图:
这里写图片描述

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机四位数密码忘记了怎么办 锡山教育app登陆密码忘了怎么办 新商盟手机订烟登录忘记密码怎么办 在qq上修改支付密码忘记怎么办 微信红包支付密码忘了怎么办 qq钱包绑定了别人的银行卡怎么办 用支付宝充手机话费怎么退款怎么办 我有个qq号丢了怎么办 微信红包密码输错了怎么办 qq钱包支付限额付不了款怎么办 电信手机没开流量被扣流量钱怎么办 运动鞋子买大了一码怎么办 淘宝直播间粉丝福利购优惠券怎么办 微信卡包的券不小心删了怎么办 0pp0手机官网手机总跳屏怎么办 很想买一部手机但是舍不得钱怎么办 自己没钱了还想贷款买手机怎么办 4g手机锁屏密码忘了怎么办 oppo手机锁屏密码忘了怎么办 三星手机锁屏密码忘了怎么办 网上买的手机想退了怎么办 沙棘排湿排毒后皮肤痒怎么办 做了沙棘排毒两次上上痒怎么办? 微信支付打款认证超时怎么办 微信上买东西钱付款了货没发怎么办 掌上道聚城王者轮回分解错了怎么办 鞋子脱胶了怎么办别傻傻用胶水粘 斗鱼主播积分太低无法收礼物怎么办 信誉积分没有了什么也玩不了怎么办 忘记自己电信卡号的密码怎么办 淘宝卖出去东西的钱被冻结了怎么办 手机店铺搞抽奖活动上当了怎么办 网易云音乐上传作品编辑失败怎么办 手机连了wifi后自动扣费怎么办 店铺被低价拍了一部分商品该怎么办 淘宝买家退货快递单号填错了怎么办 卖家同意退款了买家不退货怎么办 淘宝代购衣服有破损不给退怎么办 网上购飞机票身份证号写错了怎么办 交易猫买家把我号清了怎么办 光大普卡额度4万封顶了怎么办