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");
}
}
}