Android的数据存储--SQLite数据库(一)
来源:互联网 发布:php location 不跳转 编辑:程序博客网 时间:2024/05/29 07:55
SQLite数据库
在Android中我们如何对数据进行存储?目前比较常用的方式主要有俩种方式:
- SharePreference
- 数据库存储
初识SQLite数据库
SQLite数据库是Android中自带的一款轻量级数据库,遵守ACID(原子性、一致性、隔离性和持久性,即ACID)的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。在android中我们可以调用相关的API来进行数据库的操作。
在Android中进行数据库的操作
Android中数据库的操作主要分为以下步骤:
- 创建数据库
- 数据库的基本操作
创建数据库:
我们在Android中如何创建数据库:在Android中为了更方便的操作数据库,专门提供了一个的SQLiteOpenHelper帮助类,我们可以借助这个类去进行数据库的创建和升级,我们可以创建一个类去继承SQLiteOpenHelper:
/**我们需要继承SQLiteOpenHelper这个类,来创建我们的数据库类*//**SQLiteOpenHelper是一个抽象类,其中有俩个抽象方法:onCreate(),onUpgrade()*/public class MySQLiteOpenHelper extends SQLiteOpenHelper{public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) {//这个方法是为了创建数据库 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//这个方法数据库的升级,其中的参数分别是:数据库的名称,数据库旧的版本,数据库新的版本 }}
SQLiteOpenHelper中还有俩个非常重要的方法:getReadableDatabase()和getWriteableDatabase(),这俩个方法都可以创建或者打开一个现有的数据库(存在的话就直接打开,否则就创建一个新的)这俩个方法的区别是:当数据库不能写入的时候(磁盘满了)getReadableDatabase()方法返回的对象将以只读的方式打开数据库,而getWriteableDatabase()则会出现 异常。
构建出SQLiteOpenHelper的实例后,在调用getReadableDatabase()或者getWriteableDatabase()进行数据的创建,数据库文件会放在/data/data/your package name/database下
/**需要注意的是:在今后的开发过程中,如果我们需要去创建使用数据库,需要根据Android版本来进行动态申请权限,否则可能程序崩溃。*/public class MySQLiteOpenHelper extends SQLiteOpenHelper { public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } /** * 创建一个User数据库,其中创建一个user表,建表语句: * create table user{ * int id primary key autoincrement, * varchar name, * int age, * varchar sex * } * @param db */ public static final String createUser= "create table user(" + " id integer primary key autoincrement," +" name varchar(20)," + " age integer," + " sex varchar(4))"; @Override public void onCreate(SQLiteDatabase db) { //执行创建的语句 Log.e("执行了","执行了!"); db.execSQL(createUser); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
以上我们就创建好了一个数据库文件,可以通过AndroidStudio的DDMS工具进行查看数据库。这样的话我们就能在相应的文件夹下找到合适的数据库文件。
数据库创建好用,我们就可以进行数据的增删改查了。下面我们需要对界面重新做出改动:
这个是界面的展示以及代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.xinning.chatapplication.MainActivity"> <!--需要进行添加的字段与创建的数据库要一致 这里没有将每个控件的共有属性进行抽取。开发中需要注意 还要注意要将文字尽可能的放入到string文件中 --> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/name" android:layout_width="match_parent" android:hint="请输入增加的姓名,方便后期的改,查,删" android:layout_height="wrap_content"/> <EditText android:id="@+id/age" android:inputType="textPassword" android:layout_width="match_parent" android:hint="请输入对应的年龄,方便后期的改,查,删" android:layout_height="wrap_content"/> <EditText android:id="@+id/sex" android:inputType="textPassword" android:layout_width="match_parent" android:hint="请输入对应的性别,方便后期的改,查,删" android:layout_height="wrap_content"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/add" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="增" /> <Button android:id="@+id/update" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="改" /> <Button android:id="@+id/del" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="删" /> <Button android:id="@+id/query" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="查" /> </LinearLayout></LinearLayout>
代码中的一系列操作展示:我们会依次写出增删改查四个操作
- 增:
数据库给我们提供了insert()方法,用来供我们插入数据,主要含有三个参数:第一个是需要插入的表名,第二个是需要插入的列名,第三个是需要插入的值,如果在表中字段可以为空的情况下,可以插入null.,记得我们要指定主键,且主键唯一。
if(TextUtils.isEmpty(name)||TextUtils.isEmpty(age)||TextUtils.isEmpty(sex)){ Toast.makeText(MainActivity.this,"请完善填写的数据",Toast.LENGTH_SHORT).show(); return; } //开始数据的添加。 ContentValues values=new ContentValues(); values.put("name",name); values.put("sex",sex); values.put("age",age); db.insert("Users",null,values); values.clear(); //因为在数据库中的咱们的姓名字段加了唯一约束,所以当输入相同的名字后,会提示一个错误。
- 删:
if(TextUtils.isEmpty(name)){ Toast.makeText(MainActivity.this,"请输入删除的数据",Toast.LENGTH_SHORT).show(); return; } db.delete("User","name=?",new String[]{name}); break; //更新 case R.id.update: if(TextUtils.isEmpty(name)){ Toast.makeText(MainActivity.this,"请填写要更改的人名称员",Toast.LENGTH_SHORT).show(); return; } if(TextUtils.isEmpty(sex)||TextUtils.isEmpty(age)){ Toast.makeText(MainActivity.this,"修改的数据不能为空",Toast.LENGTH_SHORT).show(); return ; } ContentValues values1=new ContentValues(); values1.put("sex",sex); values1.put("age",age); //数据更新:第一个参数是表名,第二个是要更改的数据,第三个是查询条件,第四个主要的信息 db.update("User",values1,"name=?",new String[]{name}); values1.clear();
- 改:
if(TextUtils.isEmpty(name)){ Toast.makeText(MainActivity.this,"请输入删除的数据",Toast.LENGTH_SHORT).show(); return; } db.delete("User","name=?",new String[]{name}); break; //更新 case R.id.update: if(TextUtils.isEmpty(name)){ Toast.makeText(MainActivity.this,"请填写要更改的人名称员",Toast.LENGTH_SHORT).show(); return; } if(TextUtils.isEmpty(sex)||TextUtils.isEmpty(age)){ Toast.makeText(MainActivity.this,"修改的数据不能为空",Toast.LENGTH_SHORT).show(); return ; } ContentValues values1=new ContentValues(); values1.put("sex",sex); values1.put("age",age); //数据更新:第一个参数是表名,第二个是要更改的数据,第三个是查询条件,第四个主要的信息 db.update("User",values1,"name=?",new String[]{name}); values1.clear();
- 查:
Cursor cursor=db.query("User",null,null,null,null,null,null); if(cursor.moveToFirst()){ do{ String name1= cursor.getString( cursor.getColumnIndex("name")); String age1=cursor.getString(cursor.getColumnIndex("age")); String sex1=cursor.getString(cursor.getColumnIndex("sex")); tvDisplay.setText("name:"+name1+",age:"+age1+",sex:"+sex1); }while (cursor.moveToNext()); } cursor.close();
以上就是很简单的数据库的操作。
- Android的数据存储--SQLite数据库(一)
- Android数据存储(SqLite数据库存储)
- Android 数据存储 (一)SQLite
- android-数据存储-SQLite数据库
- android-SQLite数据库存储数据
- android数据存储----SQLite数据库
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- Android数据存储(三)----- SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android数据存储之:SQLite数据库存储
- Android数据存储SQLite数据库存储
- Android 数据存储之SQLite数据库存储
- Android数据存储之SQLite数据库存储
- Android之数据持久化三(SQLite 数据库存储)一
- 数据存储之-SQLite数据库一
- 浙江大学
- 软件工程课程实验报告:实验二
- 利用Python实现腾讯校园招聘状态查询
- 从尾到头打印链表
- 大话设计模式之状态模式
- Android的数据存储--SQLite数据库(一)
- 【前端知识点】深入浅出带你了解HTTP2.0
- Spark源码-SparkContext源码解析
- 翻译:浏览器内部的工作原理
- 大牛给的ACM进阶建议
- Activity工作流学习要点
- mysql中遇到的问题,以及一些优化对策
- Jquery append方法使用中遇到问题记录
- Android照片墙加强版,使用ViewPager实现画廊效果