Android中5大数据存储(三)---SQLite数据库存储
来源:互联网 发布:盛势网络剧视频bili 编辑:程序博客网 时间:2024/06/01 09:23
SQLite是一个轻量级的、嵌入式的关系型数据库,它遵守ACID的关联式数据库管理系统,是主要针对于嵌入式设备专门设计的数据库,由于其本身占用的存储空间较小,所以目前已经在Android操作系统中广泛使用,而且SQLite数据库可以方便的使用SQL语句实现数据库的增、删、改、查、事务控制等操作。
在Android系统中,每一个android.database.sqlite.SQLiteDatabase类的实例都代表了一个SQLite数据库的操作,SQLiteDatabase类本身只是一个数据库的操作类,但是如果想要进行数据库的操作,还是需要android.database.sqlite.SQLiteOpenHelper类的帮助,但是其是个抽象类,使用时需要定义其自雷,并且在子类中覆写相应的抽象方法。
定义SQLiteOpenHelper的子类------MyDatabaseHelper.java
package cn.norysn.createdb;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteException;import android.database.sqlite.SQLiteOpenHelper;public class MyDatabaseHelper extends SQLiteOpenHelper {//数据库名称private static final String DATABASE_NAME = "norysn.db";//数据库版本private static final int DATABASE_VERSION = 1;//数据表名称private static final String TABLE_NAME = "mytab";public MyDatabaseHelper(Context context) {//调用父类构造super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {//创建数据表String sql = "CREATE TABLE "+TABLE_NAME+"("+"id INTEGER PRIMARY KEY,"+"name VARCHAR(50) NOT NULL,"+"birthday DATE NOT NULL)";try {db.execSQL(sql);} catch (SQLiteException e) {//e.printStackTrace();}}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {String sql = "DROP TABLE IF EXISTS "+TABLE_NAME;//SQL语句try {db.execSQL(sql);} catch (SQLiteException e) {// TODO: handle exception}//创建表this.onCreate(db);}}在子类中覆写了里面的onCreate()和onUpgrade()的方法,其中,onCreate()方法负责表的创建,但是此方法并不是在实例化SQLiteOpenHelper类的对象时调用,而是通过对象调用了getReadableDatabase()或getWriteableDatabase()方法时才会调用,而onUpgrade()方法负责表的删除,并且在删除之后重新创建数据表,当数据库需要升级时会调用此方法。
=======================================================================================
定义一个操作类(MytabOperate.java)来封装数据库的创建、增加、删除、修改、查询的方法
package cn.norysn.operatedb;import java.util.ArrayList;import java.util.List;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteException;public class MyTabOperate{//数据表名称private static final String TABLE_NAME = "mytab";private SQLiteDatabase db = null;//构造方法public MyTabOperate(SQLiteDatabase db){this.db = db;}//insert operatepublic void insert(String name, String birthday){String sql = "insert into "+TABLE_NAME+" (name, birthday) values(?,?)";Object args[] = new Object[]{name, birthday};try {db.execSQL(sql, args);db.close();} catch (SQLiteException e) {// TODO: handle exception}}//update operatepublic void update(int id, String name, String birthday){String sql = "update "+TABLE_NAME+" set name=?,birthday=? where id=?";Object args[] = new Object[]{name, birthday, id};db.execSQL(sql, args);db.close();}//delete operatepublic void delete(int id){String sql = "delete from "+TABLE_NAME+" where id=?";Object args[] = new Object[]{id};db.execSQL(sql, args);db.close();}//query operatepublic List<String> query(){//定义List集合List<String> all = new ArrayList<String>();//定义sql语句String sql = "select * from "+TABLE_NAME;Cursor result = db.rawQuery(sql, null);//result.moveToLast()for(result.moveToFirst(); !result.isAfterLast(); result.moveToNext()){//设置集合数据all.add(" ["+result.getInt(0)+"] "+" "+result.getString(1)+", "+result.getString(2));}db.close();return all;}}
有过JDBC学习的读者都清除,由于本程序采用的是拼凑SQL语句的形式,因此代码存在SQL注入漏洞以及无法处理一些敏感字符的问题,为了解决这个问题,在开发中往往会使用占位符的形式俩完成。
=======================================================================================
定义一个Activity(MySQLiteDemo.java)程序,通过监听按钮事件来完成相应的数据操作
package cn.norysn.sqlitedata;import cn.norysn.createdb.MyDatabaseHelper;import cn.norysn.operatedb.MyTabOperate;import android.app.Activity;import android.database.sqlite.SQLiteOpenHelper;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.LinearLayout;import android.widget.ListView;public class MySQLiteDemo extends Activity {//数据库操作private SQLiteOpenHelper helper = null;//定义按钮private Button createBtn = null; private Button insertBtn = null; private Button updateBtn = null; private Button deleteBtn = null; private Button queryBtn = null; private LinearLayout mylayout = null;//实例化对象private MyTabOperate myTab = null;//计数统计private static int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_sqlite_demo); //定义数据库创建的辅助类 helper = new MyDatabaseHelper(this); //取得可更新的数据库 //myTab = new MyTabOperate(helper.getWritableDatabase()); //获取组件 createBtn = (Button)findViewById(R.id.createbtn); insertBtn = (Button)findViewById(R.id.insertbtn); updateBtn = (Button)findViewById(R.id.updatebtn); deleteBtn = (Button)findViewById(R.id.deletebtn); queryBtn = (Button)findViewById(R.id.querybtn); mylayout = (LinearLayout)findViewById(R.id.LinearLayout1); //设置监听事件 createBtn.setOnClickListener(new BtnListener()); insertBtn.setOnClickListener(new BtnListener()); updateBtn.setOnClickListener(new BtnListener()); deleteBtn.setOnClickListener(new BtnListener()); queryBtn.setOnClickListener(new BtnListener()); } //设置监听类 public class BtnListener implements OnClickListener{@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.createbtn:create();break;case R.id.insertbtn:insert();break;case R.id.updatebtn:update();break;case R.id.deletebtn:delete();break;case R.id.querybtn:query();break;}} } //设置按钮的响应方法 public void create(){ //以修改的方式打开数据库 helper.getWritableDatabase(); } public void insert(){ //取得可更新的数据库 myTab = new MyTabOperate(helper.getWritableDatabase()); myTab.insert("Norysn"+count++, "1991-01-01"); } public void update(){ //取得更新的数据库 myTab = new MyTabOperate(helper.getWritableDatabase()); myTab.update(1, "Norysn", "1989-02-01"); } public void delete(){ myTab = new MyTabOperate(helper.getWritableDatabase()); myTab.delete(3); } public void query(){ myTab = new MyTabOperate(helper.getReadableDatabase()); //定义ListView组件 ListView listView = new ListView(this); //将数据包装 //单行显示 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myTab.query())); //追加组件 mylayout.addView(listView); //setContentView(listView); }}
页面布局和查询效果截图:
创建的数据库文件位置截图
源码下载 密码:w9hd
- Android中5大数据存储(三)---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数据库存储
- Android 数据存储之SQLite数据库存储
- 蓝桥杯 饮料换购
- aandroid 不能墙时的下载镜像地址
- 八大排序
- ES2015 - JavaScript (1)
- 关于Android程序杀掉之前所有Activity(可用于登陆后被顶掉、更改应用内语言)
- Android中5大数据存储(三)---SQLite数据库存储
- oracle 全文检索实践
- 威佐夫博奕
- Java - JCP、JSR等名词介绍
- Linux笔记(55)——主控脚本
- pod小问题
- file结构中的private_data
- iOS开发网络篇之文件下载、大文件下载、断点下载
- 实例方法和静态方法的详解