SQline 的存储

1.什么是SQline:

SQline数据存储是Android系统提供的存储方式,是一种轻量级的数据库。内存一般较小,只有几百K的内存。
SQline支持标准的SQL语法,遵循数据库的ACID事务。
SQLine不需要安装,不需要用户密码就可以使用,所以方便快捷,然而安全性较差。

2.SQline的常用数据类型:

text 字符型
real 浮点型
integer 整型

3.如何使用SQline创建数据库和数据表:

首先新建一个类继承SQlineOpenHelper;
实现构造方法;
重写oncreate方法;
重写onupgrade方法;
实例化SQLineOpenHelper的子类对象;
调用getWritableDatabase和getReadableDatabase方法。
class DBhelp extends SQLiteOpenHelper{
        private  String CREATE_TBL="create table student"
                +"(Name text primary key not null)";
        //Context context;上下文环境;
        //String name:数据库名;
        //SQLiteDatabase.CursorFactory factory:允许查询数据时返回自定义的Cursor,一般为null;
        //inr version 当前数据库版本号,用于数据库升级和重建。
        public DBhelp(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
        //重写Oncreate方法;
        @Override
        public void onCreate(SQLiteDatabase db) {
        //创建数据表
           db.execSQL(CREATE_TBL);
        }
        //重写onUpgrade方法;
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
        }
    }

4.数据库的ACID实例:

首先创建数据库和数据表:
class DBhelp extends SQLiteOpenHelper{
        private  String CREATE_TBL="create table student"
                +"(Name text primary key not null)";
        //Context context;上下文环境;
        //String name:数据库名;
        //SQLiteDatabase.CursorFactory factory:允许查询数据时返回自定义的Cursor,一般为null;
        //inr version 当前数据库版本号,用于数据库升级和重建。
        public DBhelp(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
        //重写Oncreate方法;
        @Override
        public void onCreate(SQLiteDatabase db) {
        //创建数据表
           db.execSQL(CREATE_TBL);
        }
        //重写onUpgrade方法;
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
        }
    }

监听增、查、删、改事件:
  public void onClick(View v) {
        switch (v.getId()){
            case R.id.charbrn:
                inset();
                break;
            case R.id.chaxbrn:
                secet();
                break;
            case R.id.shanbrn:
                delete();
                break;
            case R.id.gaibrn:
                xiu();
                break;
        }
    }
1.增加数据的方法:
首先实例化子类的对象,调用getWritableDatabase方法;
创建Contentvalues对象values存放数据。
最后sqldb.insert(数据表名, null, values);
 private void inset() {
        //获取Edittext的内容;
        String name=editText.getText().toString();
        sqldb = dbhelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        //Name:数据列名;
        //name: 数据;
        values.put("Name",name);
        //TABLE_NAME 数据表名;
        sqldb.insert(TABLE_NAME, null, values);
    }
2.查询数据:
    首先实例化子类的对象,调用getReadableDatabase方法;
    创建游标
    将游标从最上方不断往下移动
    打印Log
    ps:如果数据表内没有数据,调用查询会出现闪退问题,原因是游标找不到数据来放置位置;
private void secet() {
        sqldb=dbhelper.getReadableDatabase();
        //前四个参数:数据表名,查询的列名,占位符,填充的值
        Cursor mCursor = sqldb.query(TABLE_NAME,new String[] { "Name" },null,null,null,null,null);
        mCursor.moveToFirst() ;
        do {
            String name = mCursor.getString(mCursor.getColumnIndex("Name"));
            System.out.println(name);
            Log.e("......................",""+name);
        }while (mCursor.moveToNext());
    }
3.删除数据:
实现对象调用getWritableDatabase方法;
对象.delete();
占位符和判断的值一起来判断删除那条数据
如果为null,将会全被删除
 private void delete() {
        sqldb=dbhelper.getWritableDatabase();
        //表名,占位符,判断的值
        sqldb.delete(TABLE_NAME,"Name=?",new String[]{editText2.getText().toString()});
    }
4.修改数据:
    实现对象调用getWritableDatabase方法;
    创建ContentValues 对象values;
    将修改后的数据放置values;
    使用sqldb.update;同过占位符和修改前的数据来判断修改内容;
    同理如果占位符和数据为null,所有数据都会修改
 private void xiu() {
        sqldb=dbhelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        //修改后的数据
        values.put("Name",editText2.getText().toString());
        //表名,占位符,修改前的数据
        sqldb.update(TABLE_NAME,values,"Name=?",new String[]{editText.getText().toString()});
    }

全码:

package com.example.practice;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SQlineActivity extends AppCompatActivity implements View.OnClickListener{
    private EditText editText;
    private EditText editText2;
    private Button button;
    private Button button2;
    private Button button3;
    private Button button4;
    private DBhelp dbhelper;
    private SQLiteDatabase sqldb;
    private static final String TABLE_NAME = "student";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sqline);
        BlindID();
        dbhelper = new DBhelp(this, "demodb", null, 1);
    }

    private void BlindID() {
        editText=findViewById(R.id.editsq);
        editText2=findViewById(R.id.editxiu);
        button=findViewById(R.id.charbrn);
        button2=findViewById(R.id.chaxbrn);
        button3=findViewById(R.id.shanbrn);
        button4=findViewById(R.id.gaibrn);
        button.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.charbrn:
                inset();
                break;
            case R.id.chaxbrn:
                secet();
                break;
            case R.id.shanbrn:
                delete();
                break;
            case R.id.gaibrn:
                xiu();
                break;
        }
    }

    private void xiu() {
        sqldb=dbhelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("Name",editText2.getText().toString());
        sqldb.update(TABLE_NAME,values,"Name=?",new String[]{editText.getText().toString()});
    }

    private void delete() {
        sqldb=dbhelper.getWritableDatabase();
        sqldb.delete(TABLE_NAME,"Name=?",new String[]{editText2.getText().toString()});
    }

    private void secet() {
        sqldb=dbhelper.getReadableDatabase();
        Cursor mCursor = sqldb.query(TABLE_NAME,new String[] { "Name" },null,null,null,null,null);
        mCursor.moveToFirst() ;
        do {
            String name = mCursor.getString(mCursor.getColumnIndex("Name"));
            System.out.println(name);
            Log.e("......................",""+name);
        }while (mCursor.moveToNext());
    }

    private void inset() {
        String name=editText.getText().toString();
        sqldb = dbhelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("Name",name);
        sqldb.insert(TABLE_NAME, null, values);
    }

    class DBhelp extends SQLiteOpenHelper{
        private  String CREATE_TBL="create table student"
                +"(Name text primary key not null)";
        //
        public DBhelp(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
           db.execSQL(CREATE_TBL);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值