转载请标明出处:http://blog.csdn.net/wu_lai_314/article/details/43603787
在android应用中,对数据进行保存有很多种方式,比如通过网络上传到服务器,保存到本地自定义文件,保存到 sharedpreferences,或者保存到本地数据库。SQLite 作为一种轻量级的数据库,在移动设备(android,ios)中的表现尤为突出。麻雀虽小,五脏俱全。其他大型数据库拥有的常见功能,sqlite上也都有,sql语句的语法也大同小异。在该阶段学习使用sqlite的过程中,总结此文,作为学习笔记,也帮助入门菜鸟(PS:欢迎大牛指教)
android系统自带了很多api来帮助开发者使用sqlite, 其中最关键的需要用到两个类:SQLiteOpenHelper 和 SQLiteDatabase 类。前者是作为一个辅助类存在。下面列出
方法名 | 方法描述 |
---|---|
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) | 构造方法,一般是传递一个要创建的数据库名称那么参数 |
onCreate(SQLiteDatabase db) | 创建数据库时调用 |
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) | 版本更新时调用 |
getReadableDatabase() | 创建或打开一个只读数据库 |
getWritableDatabase() | 创建或打开一个读写数据库 |
SQLiteOpenHelper 初始化的时候只会执行构造函数,不会执行函数onCreate(...) 和 onUpgrade(...) ,当调用getReadableDatabase或者getWritableDatabase函数时候,才会函数onCreate(...)。如果已经调用过了下次,执行getReadableDatabase或者getWritableDatabase函数时候系统不再调用onCreate函数
现在写一个小Demo 作为示例 (示例简单以至于应用程序界面上不会提示,详细过程会在logcat打印出来)
工程截图:
关键代码:
自定义 DBHelper 继承自SQLiteHelper
package com.example.sqldemo.data; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper{ private static final String TAG = "DBHelper"; public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } public DBHelper(Context context,String name,int version) { this(context, name, null, version); } public DBHelper(Context context,String name) { this(context, name, DBConstant.DATABASE_VERSION); } public DBHelper(Context context) { this(context, DBConstant.DATABASE_NAME); } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table person(_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20),age int)"; db.execSQL(sql); System.out.println(TAG + " 数据库 DBHelper onCreate"); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { System.out.println(TAG + " 数据库 DBHelper onUpgrade"); } }
onCreate函数中可以写sql语句,在第一次调用时候创建数据库,但是如果数据表比较多的话,建议在assert目录下新建一个文件写sql语句,这样只要在第一次调用onCreate函数时候读取文件内容即可
DBConstant 类,方便数据库变量的管理
package com.example.sqldemo.data; public class DBConstant { public static final String DATABASE_NAME = "demo.db3"; public static final int DATABASE_VERSION = 1; }
package com.example.sqldemo.data; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class SQLDemoDatabase { private static final String TAG = "SQLDemoDatabase"; private SQLiteDatabase db; private DBHelper dbHelper; public SQLDemoDatabase(DBHelper _dbHelper) { dbHelper = _dbHelper; } //增加数据 public void insertData() { db = dbHelper.getReadableDatabase(); //方法一:使用execSQL 插入 db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{"zhangsan", 10}); //方法二:使用insert方法插入 //实例化一个ContentValus用来装载待插入的数据 ContentValues cv = new ContentValues(); cv.put("name", "lisi"); cv.put("age", 12); db.insert("person", null, cv); System.out.println(TAG + " insertData"); db.close(); } //删除数据 public void deleteData() { db = dbHelper.getReadableDatabase(); //方法一:使用execSQL方式实现 db.execSQL("delete from person where name='zhangsan'"); //方法二: String whereClause = "name=?";//删除的条件 String[] whereArgs = {"lisi"};//删除条件的参数 db.delete("person", whereClause, whereArgs); System.out.println(TAG + " deleteData"); db.close(); } //修改数据 public void updateData() { db = dbHelper.getReadableDatabase(); //方法一:使用execSQL方式实现 db.execSQL("update [person] set age = 5 where name = 'zhangsan'"); //方法二: ContentValues cv = new ContentValues();//实例化ContentValues cv.put("age", 15);//添加要修改的字段及内容 String whereClause = "name=?";//修改条件 String[] whereArgs = {"lisi"};//添加要修改条件的参数 db.update("person", cv, whereClause, whereArgs); System.out.println(TAG + " updateData"); db.close(); } //查询数据 public void queryData() { db = dbHelper.getReadableDatabase(); //方法一:使用rawQuery实现的带参数查询 Cursor c = db.rawQuery("select * from person where name=?", new String[]{"zhangasan"}); if(c.getCount() > 0) { while(c.moveToNext()) { String name = c.getString(c.getColumnIndex("name")); int age = c.getInt(c.getColumnIndex("age")); System.out.println("Person:[" + name + "," + age +"]"); } } else { System.out.println(TAG + " 无记录"); } //方法二 Cursor c2 = db.query("person", null, null, null, null, null, null, null); if(c2.getCount() > 0) { while(c2.moveToNext()) { String name = c2.getString(c.getColumnIndex("name")); int age = c2.getInt(c.getColumnIndex("age")); System.out.println("Person:[" + name + "," + age +"]"); } } else { System.out.println(TAG + " 无记录"); } System.out.println(TAG + " queryData"); db.close(); } }
MainActivity 类
package com.example.sqldemo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import com.example.sqldemo.data.DBHelper; import com.example.sqldemo.data.SQLDemoDatabase; public class MainActivity extends ActionBarActivity implements OnClickListener{ private static final String TAG = "MainActivity"; private Context context; private DBHelper dbHelper; private SQLiteDatabase db; private SQLDemoDatabase sqlDB; private Button btnAdd; private Button btnDel; private Button btnUpdate; private Button btnQuery; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } public void init() { context = getApplicationContext(); //初始化按钮 btnAdd = (Button)findViewById(R.id.btn_add); btnDel = (Button)findViewById(R.id.btn_del); btnUpdate = (Button)findViewById(R.id.btn_update); btnQuery = (Button)findViewById(R.id.btn_query); //设置监听 btnAdd.setOnClickListener(this); btnDel.setOnClickListener(this); btnQuery.setOnClickListener(this); btnUpdate.setOnClickListener(this); //初始化一个数据库辅助类 dbHelper = new DBHelper(context); //自定义的数据库封装类,对数据库的增删改查操作进行封装 sqlDB = new SQLDemoDatabase(dbHelper); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_add: sqlDB.insertData(); Toast.makeText(context, "add", Toast.LENGTH_SHORT).show(); break; case R.id.btn_del: sqlDB.deleteData(); Toast.makeText(context, "del", Toast.LENGTH_SHORT).show(); break; case R.id.btn_update: sqlDB.updateData(); Toast.makeText(context, "update", Toast.LENGTH_SHORT).show(); break; case R.id.btn_query: sqlDB.queryData(); Toast.makeText(context, "query", Toast.LENGTH_SHORT).show(); break; default: break; } } }
源码下载地址:http://download.csdn.net/detail/wu_lai_314/8431203
下载标明出处: http://blog.csdn.net/wu_lai_314/article/details/43603787