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




0 0
原创粉丝点击