SQLite的用法

一、为什么要用SQLite

sharedpreferences使用简单,但同时也有局限性,因为它是xml存储形式的,
所以在排序、筛选等方面略显不足。提到排序、筛选、比较等需求,我们自然而
然会想到数据库

二、SQLite是什么

SQLite数据库存储是Android系统提供的数据存储方式之一
SQLite是专为嵌入式设备设计的一款轻量级数据库
SQLite占用资源非常低,在嵌入式设备中,只需要几百K的内存
SQLite支持标准的SQL语法,遵循数据库的ACID事务
SQLite是android系统自带,不需要单独安装,不需要用户名密码就可以使用
三.代码展示:
xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.myapplicat456.MainActivity">

    <EditText
        android:id="@+id/nameEdit"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入学生姓名" />


    <EditText
        android:id="@+id/Edit"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入学生姓名" />


    <Button
        android:id="@+id/addBtn"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="新增" />
    <Button
        android:id="@+id/modifyBtn"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="修改" />
    <Button
        android:id="@+id/deleteBtn"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="删除" />
    <Button
        android:id="@+id/searchBtn"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="查询" />
</LinearLayout>

SQLiteDBHelper中代码:

package com.example.administrator.myapplicat456;

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

/**
 * Created by Administrator on 2018/3/20/020.
 */

public class SQLiteDBHelper extends SQLiteOpenHelper {
//注意表里面的内容不可写错,系统不会给错误提示。
    private static final String TABLE_NAME = "student";
private String createSQL= "create table student(" +
        "id integer primary key autoincrement not null," +
        "name text not null," +
        "age integer," +
        "classname text," +
        "score real," +
        "gender text" +
        ");";
//version 数据库版本号
    public SQLiteDBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(createSQL);
    }

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

    }
}

MainActivity中代码:

package com.example.administrator.myapplicat456;

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.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button addBtn;
    private Button searchBtn;
    private Button deleteBtn;
    private Button modifyBtn;

    private EditText Edit;
    private EditText nameEdit;
    private SQLiteDatabase sqldb;
    private SQLiteDBHelper dbhelper;
    private static final String TABLE_NAME = "student";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindID();
        addBtn.setOnClickListener(this);
        searchBtn.setOnClickListener(this);
        deleteBtn.setOnClickListener(this);
        modifyBtn.setOnClickListener(this);
        dbhelper = new SQLiteDBHelper(this, "demodb", null, 1);
    }
//绑定ID
    private void bindID() {
        addBtn = (Button) findViewById(R.id.addBtn);
        searchBtn = (Button) findViewById(R.id.searchBtn);
        deleteBtn = (Button) findViewById(R.id.deleteBtn);
        modifyBtn = (Button) findViewById(R.id.modifyBtn);

        nameEdit = (EditText) findViewById(R.id.nameEdit);
        Edit = (EditText) findViewById(R.id.Edit);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.addBtn:
                insert();
                break;
            case R.id.searchBtn:
                search();
                break;
            case R.id.deleteBtn:
                delete();
                break;
                case R.id.modifyBtn:
                    modify();
                break;

        }
    }

    private void modify() {
        String newname=Edit.getText().toString();
        String name1=nameEdit.getText().toString();
        SQLiteDatabase sqldb=dbhelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put("name",newname);
        //第一个参数是表名,第二个参数是你要修改进去的新值,第三个是where语句,第四个是你要修改的老值。
        sqldb.update(TABLE_NAME, values, "name=?", new String[]{name1});
    }

    private void delete() {

        String name1=nameEdit.getText().toString();
        sqldb = dbhelper.getWritableDatabase();
        //第二个参数是where语句,就是删除哪个值,第三个就是那个?的填充值。
        sqldb.delete("student","name=?",new String[]{name1});


    }


    private void insert() {
        String name = nameEdit.getText().toString();
        //获得SQLiteDatabase对象,读写模式
        sqldb = dbhelper.getWritableDatabase();
        //ContentValues类似HashMap

        ContentValues values = new ContentValues();
        values.put("name", name);
        //执行插入操作
        sqldb.insert("student", null, values);
        Toast.makeText(MainActivity.this, "增加成功", Toast.LENGTH_SHORT).show();
    }

    private void search() {
        SQLiteDatabase sqLiteDatabase1 = dbhelper.getReadableDatabase(); //得到数据库对象
        Cursor cursor = sqLiteDatabase1.query("student", null, null, null, null, null, null); //创建游标
        cursor.moveToFirst(); //游标置顶
        do {
            String name = cursor.getString(cursor.getColumnIndex("name"));
            Toast.makeText(MainActivity.this, name + "", Toast.LENGTH_SHORT).show();
            Log.e("NAme", name);
        } while (cursor.moveToNext());
        cursor.close();
    }


}

扩展
HashMap和HashTable

HashMap不是线程安全的,HashTable是线程安全的一个Collection。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
ContentValues和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues Key只能是String类型,values只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西。ContentValues 常用在数据库中的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值