Android中的SQLite SQLiteOpenHelper SQLiteDatabase及其例子,luliyuan的博客 - 皇冠云
总结一下最近研究的Android中SQLite的使用:参考了《Android应用开发揭秘》及其http://blog.csdn.net/xys289187120/article/details/6661099中的文章
1、SQLite
数据库最经典的四个操作添加(Insert)、删除(delete)、修改(update)、查询(select),在处理大量数据的时候使用数据库可以帮我们迅速定位当前须要处理的数据
2、SQLiteOpenHelper
实际开发中为了更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类。这个类中需要重写两个方法onCreate和onUpgrade。在构造函数时并没有真正的创建数据库,而是在通过继承自SQLiteOpenHelper类的对象调用getWritableDatabase或者getReadableDatabase方法时才真正的创建数据库,并且返回一个SQLiteDatabase类型的对象
3、SQLiteDatabase
我们可以通过SQLiteDatabase的两个接口就可以完成数据库最经典的四个操作添加(Insert)、删除(delete)、修改(update)、查询(select),这两个接口是execSQL和rawQuery,其中添加(Insert)、删除(delete)、修改(update)需要使用execSQL来执行SQL语句,而查询(select)需要使用rawQuery。其实很多教材还介绍了通过SQLiteDatabase的insert、delete、update接口来操作数据库,个人感觉如果对SQL典型的SQL语句比较熟悉的话,还是用execSQL和rawQuery比较好,因为函数的参数直接是SQL语句。
最后想通过一个例子更好的记录一下如何使用数据库
1、layout的xml文件,主要是8个button
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="创建数据库" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除数据库" /> <Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="创建表" /> <Button android:id="@+id/button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="删除表" /> <Button android:id="@+id/button5" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="在表中添加一条数据" /> <Button android:id="@+id/button6" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="从表中删除一条数据" /> <Button android:id="@+id/button7" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="在表中修改一条数据" /> <Button android:id="@+id/button8" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="在表中查找一条数据" /></LinearLayout>
2、MyDatabaseAdapter类中包含所有对数据库操作的接口,外面可以直接调用
public class MyDatabaseAdapter {private final static String DATABASE_NAME = "xys.db";private final static int DB_VERSION = 1;private final static String TABLE_NAME = "";private final static String DB_CREATE_TABLE = "CREATE TABLE test " +"(_id INTEGER PRIMARY KEY AUTOINCREMENT," +"name TEXT,hp INTEGER DEFAULT 100," +"mp INTEGER DEFAULT 100," +"number INTEGER)";public SQLiteDatabase m_SQLiteDatabase = null;public DatabaseHelper m_DatabaseHelper = null;private static class DatabaseHelper extends SQLiteOpenHelper{private static DatabaseHelper mInstance = null; public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DB_VERSION);// TODO Auto-generated constructor stub}static synchronized DatabaseHelper getInstance(Context context) { if (mInstance == null) { mInstance = new DatabaseHelper(context); } return mInstance; } @Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL(DB_CREATE_TABLE);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}public MyDatabaseAdapter(Context context){m_DatabaseHelper = DatabaseHelper.getInstance(context);//Create databasem_SQLiteDatabase = m_DatabaseHelper.getWritableDatabase();}public boolean deleteDatabase(Context context) { return context.deleteDatabase(DATABASE_NAME); }public void createTable(String sql){m_SQLiteDatabase.execSQL(sql);}public void deleteTable(String sql){m_SQLiteDatabase.execSQL(sql);}public void insertData(String sql){m_SQLiteDatabase.execSQL(sql);}public void deleteData(String sql){m_SQLiteDatabase.execSQL(sql);}public void updateData(String sql){m_SQLiteDatabase.execSQL(sql);}//Select这个比较特殊不能通过execSQL接口执行查询,而要用rawQuery或者public void selectData(String sql){Cursor cursor = m_SQLiteDatabase.rawQuery(sql, null);while (cursor.moveToNext()) { int id = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始 String name = cursor.getString(1);//获取第二列的值 int number = cursor.getInt(2);//获取第三列的值 } cursor.close(); m_SQLiteDatabase.close(); }}
3、Activity:主要是点击8个按钮时调用MyDatabaseAdapter类中的接口进行处理
public class SQLiteActivity extends Activity { private MyDatabaseAdapter m_MyDatabaseAdapter = null;/** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);}}); Button button2 = (Button)findViewById(R.id.button2); button2.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);m_MyDatabaseAdapter.deleteDatabase(SQLiteActivity.this);}}); Button button3 = (Button)findViewById(R.id.button3); button3.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);String sql = "create table gameInfo" +"(_id INTEGER PRIMARY KEY," +"name TEXT," +"hp INTEGER DEFAULT 100," +"mp INTEGER DEFAULT 100," +"number INTEGER)";m_MyDatabaseAdapter.createTable(sql);}}); Button button4 = (Button)findViewById(R.id.button4); button4.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);String sql = "DROP TABLE gameInfo";m_MyDatabaseAdapter.deleteTable(sql);}}); //Insert Button button5 = (Button)findViewById(R.id.button5); button5.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);String sql = "INSERT INTO gameInfo (_id,name,number) values(1,'luliyuan12',12345)";m_MyDatabaseAdapter.insertData(sql);}}); //Delete Button button6 = (Button)findViewById(R.id.button6); button6.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);String sql = "DELETE FROM gameInfo where _id=1";m_MyDatabaseAdapter.deleteData(sql);}}); //Update Button button7 = (Button)findViewById(R.id.button7); button7.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);String sql = "update gameInfo set number=2381455 where _id=1";m_MyDatabaseAdapter.updateData(sql);}}); //Select Button button8 = (Button)findViewById(R.id.button8); button8.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubm_MyDatabaseAdapter = new MyDatabaseAdapter(SQLiteActivity.this);String sql = "select * from gameInfo";m_MyDatabaseAdapter.selectData(sql);}}); }}
注意:
封装了一个DatabaseHelper类继承SQLiteOpenHelper 使用了设计模式中的单例模式来处理这个类,单例模式是常见的代码设计模式之一,它的好处是在于避免在内存中频繁的实例化所以将它的对象写成static 静态 这样它的对象就只有一份存在静态内存区使用的时候只须要通过getInstance()就可以直接拿到这个静态对象。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/luliyuan/article/details/8055362
宝塔服务器面板,一键全能部署及管理,送你3188元礼包,点我领取
- 随机文章
- 热门文章
- 热评文章
- 玩转云端(云服务器使用详解)
- 服务器搭建网站完整教程
- 服务器技术和架构
- 深度学习-深度学习集群管理方案
- NAS服务器和文件服务器区别
- Android开发者如何搭建服务器
- 塔式服务器、机架式服务器、刀片服务器区别小结
- DHCP 服务器的安装和配置