安卓数据读写
2021/4/6
1812190328 吴烨峰 安全1801
实验内容
通过文件操作和数据库操作进行数据读写
一:完成安卓对文件的读写操作。分成读写不一致和一致两种情况。
1.新建一个empty activity,在activity_main.xml中添加四个组件
editText_input用来输入想要保存到文件中的数据
button_save按钮用来执行事件,将前面输入的数据保存到文件中
textView_read用来显示文件中保存的数据
button2_read按钮用来执行事件,将文件中的数据读取出来,显示在textView_read上
2.以下是在mainactivity中写入的代码
创建两个按钮 btn1,btn2,对应button_save、button2_read
两个按钮的监听响应事件
上面用到了一个openFileOutput()方法,通过它可以得到一个FileOutputStream对象,然后使用Jave流的方式将数据写入到文件中了。
3.以下是不一致的情况展示
此时可以看到我们输入的1812190328保存后,进行读取,数据并没有显示成1812190328。问题出在哪呢,应该就是getbytes,所以应该加一个字符类型强制转换。
因此我们做以下修改,主要就是红框中的内容,做一个强制String 类型转换
以下是修改后,读写一致的情况
二:完成安卓对SQLite数据库的操作。包括数据库建立、创建表格、插入数据、更新数据、删除数据以及查询数据。
1.数据库的建立
创建一个名叫BookStore.db的数据库。
在mainactivity中加入一个按钮,并且设置点击事件。
上面构建了一个MyDatabaseHelper对象,并且通过构造函数的参数将数据库名指定为BookStore.db,版本号为1。在点击事件中调用了getWritableDatabase()方法,所以第一次按下的时候会自动检测有没有我们需要创建的数据库,如果还没有被创建,就会调用MyDatabaseHelper中的oncreate()方法,创建数据库,并且提示创建成功。再次点击按钮,则不会二次响应。
查询一下,数据库有没有建好
在这里已经可以看到BookStore.db已经被创建了
2.创建表格
创建表格这一步已经在创建数据库的时候,一并创建了,相关代码如下
创建了Book表,有id、name字段,id为主键,且自增长
这边已经可以看到创建了Book表
3.插入数据
新建了一个按钮,id为button_insert,添加一个按钮事件,以下为代码
上面的代码中,有一个contentvalues
ContentValues是一种存储的机制,但是只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,用法如下
ContentValues initialValues = new ContentValues();
initialValues.put(key,values);
SQLiteDataBase sdb ;
sdb.insert(database_name,null,initialValues);
插入成功就返回记录的id否则返回-1;
上面我插入了两条数据,分别是book1,book2,下图是点击按钮后数据库的数据
4.更新数据
新建了一个按钮,id为button_update,添加一个按钮事件,以下为代码
在代码中,最重要的是这两句
就是把book1这条记录的名字改成book1.1
以下是进行操作后,数据库中的数据
5.删除数据
新建了一个按钮,id为button_delete,添加一个按钮事件,以下为代码
代码上的操作就是把book1.1这条数据删除
以下是进行操作后,数据库中的数据
6.查询数据
新建了一个按钮,id为button_query,添加一个按钮事件,以下为代码
这里调用了movetofirst()方法,将数据的指针移动到第一行的位置,然后进入下一个循环中,去遍历查询到的每一行数据。在这个循环中可以通过Cursor的getColumnIndex()方法获取到某一列在表中对应的位置索引,然后把这个索引传入到对应的取值方法中,就可以在数据库中读取到数据了。
上图是使用上面的添加数据,加入了五条数据。
下图是按下按钮后,logcat日志中显示的数据
附加题:对SQLite的所有操作都是根据用户的输入完成。
附加题中添加4个按钮,分别是,插入数据,更新数据,删除数据,查询数据
以下为四个按钮相关的代码
(1)插入数据
以下是效果
输入的是1812190328 wuyefeng,查询数据库中的数据,显示已经插入
(2)更新数据
代码如下
有两个edittext,A(上)B(下),该操作,把数据库中的A的name改成B
效果如下
成功
(3)删除数据
代码如下
有两个edittext,A(上)B(下),该操作使用A,把数据库中的A数据删除
效果如下