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();
}
}
Sqlite使用
最新推荐文章于 2022-05-24 23:50:45 发布