您的位置:首页 > 移动开发 > Android开发

Android学习--SQLite存储方式(数据库)

2018-03-20 16:22 555 查看

一、SQLite存储方式

是安卓提供的一种轻量级的数据库(不需安装的内置数据库),是一种数据存储方式之一,一般用于数据量大,数据结构复杂的情况下

二、三种常用数据类型

text 文本型/字符型

integer 整型,自增长,主键

real 浮点型

三、创建一个表格的方法

例如创建一个student表格

create table Student
(
Id integer primary key(主键)  autoincrement(自增长)no null,
Name text(50),
Height real,
age Integer
);


四、如何使用SQLite

创建数据库和数据表

增删改查数据

五、创建数据库和数据表的步骤:

新建类继承SQLiteOpenHelper

实现构造方法

重写onCreatr方法

重写onUpgrage方法

实例化SQLiteOpenHelper的子类对象

调用getReadableDatabase方法或getWritableDatabase

六、定义

1、SQLiteOpenHelper类:

是一个数据库辅助类,管理数据库的创建和版本,通过继承这个类,实现他的一下方法来对数据库进行一些操作。

是一个抽象类,子类需要重写onCreate和onUpgrade抽象方法,并添加一个构造方法

2、SQLiteOpenHelper构造方法:

1.父类中未提供默认构造方法,必须显示调用父类的构造方法

2. 需要传递创建的数据库名称以及数据库版本号

构造方法参数:

SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version)

Context context:上下文环境

String name:数据库名

CursorFactory factory:允许开发者查询数据的时候返回一个自定义的Cursor,一般传入null

int version:当前的数据库的版本号,可用于对数据库进行升级操作

3、SQLiteOpenHelper的常用方法:

oncreate方法

此方法只会在第一次创建时执行,只会执行一次

此方法中使用标准的SQL语句创建数据表

通过调用execSQL方法执行建表SQL语句

onUpgrade方法

此方法用来升级数据库表结构时触发

当需要增加表字段或增加表是,传递一个新的数据库版本号(版本更新时使用)

此方法中可以重新更新现数据表结构

4、SQLiteDatabase对象的方法:

SQLiteOpenHelper子类方法:

实例化SQLiteOpenHelper子类对象,创建数据库和数据库表

SQLiteDatabase对象:

数据库操作对象,用来连接数据库,并可以对数据表进行增删改查

getReadableDatabase方法:

以只读方式打开数据库,一般在查询时使用

getWritableDatabase方法:

以读写方式打开数据库,一般在增删改时使用

七、SQLite存储方式的运用实例

新建一个student表,插入数据,显示数据

步骤:

创建视图列表,绑定ID,监听按钮插入以及显示

新建类MyDBHelper继承SQLiteOpenHelper

建表语句

private String sql = "create Table Student(" +
"id integer primary key autoincrement not null," +
"name text," +
"age integer" +
")";


实现构造方法,重写onCreate和onUpgrade方法

//创建数据表结构语句
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}

//数据库版本更新时
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}


实现增操作

//增
private void insert(){
//获得SQLiteDatabase对象,读写模式
sqlbd=myDBHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",nameEt.getText().toString());
//执行插入操作
sqlbd.insert("student",null,values);
}


实现查操作

//查
private void show(){
//得到数据库对象
sqlbd=myDBHelper.getReadableDatabase();
//创建游标
Cursor mcursor=sqlbd.query("student",null,null,null,null,null,null);
//游标置顶
mcursor.moveToFirst();
//遍历,当游标还能移动时,不断接收数据库里的内容
do{
String name=mcursor.getString(mcursor.getColumnIndex("name"));
Log.e("NAME",name);
}while (mcursor.moveToNext());
mcursor.close();//关闭游标
}


实现改操作

private void modify(){
String name=nameEt.getText().toString();
String newname=name2Et.getText().toString();
sqlbd=myDBHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",newname);
//第三个参数是查询条件where
//第四个参数是修改的值,由一开始的name的占位符的填充长度决定
//三四两个参数相互对应
//如果第三四个参数都为null,那就将每条记录都改掉
sqlbd.update("student",values,"name=? and id>?",new String[]{name,"6"});
}


实现删操作

private void delete(){
sqlbd=myDBHelper.getWritableDatabase();
String name=nameEt.getText().toString();
//第二个参数是查询条件
//第三个参数是第二个参数的占位符的填充值
sqlbd.delete("student","name=?",new String[]{name});
}


八、代码演示

视图代码:

<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.homework.activity.sqliteactivity.SQLiteActivity">

<EditText
android:id="@+id/name_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入学生姓名"/>
<EditText
android:id="@+id/name2_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="修改学生信息"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/search_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="新增"/>
<Button
android:id="@+id/modify_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="修改"/>
<Button
android:id="@+id/take_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="显示"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="删除"/>
</LinearLayout>
</LinearLayout>


MYDBHelper类代码

//创建数据库表
public class MyDBHelper extends SQLiteOpenHelper {

//建表语句
private String sql = "create Table Student(" + "id integer primary key autoincrement not null," + "name text," + "age integer" + ")";

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

//创建数据表结构语句 @Override public void onCreate(SQLiteDatabase db) { db.execSQL(sql); } //数据库版本更新时 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}


SQLiteActivity类代码:

public class SQLiteActivity extends AppCompatActivity implements View.OnClickListener{
private EditText nameEt;
private Button insertBtn;
private Button takeBtn;

private EditText name2Et;
private Button modifyBtn;
private Button deleteBtn;

private MyDBHelper myDBHelper;
private SQLiteDatabase sqlbd;

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

bindID();

myDBHelper=new MyDBHelper(this,"demodb",null,1);
}

private void bindID() {
nameEt=findViewById(R.id.name_et);
insertBtn=findViewById(R.id.search_btn);
takeBtn=findViewById(R.id.take_btn);

name2Et=findViewById(R.id.name2_et);
modifyBtn=findViewById(R.id.modify_btn);
deleteBtn=findViewById(R.id.delete_btn);

nameEt.setOnClickListener(this);
insertBtn.setOnClickListener(this);
takeBtn.setOnClickListener(this);

name2Et.setOnClickListener(this);
modifyBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.search_btn:
insert();
break;
case R.id.take_btn:
show();
break;
case R.id.modify_btn:
modify();
break;
case R.id.delete_btn:
delete();
break;
default:
break;
}
}

//增 private void insert(){ //获得SQLiteDatabase对象,读写模式 sqlbd=myDBHelper.getWritableDatabase(); ContentValues values=new ContentValues(); values.put("name",nameEt.getText().toString()); //执行插入操作 sqlbd.insert("student",null,values); }

//查
private void show(){
//得到数据库对象
sqlbd=myDBHelper.getReadableDatabase();
//创建游标
Cursor mcursor=sqlbd.query("student",null,null,null,null,null,null);
//游标置顶
mcursor.moveToFirst();
//遍历
do{
String name=mcursor.getString(mcursor.getColumnIndex("name"));
Log.e("NAME",name);
}while (mcursor.moveToNext());
mcursor.close();//关闭游标
}

//改
private void modify(){
String name=nameEt.getText().toString();
String newname=name2Et.getText().toString();
sqlbd=myDBHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",newname);
//第三个参数是查询条件where
//第四个参数是修改的值
sqlbd.update("student",values,"name=? and id>?",new String[]{name,"6"});
}

//删
private void delete(){
sqlbd=myDBHelper.getWritableDatabase();
String name=nameEt.getText().toString();
//第二个参数是查询条件
//第三个参数是第二个参数的占位符的填充值
sqlbd.delete("student","name=?",new String[]{name});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐