SQLite

一.为什么要用SQLite

1.SharedPreferences是以XML形式存储数据的,只适合存储基本数据类型的数据
2.文件存储的内容在提取数据时,相对复杂
3.当数据量大,结构复杂时,如果使用SharedPreference和文件存储对数据的操作将变得非常复杂,容易出错,效率低下,Android中提供了SQLite数据存储,帮助我们解决问题
简单来说SQLite就是用来解决存储数据量大和数据复杂

二.什么是SQLite

1.SQLite数据库存储时Android系统提供的数据存储方式之一
2.SQLite时专为嵌入式设备设计的一款轻量级数据库
3.SQLite占用资源非常低,在嵌入式设备中,只需要几百k的内存
4.SQLite支持标准的SQL语法,遵循数据库的ACID的事务
5.SQLite不需要安装,不需要用户名密码就可以使用

三.如何创建数据库和数据表

创建数据库
1.新建类继承SQLiteOpenHelper
SQLiteOpenHelper构造方法
父类中未提供默认构造方法,必须显示调用父类的构造方法
需要传递创建数据库名称以及数据库版本号

构造方法

 public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

SQLiteOpenHelper类的常用方法:onCreate方法 onUpgrade方法
2.实现构造方法
3.重写onCreate方法

  • 此方法只会在第一次创建时执行,只会执行一次
  • 在此方法中使用标准的SQL语句创建数据表
  • onCreate方法有一个SQLiteDatabase对象参数,通过调用execSQL方法执行建表SQL语句

4.重写onUpgrade方法

  • 此方法用来升级数据库表结构时触发
  • 当需要增加表字段或增加表时,传递进来一个新的数据库版本号,就会触发此方法

5.实例化SQLiteOpenHelper的子类对象,例如本例的DBHelp类
创建数据表
create table 表名(
列名 数据类型 主键(primary key) 依次递增(autoincrement) 不为空(not null),
列名 数据类型 ,
列名 数据类型
);
每条数据一定要用英文逗号隔开

数据类型作用
NULL空值
REAL浮点型
TEXT文本
INTEGER整型

6.调用getReadableDatabase方法或getWritableDatabase方法。

四.如何添加数据

新建一个方法继承SQLiteOpenHelper类,里面写上sql语句,在onCreate方法通过调用execSQL方法执行建表SQL语句

package com.example.myapplication;

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

/**
 * Created by lyj on 2018/6/13.
 */

public class MySqliteHelper extends SQLiteOpenHelper {
    //注意此处每个列名用逗号隔开,要用英文的逗号
    private String sql = "create table student(" +
            "id integer primary key autoincrement not null ," +
            "name text ," +
            "age integer" +
            ")";

    public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(sql);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

写一个添加的方法
通过sqLiteDatabase.insert("student", null, values);添加

 private void addStudent() {
        String name = sql_name.getText().toString();
        int age = Integer.parseInt(sql_age.getText().toString());

        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", age);

        //第二参数是数据名
        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
        sqLiteDatabase.insert("student", null, values);
    }

五.如何删除数据

同上新建一个方法继承SQLiteOpenHelper类,不做改动

写一个删除的方法
通过sqLiteDatabase.delete("student","name=? and age=?",new String[]{name,age});删除

private void delStudent() {
        String name=sql_name.getText().toString();
        String age=sql_age.getText().toString();

        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();

        sqLiteDatabase.delete("student","name=? and age=?",new String[]{name,age});

    }

六.如何修改数据

同上新建一个方法继承SQLiteOpenHelper类,不做改动

写一个修改的方法
通过sqLiteDatabase.update("student",values,"name=? and age=?",new String[]{name,age});修改

/*
        第一个参数:表名
        第二个参数:需要更新的数据
        第三个参数:修改条件
        第四个参数:占位符填充值
         */
         sqLiteDatabase.update("student",values,"name=? and age=?",new String[]{name,age});
private void modifyStudent() {
        String name=sql_name.getText().toString();
        String age=sql_age.getText().toString();

        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();

        ContentValues values=new ContentValues();
        values.put("name","小泽");
        values.put("age","20");
        /*
        第一个参数:表名
        第二个参数:需要更新的数据
        第三个参数:修改条件
        第四个参数:占位符填充值
         */
         sqLiteDatabase.update("student",values,"name=? and age=?",new String[]{name,age});
    }

七.如何查询数据

同上新建一个方法继承SQLiteOpenHelper类,不做改动

写一个查询的方法
通过游标获取

private void listStudent() {
        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
        //获取游标
        Cursor cursor = sqLiteDatabase.query("student", null, null, null, null, null, null);
        //游标置顶
        cursor.moveToFirst();
        do {
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int age=cursor.getInt(cursor.getColumnIndex("age"));

            SQLite sqLite=new SQLite(id,name,age);
            sqLiteList.add(sqLite);
            adapter=new SQLiteAdapter(sqLiteList,this);
            sql_lv.setAdapter(adapter);

        } while (cursor.moveToNext());

下面是完整代码

package com.example.myapplication;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
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.ListView;

import com.amitshekhar.DebugDB;
import com.example.myapplication.adapter.SQLiteAdapter;

import java.util.ArrayList;
import java.util.List;

public class MySQLiteActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText sql_id, sql_name, sql_age;
    private Button add_btn, select_btn, update_btn, delete_btn;
    private List<SQLite> sqLiteList=new ArrayList<>();
    private SQLiteAdapter adapter;
    private ListView sql_lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_sqlite);

        bindID();
        DebugDB.getAddressLog();

    }

    private void bindID() {
        sql_id = findViewById(R.id.sql_id);
        sql_name = findViewById(R.id.sql_name);
        sql_age = findViewById(R.id.sql_age);

        add_btn = findViewById(R.id.add_btn);
        add_btn.setOnClickListener(this);

        select_btn = findViewById(R.id.select_btn);
        select_btn.setOnClickListener(this);

        update_btn = findViewById(R.id.update_btn);
        update_btn.setOnClickListener(this);

        delete_btn = findViewById(R.id.delete_btn);
        delete_btn.setOnClickListener(this);

        sql_lv=findViewById(R.id.sql_lv);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.add_btn:
                addStudent();
                break;
            case R.id.select_btn:
                sqLiteList.clear();
                listStudent();
                break;
            case R.id.update_btn:
                modifyStudent();
            case R.id.delete_btn:
                delStudent();
                break;
            default:
                break;
        }
    }

    private void delStudent() {
        String name=sql_name.getText().toString();
        String age=sql_age.getText().toString();

        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();

        sqLiteDatabase.delete("student","name=? and age=?",new String[]{name,age});

    }

    private void modifyStudent() {
        String name=sql_name.getText().toString();
        String age=sql_age.getText().toString();

        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();

        ContentValues values=new ContentValues();
        values.put("name","小泽");
        values.put("age","20");
        /*
        第一个参数:表名
        第二个参数:需要更新的数据
        第三个参数:修改条件
        第四个参数:占位符填充值
         */
         sqLiteDatabase.update("student",values,"name=? and age=?",new String[]{name,age});
    }

    private void listStudent() {
        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
        //获取游标
        Cursor cursor = sqLiteDatabase.query("student", null, null, null, null, null, null);
        //游标置顶
        cursor.moveToFirst();
        do {
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            String name = cursor.getString(cursor.getColumnIndex("name"));
            int age=cursor.getInt(cursor.getColumnIndex("age"));

            SQLite sqLite=new SQLite(id,name,age);
            sqLiteList.add(sqLite);
            adapter=new SQLiteAdapter(sqLiteList,this);
            sql_lv.setAdapter(adapter);

        } while (cursor.moveToNext());

    }

    private void addStudent() {
        String name = sql_name.getText().toString();
        int age = Integer.parseInt(sql_age.getText().toString());

        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", age);

        //第二参数是数据名
        MySqliteHelper mySqliteHelper = new MySqliteHelper(this, "student_db", null, 1);
        SQLiteDatabase sqLiteDatabase = mySqliteHelper.getWritableDatabase();
        sqLiteDatabase.insert("student", null, values);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值