SQLite数据库相关操作
一、创建数据库
这里创建了note便签数据表,字段有noteId、noteTitle、noteTime、noteInfo
package com.lhy.notework.splite;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class CreateNoteDB extends SQLiteOpenHelper
{
/**
* 构造方法
*
* @param context
* 上下文
* @param name
* 数据库名称
* @param factory
* 数据库工厂
* @param version
* 版本
*/
public CreateNoteDB (Context context, String databaseName, int version)
{
super(context, databaseName, null, version);
// TODO Auto-generated constructor stub
}
public CreateNoteDB (Context context)
{
super(context, "notedb", null, 1);
// TODO Auto-generated constructor stub
}
/**
* 第一没有数据库创建的时候执行,以后均不执行 创建数据库、数据表和初始化数据库使用
*/
@Override
public void onCreate ( SQLiteDatabase db)
{
/**
* 创建数据表note
*/
StringBuffer stringBufferSQL = new StringBuffer();
stringBufferSQL.append(" Create TABLE note( ");
stringBufferSQL.append(" [noteId] integer PRIMARY KEY AUTOINCREMENT ");
stringBufferSQL.append(" ,[noteTitle] nvarchar(500) ");
stringBufferSQL.append(" ,[noteTime] datetime ");
stringBufferSQL.append(" ,[noteInfo] ntext ");
stringBufferSQL.append(" ) ");
/**
* 执行SQL语句
*/
db.execSQL(stringBufferSQL.toString());
}
/**
* 当数据库版本变更的时候执行 数据库变更的时候使用
*/
@Override
public void onUpgrade ( SQLiteDatabase db, int oldVersion, int newVersion)
{
// TODO Auto-generated method stub
}
}
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class CreateNoteDB extends SQLiteOpenHelper
{
/**
* 构造方法
*
* @param context
* 上下文
* @param name
* 数据库名称
* @param factory
* 数据库工厂
* @param version
* 版本
*/
public CreateNoteDB (Context context, String databaseName, int version)
{
super(context, databaseName, null, version);
// TODO Auto-generated constructor stub
}
public CreateNoteDB (Context context)
{
super(context, "notedb", null, 1);
// TODO Auto-generated constructor stub
}
/**
* 第一没有数据库创建的时候执行,以后均不执行 创建数据库、数据表和初始化数据库使用
*/
@Override
public void onCreate ( SQLiteDatabase db)
{
/**
* 创建数据表note
*/
StringBuffer stringBufferSQL = new StringBuffer();
stringBufferSQL.append(" Create TABLE note( ");
stringBufferSQL.append(" [noteId] integer PRIMARY KEY AUTOINCREMENT ");
stringBufferSQL.append(" ,[noteTitle] nvarchar(500) ");
stringBufferSQL.append(" ,[noteTime] datetime ");
stringBufferSQL.append(" ,[noteInfo] ntext ");
stringBufferSQL.append(" ) ");
/**
* 执行SQL语句
*/
db.execSQL(stringBufferSQL.toString());
}
/**
* 当数据库版本变更的时候执行 数据库变更的时候使用
*/
@Override
public void onUpgrade ( SQLiteDatabase db, int oldVersion, int newVersion)
{
// TODO Auto-generated method stub
}
}
二、数据库操作查询所有
这里以MyNote便签对象为例,即在note数据表中查询出所有MyNote便签对象,mynotes为便签集合,note为数据库表
ArrayList<MyNote> mynotes = new ArrayList<MyNote>(); //便签MyNote对象集合
/**
* 从数据库中查询到所有的便签
*/
private ArrayList<MyNote> selectByAllNote ()
{
Log.i("lhy", "NoteWorkMainAct:onCreate从数据库中查询所有的便签到主界面显示---");
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
// 开启事务
sqLiteDatabase.beginTransaction();
notes.clear();
try
{
// 查询所有便签itme数据
Cursor cursor = sqLiteDatabase.query(false, "note", new String[]
{ "noteId", "noteTitle", "noteTime", "noteInfo" }, null, null, null, null, "noteId desc", null);
while (cursor.moveToNext())
{
// 查询到数据后
// 获取便签数据给便签对象
MyNote mynote = new MyNote();
mynote.noteId = cursor.getInt(cursor.getColumnIndex("noteId"));
mynote.noteTitle = cursor.getString(cursor.getColumnIndex("noteTitle"));
mynote.noteTime = new SimpleDateFormat("yyyy-MM-dd hh:mm").parse(cursor.getString(cursor.getColumnIndex("noteTime")));
mynote.noteInfo = cursor.getString(cursor.getColumnIndex("noteInfo"));
// 添加到便签集合
notes.add(mynote);
}
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
// 关闭游标
cursor.close();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
// 关闭事务
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
return mynotes;
}
/**
* 从数据库中查询到所有的便签
*/
private ArrayList<MyNote> selectByAllNote ()
{
Log.i("lhy", "NoteWorkMainAct:onCreate从数据库中查询所有的便签到主界面显示---");
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
// 开启事务
sqLiteDatabase.beginTransaction();
notes.clear();
try
{
// 查询所有便签itme数据
Cursor cursor = sqLiteDatabase.query(false, "note", new String[]
{ "noteId", "noteTitle", "noteTime", "noteInfo" }, null, null, null, null, "noteId desc", null);
while (cursor.moveToNext())
{
// 查询到数据后
// 获取便签数据给便签对象
MyNote mynote = new MyNote();
mynote.noteId = cursor.getInt(cursor.getColumnIndex("noteId"));
mynote.noteTitle = cursor.getString(cursor.getColumnIndex("noteTitle"));
mynote.noteTime = new SimpleDateFormat("yyyy-MM-dd hh:mm").parse(cursor.getString(cursor.getColumnIndex("noteTime")));
mynote.noteInfo = cursor.getString(cursor.getColumnIndex("noteInfo"));
// 添加到便签集合
notes.add(mynote);
}
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
// 关闭游标
cursor.close();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
// 关闭事务
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
return mynotes;
}
三、数据库操作添加
/**
* 便签添加
*/
public void noteAdd ( MyNote mynote)
{
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
sqLiteDatabase.beginTransaction();
try
{
Log.i("lhy", "NoteWorkMainAct:noteAdd进入添加方法【数据库操作】");
ContentValues values = new ContentValues();
// 这里没有用title,所以这里永远为空
values.put("noteTitle", "");
values.put("noteInfo", mynote.noteInfo);
values.put("noteTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
sqLiteDatabase.insert("note", null, values);
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
Log.i("lhy", "NoteWorkMainAct:noteAdd添加新便签到数据库成功!!");
// 因为这里是添加,那么其ID是自动增长的,在界面添加的时候没有Id,所以在加入数据库后要拿出其id重回设置到集合当中去
// 查询出新ID
Cursor cursor = sqLiteDatabase.rawQuery(" select last_insert_rowid() from note", null);
if (cursor.moveToFirst())
{
Log.i("lhy", "NoteWorkMainAct:查询出添加便签对象添加进入数据后的id,设置到便签对象中去");
mynote.noteId = cursor.getInt(0);
Log.i("lhy", "NoteWorkMainAct此时便签对象的id【同时也是其在数据库的id】:" + mynote.noteId);
}
// 添加集合
mynotes.add(0, mynote);
Log.i("lhy", "NoteWorkMainAct:noteAdd添加新便签到列表集合成功!!");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
}
* 便签添加
*/
public void noteAdd ( MyNote mynote)
{
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
sqLiteDatabase.beginTransaction();
try
{
Log.i("lhy", "NoteWorkMainAct:noteAdd进入添加方法【数据库操作】");
ContentValues values = new ContentValues();
// 这里没有用title,所以这里永远为空
values.put("noteTitle", "");
values.put("noteInfo", mynote.noteInfo);
values.put("noteTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
sqLiteDatabase.insert("note", null, values);
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
Log.i("lhy", "NoteWorkMainAct:noteAdd添加新便签到数据库成功!!");
// 因为这里是添加,那么其ID是自动增长的,在界面添加的时候没有Id,所以在加入数据库后要拿出其id重回设置到集合当中去
// 查询出新ID
Cursor cursor = sqLiteDatabase.rawQuery(" select last_insert_rowid() from note", null);
if (cursor.moveToFirst())
{
Log.i("lhy", "NoteWorkMainAct:查询出添加便签对象添加进入数据后的id,设置到便签对象中去");
mynote.noteId = cursor.getInt(0);
Log.i("lhy", "NoteWorkMainAct此时便签对象的id【同时也是其在数据库的id】:" + mynote.noteId);
}
// 添加集合
mynotes.add(0, mynote);
Log.i("lhy", "NoteWorkMainAct:noteAdd添加新便签到列表集合成功!!");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
}
四、数据库操作修改
updateIndex = position; 修改之前,在进入修改界面之前,首先记住你要修改的对象的在集合的下标,以便修改后用新的对象替换
/*** 便签修改
*/
public void noteEdit ( MyNote mynote)
{
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
sqLiteDatabase.beginTransaction();
try
{
Log.i("lhy", "NoteWorkMainAct:noteEdit进入修改方法,操作数据库");
ContentValues values = new ContentValues();
// 放弃掉了noteTitle,所以这里永远为空
values.put("noteTitle", "");
values.put("noteInfo", mynote.noteInfo);
sqLiteDatabase.update("note", values, "noteId=", new String[]
{ mynote.noteId + "" });
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
Log.i("lhy", "NoteWorkMainAct:noteEdit修改便签到数据库成功!!");
// 替换集合
Log.i("lhy", "NoteWorkMainAct:noteEdit【替换记录好的待修改便签对象在列表集合下标updateIndex的便签对象】");
Log.i("lhy", "NoteWorkMainAct:noteEdit修改便签到列表集合成功!!");
notes.set(updateIndex, mynote);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
}
五、数据库操作删除
这里要注意删除集合里面便签的方法
/**
* 便签删除
*/
public void noteDel ()
{
Log.i("lhy", "NoteWorkMainAct:noteDel进入删除方法,数据库操作");
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
// 开启事务
sqLiteDatabase.beginTransaction();
try
{
Log.i("lhy", "NoteWorkMainAct:noteDel循环找出在列表集合中选中了的便签对象获取id,利用id删除该数据");
for ( int i = 0; i < notes.size(); i++)
{
if (notes.get(i).isCheck)
{
// 利用对象ID删除数据库数据
sqLiteDatabase.delete("note", "noteId=", new String[]
{ String.valueOf(notes.get(i).noteId) });
}
}
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
Log.i("lhy", "NoteWorkMainAct:noteDel数据库数据删除成功!!");
Log.i("lhy", "NoteWorkMainAct:noteDel,Iterator迭代出在列表集合中选中了的便签对象,直接删除该对象");
// 删除集合
Iterator<MyNote> iterator = notes.iterator();
while (iterator.hasNext())
{
if (iterator.next().isCheck)
{
iterator.remove();
}
}
Log.i("lhy", "NoteWorkMainAct:noteDel集合数据删除成功!!");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
}
* 便签删除
*/
public void noteDel ()
{
Log.i("lhy", "NoteWorkMainAct:noteDel进入删除方法,数据库操作");
SQLiteDatabase sqLiteDatabase = createNoteDB.getReadableDatabase();
// 开启事务
sqLiteDatabase.beginTransaction();
try
{
Log.i("lhy", "NoteWorkMainAct:noteDel循环找出在列表集合中选中了的便签对象获取id,利用id删除该数据");
for ( int i = 0; i < notes.size(); i++)
{
if (notes.get(i).isCheck)
{
// 利用对象ID删除数据库数据
sqLiteDatabase.delete("note", "noteId=", new String[]
{ String.valueOf(notes.get(i).noteId) });
}
}
// 提交事务
sqLiteDatabase.setTransactionSuccessful();
Log.i("lhy", "NoteWorkMainAct:noteDel数据库数据删除成功!!");
Log.i("lhy", "NoteWorkMainAct:noteDel,Iterator迭代出在列表集合中选中了的便签对象,直接删除该对象");
// 删除集合
Iterator<MyNote> iterator = notes.iterator();
while (iterator.hasNext())
{
if (iterator.next().isCheck)
{
iterator.remove();
}
}
Log.i("lhy", "NoteWorkMainAct:noteDel集合数据删除成功!!");
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
}