一、什么是SQLite
SQLite数据库存储是Android系统提供的数据存储方式之一
SQLite是专为嵌入式设备设计的一款轻量级数据库
SQLite占用资源非常低,在嵌入式设备中,只需要几百K的内存
SQLite支持标准的SQL语法,遵循数据库的ACID事务
SQLite不需要单独安装,不需要用户名密码就可以使用
二、SQLite常用数据类型
文本型 text
浮点型 real
整型 integer
三、如何创建数据库和数据表
01.新建类(类名自定义)继承SQLiteOpenHelper;
02.实现构造方法;
03.重写onCreate方法(此方法只会在创建时执行,只会执行一次);
04.重写onUpgrade方法;
05.实例化SQLiteOpenHelper的子类对象,例如本例的DBHepler类;
06.调用getReadableDatabase方法或调用getWritableDatabase方法
四、实例展示
1、新建类继承SQLiteOpenHelper;实现构造方法;写入数据表的SQLite的语句,在onCreate中用execSQL创建数据表。
public class HBHelper extends SQLiteOpenHelper {
//数据表的语句
private String createSQL="create table students("
+"id integer primary key autoincrement,"
+"name text,"
+"age integer,"
+"gender text"+")";
/**构造方法
*
* @param context 上下文坏境
* @param name 数据库名字
* @param factory 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。
如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求!
* @param version 数据库版本号
*/
public HBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//创建数据表
sqLiteDatabase.execSQL(createSQL);
}
// 该方法会在数据库需要升级的时候调用
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("ALTER TABLE students ADD COLUMN other TEXT");
}
}
2、在布局文件中写入自己所需要的控件,两个EditText、四个Button,第二个EditText是用来修改数据的。
<EditText
android:id="@+id/main3_nametv"
android:layout_width="match_parent"
android:layout_height="80dp" />
<EditText
android:id="@+id/main3_nametv2"
android:layout_width="match_parent"
android:layout_height="80dp" />
<Button
android:id="@+id/main3_insert_btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="插入"/>
<Button
android:id="@+id/main3_search_btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="查询"/>
<Button
android:id="@+id/main3_modify_btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="修改"/>
<Button
android:id="@+id/main3_delete_btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="删除"/>
3、01-在activity中定义控件,绑定ID,设置监听,设置点击事件;02-进行增删改查操作
public class Main3Activity extends AppCompatActivity implements View.OnClickListener{
//定义控件
private EditText nametv;
private EditText nametv2;
private Button insertBtn;
private Button searchBtn;
private Button modifyBtn;
private Button deleteBtn;
private HBHelper hbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
bindID();
//实例化子类对象
hbHelper=new HBHelper(this,"mybd",null,1);//引号中的是数据库名
}
//绑定ID
private void bindID() {
nametv=findViewById(R.id.main3_nametv);
insertBtn=findViewById(R.id.main3_insert_btn);
searchBtn=findViewById(R.id.main3_search_btn);
modifyBtn=findViewById(R.id.main3_modify_btn);
deleteBtn=findViewById(R.id.main3_delete_btn);
nametv2=findViewById(R.id.main3_nametv2);
//设置监听
insertBtn.setOnClickListener(this);
searchBtn.setOnClickListener(this);
modifyBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
}
@Override
//设置点击事件
public void onClick(View view) {
switch (view.getId()){
//加入数据操作
case R.id.main3_insert_btn:
//获得SQLiteDatabase对象,读写模式
SQLiteDatabase sqLiteDatabase=hbHelper.getWritableDatabase();
//ContentValues类似HashMap,区别是ContentValues只能存简单数据类型,不能存对象
//创建ContentValues的对象
ContentValues values=new ContentValues();
//把数据放入values中
values.put("name",nametv.getText().toString());//引号中的是列名,后面是输入的数据
//执行插入操作,放入数据表中
sqLiteDatabase.insert("students",null,values);//引号中的是数据表名
break;
//查询数据操作
case R.id.main3_search_btn:
//得到数据库对象
SQLiteDatabase sqLiteDatabase1=hbHelper.getReadableDatabase();
//创建游标
Cursor cursor=sqLiteDatabase1.query("students",null,null,null,null,null,null);
//游标置顶
cursor.moveToFirst();
//遍历
do {
String name=cursor.getString(cursor.getColumnIndex("name"));
Log.e("NAME",name);
}while (cursor.moveToNext());
//关闭游标
cursor.close();
break;
//修改数据操作
case R.id.main3_modify_btn:
SQLiteDatabase sqLiteDatabase3=hbHelper.getWritableDatabase();
ContentValues values1=new ContentValues();
values1.put("name",nametv2.getText().toString());
//第二个参数是WHERE语句(即执行条件,删除哪条数据)
//第三个参数是WHERE语句中占位符(即"?"号)的填充值
//参数分别是表名、values1、列名+占位符即?号、修改前的数据
sqLiteDatabase3.update("students",values1,"name=?",new String[]{nametv.getText().toString()});
break;
//删除数据操作
case R.id.main3_delete_btn:
SQLiteDatabase sqLiteDatabase2=hbHelper.getWritableDatabase();
//参数分别是表名、values1、列名+占位符即?号、修改后的数据
//如果第三四个参数为null,那就将每条记录都改掉
sqLiteDatabase2.delete("students","name=?",new String[]{nametv2.getText().toString()});
break;
default:
break;
}
}
}