SQLite数据库
发布时间:2020-12-12 23:44:45 所属栏目:百科 来源:网络整理
导读:目录 SQLiteDatabase简介 创建数据库和表 使用SQL语句操作SQLite数据库 使用sqlite3工具 使用特定方法操作SQLite数据库 事务 SQLiteOpenHelper类 英文生词本 一 对SQLite数据库的理解 它是android系统集成的一个轻量级的数据库 是一个嵌入式的数据库引擎??
目录
一 对SQLite数据库的理解
二 SQLiteDatabase的理解
//1 打开path文件所代表的SQLite数据库
static SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags)
//2 打开或创建(如果不存在)file文件所代表的SQLite数据库
static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory)
//3 打开或创建(如果不存在)path文件所代表的SQLite数据库
static SQLiteDatabase openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
//1 执行带占位符的sql语句
execSQL(String sql,Object[] bindArgs)
//2 执行sql语句
execSQL(String sql)
//3 向指定的表中插入数据
insert(String table,String nullColumnHack,ContentValues values)
//4 更新指定表中的特定数据
update(String table,ContentValues values,String whereClause,String[] whereArgs)
//5 删除指定表中的特定数据
delete(String table,String[] whereArgs)
//6.1 对指定数据表进行查询
Cursor query(String table,String[] columns,String[] whereArgs,String groupBy,String having,String OrderBy)
//6.2 limit控制最多查询几条记录
Cursor query(String table,String OrderBy,String limit)
//6.3 第一个参数控制是否去除重复值
Cursor query(boolean distinct,String table,String limit)
//7 执行带占位符的sql查询
rawQuery(String sql,String[] selectionArgs)
//8 开始事务
beginTransaction()
//9 结束事务
endTransaction()
三 Cursor的理解
//1 将记录指针向上或向下移动指定的行数,offset为正是向下移动,为负是向上移动
move(int offset)
//2 将记录指针移动到第一行,如果成功就返回true
boolean moveToFirst()
//3 将记录指针移动到最后一行,如果成功就返回true
boolean moveToLast()
//4 将记录指针移动到下一行,如果成功就返回true
boolean moveToNext()
//5 将记录指针移动到指定行,成功就返回true
boolean moveToPosition()
//6 将记录指针移动到上一行,成功返回true
boolean moveToPrevious()
四 创建数据库和表
//如果有temp.db3就打开,没有就创建,这里没有指定SQLieDatabase.CursorFactory参数,该参数是一个用于返回Cursor的工厂,如果是null,就表示用默认的工厂,这行代码就可以返回一个SQLiteDatabase对象
SQLiteDatabase.openOrCreateDatabase("/mnt/db/temp.db3",null)
//定义创建表的语句
sql = "create table user_inf(user_id integer primary key,user_name varchar(255),user_pass varchar(255))" //执行sql语句,db就是SQLiteDatabase db.execSQL(sql);
五 使用SQL语句操作SQLite数据库
db.insert("insert table tb_info values(null,?,?)",String[]{title,content});
package com.example.sqlshj;
import android.app.Activity;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends Activity {
private SQLiteDatabase db;
private EditText title,content;
private String s_title,s_content;
private Button insert;
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建数据库
db = SQLiteDatabase.openOrCreateDatabase(getFilesDir() + "/temp.db3",null);
initComponent();
setListener();
}
private void initData() {
s_title = title.getText().toString();
s_content = content.getText().toString();
}
private void setListener() {
insert.setOnClickListener(btListener);
}
private void initComponent() {
title = (EditText) findViewById(R.id.et_title);
content = (EditText) findViewById(R.id.et_content);
insert = (Button) findViewById(R.id.bt_insert);
lv = (ListView) findViewById(R.id.lv);
}
private OnClickListener btListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
initData();
// 点击就插入数据到数据库,并查询数据库,将数据显示在listview中
try {
insertData(db,s_title,s_content);
Cursor cursor = db.rawQuery("select * from shj",null);
inflateList(cursor);
} catch (SQLException e) {
//创建表,表的主键列的列名必须是_id,因为SimpleCursorAdapter只能识别_id的主键
db.execSQL("create table shj (_id integer primary key autoincrement,table_title varchar(50),table_content varchar(255))");
insertData(db,null);
inflateList(cursor);
}
}
private void inflateList(Cursor cursor) {
lv.setAdapter(new SimpleCursorAdapter(MainActivity.this,R.layout.lv_item,cursor,new String[] { "table_title","table_content" },new int[] { R.id.tv_title,R.id.tv_content }));
}
private void insertData(SQLiteDatabase db,String s_title,String s_content) {
db.execSQL("insert into shj values(null,new String[] {
s_title,s_content });
}
};
//记得要关闭db,否则会资源泄露
protected void onDestroy() {
super.onDestroy();
if (db != null && db.isOpen()) {
db.close();
}
};
}
总结使用SQLiteDatabase操作数据库的步骤如下
六 SQLiteOpenHelper
try {
insertData(db,s_content);
Cursor cursor = db.rawQuery("select * from shj",null); inflateList(cursor); } catch (SQLException e) { //创建表,表的主键列的列名必须是_id,因为SimpleCursorAdapter只能识别_id的主键 db.execSQL("create table shj (_id integer primary key autoincrement,table_title varchar(50),table_content varchar(255))"); insertData(db,s_content); Cursor cursor = db.rawQuery("select * from shj",null); inflateList(cursor); }
程序先尝试向shj中插入数据,如果异常,在异常捕获的catch块中创建shj数据表,然后在插入记录。———–SQLiteOpenHelper可以处理这个问题
//1 以读写的方式打开数据库对应的SQLiteDatabase对象
- synchronized SQLiteDatabase getReadableDatabase():
//2 以写的方式打开数据库对应的SQLiteDatabase对象
- synchronized SQLiteDatabase getWritableDatabase():
//3 当第一次创建数据库时回调
- abstract void onCreate(SQLiteDatabase db):
//4 当数据库版本更新是回调该方法
- abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):
//关闭所有打开的SQLiteDatabase对象
- synchronized void close()
//构造方法?
super(Context context,String db_name,null,int version)
方法分析:
疑问
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |