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); } /** * 创建数据库时触发 */ @Override public 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); } /** * 更新数据库时触发 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } @Override public 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); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (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; } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //关闭所打开的数据 mOpenHelper.close(); } }