一、为什么要用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 常用在数据库中的操作。