Sqlite使用

来源:互联网 发布:金庸群侠传2秘籍数据 编辑:程序博客网 时间:2024/04/30 09:02
package com.android.test;import android.app.Activity;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private Button rebuild_table;private Button delete_table;private Button insert_item;private Button delete_item;private Button query_items;private Button update_item;private TextView mTextView;private DatabaseHelper mOpenHelper;// 数据库名private static final String DATABASE_NAME = "myDiaryDb.db";// 数据库版本private static final int DATABASE_VERSION = 1;// 数据表名private static final String TABLE_NAME = "diary";private static final String ID = "tab_id";private static final String TITLE = "title";private static final String BODY = "body";/** * SQLiteOpenHelper表示操作数据库文件的助手 *  * @author u *  */private static class DatabaseHelper extends SQLiteOpenHelper {DatabaseHelper(Context context) {// 创建或者更新数据库// 第一个参数Context// 第二个参数表示数据库名称// 第三个参数表示CursorFactory对象// 第四个参数表示数据库的版本super(context, DATABASE_NAME, null, DATABASE_VERSION);}/** * 创建数据库时触发 */@Overridepublic void onCreate(SQLiteDatabase db) {// 建表sql语句String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID+ " text not null," + TITLE + " text not null, " + BODY+ " text not null " + ");";// 执行sql语句db.execSQL(sql);}/** * 更新数据库时触发 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initLayout();mOpenHelper = new DatabaseHelper(this);}private void initLayout() {rebuild_table = (Button) findViewById(R.id.rebuild_table);delete_table = (Button) findViewById(R.id.delete_table);insert_item = (Button) findViewById(R.id.insert_item);delete_item = (Button) findViewById(R.id.delete_item);query_items = (Button) findViewById(R.id.query_items);update_item = (Button) findViewById(R.id.update_item);mTextView = (TextView) findViewById(R.id.m_text_view);rebuild_table.setOnClickListener(this);delete_table.setOnClickListener(this);insert_item.setOnClickListener(this);delete_item.setOnClickListener(this);query_items.setOnClickListener(this);update_item.setOnClickListener(this);}/* * 重新建立数据表 */private void createTable() {// 得到一个可写的数据库对象SQLiteDatabase db = mOpenHelper.getWritableDatabase();// 建表语句String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID + " text ,"+ TITLE + " text not null, " + BODY + " text not null " + ");";Log.i("sql", "create:" + sql);try {// 删除表,如果已经存在的话db.execSQL("DROP TABLE IF EXISTS diary");db.execSQL(sql);setTitle("数据表成功重建");} catch (SQLException e) {e.printStackTrace();setTitle("数据表重建错误");}}/* * 删除数据表 */private void dropTable() {SQLiteDatabase db = mOpenHelper.getWritableDatabase();String sql = "drop table " + TABLE_NAME;try {db.execSQL(sql);setTitle("数据表成功删除:" + sql);} catch (SQLException e) {setTitle("数据表删除错误");}}/* * 插入两条数据 */private void insertItem() {SQLiteDatabase db = mOpenHelper.getWritableDatabase();// 插入数据的sql语句String sql1 = "insert into " + TABLE_NAME + " (" + ID + ", " + TITLE+ ", " + BODY + ") values('001','title1', 'android的发展真是迅速啊');";String sql2 = "insert into " + TABLE_NAME + " (" + ID + ", " + TITLE+ ", " + BODY + ") values('002','title2', 'android的发展真是迅速啊');";Log.i("sql", "sql:" + sql1);try {db.execSQL(sql1);db.execSQL(sql2);// 用insert方法插入数据ContentValues values = new ContentValues();values.put(ID, "003");values.put(TITLE, "insert插入的标题");values.put(BODY, "insert插入的内容");// 第一个参数表示表名// 第二个参数表示允许为空的字段// 第三个参数表示插入的键值对对象db.insert(TABLE_NAME, null, values); // 插入成功返回的是行号setTitle("插入两条数据成功");} catch (SQLException e) {setTitle("插入两条数据失败");}}/* * 删除其中的一条数据 */private void deleteItem() {try {SQLiteDatabase db = mOpenHelper.getWritableDatabase();// 第一个参数表示表名// 第二个参数表示删除的条件// 第三个参数表示条件值(对第二个参数中的?进行填充,并且都是以字符串的方式填充)db.delete(TABLE_NAME, "tab_id = '001' AND title = ?",new String[] { "title1" });setTitle("删除title为title1的一条记录");} catch (SQLException e) {}}/** * 更新数据 */private void update() {SQLiteDatabase db = mOpenHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put(TITLE, "新标题");values.put(BODY, "新修改数据,O(∩_∩O)~");// 第一个参数表示表名// 第二个参数表示更新的值(键值对对象)// 第三个参数表示where条件// 第四个参数表示where条件值db.update(TABLE_NAME, values, TITLE + " = ? AND " + ID + " = ?",new String[] { "title2", "002" });}/* * 在屏幕的title区域显示当前数据表当中的数据的条数。 */private void showItems() {// 获取一个可读的数据库对象SQLiteDatabase db = mOpenHelper.getReadableDatabase();// 定义查询的字段String col[] = { ID, TITLE, BODY };// 第一个参数表示表名// 第二个参数表示查询的字段// 第三个参数表示where条件// 第四个参数表示where条件值// 第五个参数表示查询的group by条件// 第六个参数表示having条件// 第七个参数表示order by条件Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);// 第八个参数表示limit条件// Cursor cur = db.query(table, columns, selection, selectionArgs,// groupBy, having, orderBy, limit);// 查询结果总条数Integer num = cur.getCount();setTitle(Integer.toString(num) + " 条记录");String str = "";while (cur.moveToNext()) {// cur.getColumnIndex(ID)表示对查询的字段,获取字段在表中下标// cur.getColumnIndexOrThrow(ID)如果该字段不在查询字段范围之内则获取该字段在表中的下标String id = cur.getString(cur.getColumnIndex(ID));String title = cur.getString(cur.getColumnIndex(TITLE));String body = cur.getString(cur.getColumnIndex(BODY));str = str + id + " | " + title + " | " + body + "\n";}// 关闭查询结果cur.close();mTextView.setText(str);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.rebuild_table:// 新建数据表createTable();break;case R.id.delete_table:// 删除数据表dropTable();break;case R.id.insert_item:// 插入数据insertItem();break;case R.id.delete_item:// 删除数据deleteItem();break;case R.id.query_items:// 查询数据showItems();break;case R.id.update_item:// 更新数据update();break;}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();//关闭所打开的数据mOpenHelper.close();}}