android 数据库操作
2016-11-23 08:42
302 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
Android的数据库是用Sqlite3,关于增删改查的语句,其实与别的数据是区别并的大,网上也有很多,所以就不说这个问题。
这次主要是写写我在项目中用到数据库编码习惯。
以增删改查Book为例,先是结构:
跟着看Book类:
[java]
view plain
copy
print?
package com.lxb.dbdemo.model;
public class Book {
private int id; // ID
private String name; // 名称
private float price; // 价格
private boolean canSale; // 是否可售
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public boolean isCanSale() {
return canSale;
}
public void setCanSale(boolean canSale) {
this.canSale = canSale;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", price=" + price
+ ", canSale=" + canSale + "]";
}
}
然后是比较重要的继承自SQLiteOpenHelper的类,这里主要是建表及升级数据库操作(升级数据库只要把数据库版本号往上提就行):
[java]
view plain
copy
print?
package com.lxb.dbdemo.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BookDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "book_db"; // 数据库名称
private static final int DATABASE_VERSION = 1; // 数据库版本
public static final String BOOK_TABLE = "book_table"; // 书表名
public static final String BOOK_ID = "book_id"; // 书ID
public static final String BOOK_NAME = "book_name"; // 书名
public static final String BOOK_PRICE = "book_price"; // 书价格
public static final String BOOK_CAN_SALE = "book_cansale"; // 是否可售
public BookDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 建表操作
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE IF NOT EXISTS " + BOOK_TABLE + "(");
sb.append(BOOK_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,");
sb.append(BOOK_NAME + " VARCHAR(100),");
sb.append(BOOK_PRICE + " VARCHAR(100),");
sb.append(BOOK_CAN_SALE + " INTEGER)");
db.execSQL(sb.toString());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + BOOK_TABLE);
onCreate(db);
}
}
接下来是一个Dao类,实现了增删改查的方法等:
[java]
view plain
copy
print?
package com.lxb.dbdemo.db.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.lxb.dbdemo.db.BookDBHelper;
import com.lxb.dbdemo.model.Book;
public class BookDao {
private BookDBHelper helper;
private SQLiteDatabase db; // 数据库对象
public BookDao(Context context) {
helper = new BookDBHelper(context);
}
/**
* 打开数据库
*/
public void open() {
if(db == null || !db.isOpen()) {
db = helper.getWritableDatabase();
}
}
/**
* 关闭数据库
*/
public void close() {
db.close();
db = null;
}
/**
* 检查数据库是否可用
* @return
*/
private boolean checkDb() {
open();
if(db != null && db.isOpen()) {
return true;
}
return false;
}
/**
* 保存
* @param book
* @return
*/
public int saveBook(Book book) {
ContentValues values = new ContentValues();
values.put(BookDBHelper.BOOK_NAME, book.getName());
values.put(BookDBHelper.BOOK_PRICE, book.getPrice());
values.put(BookDBHelper.BOOK_CAN_SALE, book.isCanSale());
if(checkDb()) {
long id = db.insert(BookDBHelper.BOOK_TABLE, BookDBHelper.BOOK_ID, values);
return Integer.parseInt(id + "");
}
return -1;
}
/**
* 根据ID删除
* @param id
* @return
*/
public int deleteBook(int id) {
if(checkDb()) {
int result = db.delete(BookDBHelper.BOOK_TABLE, BookDBHelper.BOOK_ID + "=?", new String[]{id + ""});
return result;
}
return -1;
}
/**
* 删除
* @param book
* @return
*/
public int deleteBook(Book book) {
if(book != null) {
deleteBook(book.getId());
}
return -1;
}
/**
* 更新
* @param book
* @return
*/
public int updateBook(Book book) {
if(book != null) {
if(checkDb()) {
ContentValues values = new ContentValues();
values.put(BookDBHelper.BOOK_NAME, book.getName());
values.put(BookDBHelper.BOOK_PRICE, book.getPrice());
values.put(BookDBHelper.BOOK_CAN_SALE, book.isCanSale());
return db.update(BookDBHelper.BOOK_TABLE, values,
BookDBHelper.BOOK_ID + "=?", new String[]{book.getId() + ""});
}
}
return -1;
}
/**
* 根据ID查找
* @param id
* @return
*/
public Book getBook(int id) {
if(checkDb()) {
Cursor cursor = db.query(BookDBHelper.BOOK_TABLE,
null, BookDBHelper.BOOK_ID + "=?", new String[]{id + ""}, null, null, null);
Book book = null;
if(cursor != null && cursor.moveToFirst()) {
book = new Book();
book.setId(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_ID)));
book.setName(cursor.getString(cursor.getColumnIndex(BookDBHelper.BOOK_NAME)));
book.setPrice(cursor.getFloat(cursor.getColumnIndex(BookDBHelper.BOOK_PRICE)));
book.setCanSale(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_CAN_SALE))
== 1 ? true : false);
}
cursor.close();
return book;
}
return null;
}
/**
* 查找全部
* @return
*/
public List<Book> getAllBooks() {
if(checkDb()) {
List<Book> books = new ArrayList<Book>();
Cursor cursor = db.query(BookDBHelper.BOOK_TABLE, null, null, null, null, null, null);
if(cursor != null) {
while(cursor.moveToNext()) {
Book book = new Book();
book.setId(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_ID)));
book.setName(cursor.getString(cursor.getColumnIndex(BookDBHelper.BOOK_NAME)));
book.setPrice(cursor.getFloat(cursor.getColumnIndex(BookDBHelper.BOOK_PRICE)));
book.setCanSale(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_CAN_SALE))
== 1 ? true : false);
books.add(book);
}
}
cursor.close();
return books;
}
return null;
}
}
最后是使用的代码,以查为例:
[java]
view plain
copy
print?
BookDao bookDao = new BookDao(activity);
bookDao.open();
Book book = bookDao.getBook(1);
bookDao.close();
下面是Demo运行的截图:
最后是Demo的源码:
http://download.csdn.net/detail/shinay/4533586
Android的数据库是用Sqlite3,关于增删改查的语句,其实与别的数据是区别并的大,网上也有很多,所以就不说这个问题。
这次主要是写写我在项目中用到数据库编码习惯。
以增删改查Book为例,先是结构:
跟着看Book类:
[java]
view plain
copy
print?
package com.lxb.dbdemo.model;
public class Book {
private int id; // ID
private String name; // 名称
private float price; // 价格
private boolean canSale; // 是否可售
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public boolean isCanSale() {
return canSale;
}
public void setCanSale(boolean canSale) {
this.canSale = canSale;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", price=" + price
+ ", canSale=" + canSale + "]";
}
}
package com.lxb.dbdemo.model; public class Book { private int id; // ID private String name; // 名称 private float price; // 价格 private boolean canSale; // 是否可售 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public boolean isCanSale() { return canSale; } public void setCanSale(boolean canSale) { this.canSale = canSale; } @Override public String toString() { return "Book [id=" + id + ", name=" + name + ", price=" + price + ", canSale=" + canSale + "]"; } }
然后是比较重要的继承自SQLiteOpenHelper的类,这里主要是建表及升级数据库操作(升级数据库只要把数据库版本号往上提就行):
[java]
view plain
copy
print?
package com.lxb.dbdemo.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BookDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "book_db"; // 数据库名称
private static final int DATABASE_VERSION = 1; // 数据库版本
public static final String BOOK_TABLE = "book_table"; // 书表名
public static final String BOOK_ID = "book_id"; // 书ID
public static final String BOOK_NAME = "book_name"; // 书名
public static final String BOOK_PRICE = "book_price"; // 书价格
public static final String BOOK_CAN_SALE = "book_cansale"; // 是否可售
public BookDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 建表操作
StringBuilder sb = new StringBuilder();
sb.append("CREATE TABLE IF NOT EXISTS " + BOOK_TABLE + "(");
sb.append(BOOK_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,");
sb.append(BOOK_NAME + " VARCHAR(100),");
sb.append(BOOK_PRICE + " VARCHAR(100),");
sb.append(BOOK_CAN_SALE + " INTEGER)");
db.execSQL(sb.toString());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + BOOK_TABLE);
onCreate(db);
}
}
package com.lxb.dbdemo.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class BookDBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "book_db"; // 数据库名称 private static final int DATABASE_VERSION = 1; // 数据库版本 public static final String BOOK_TABLE = "book_table"; // 书表名 public static final String BOOK_ID = "book_id"; // 书ID public static final String BOOK_NAME = "book_name"; // 书名 public static final String BOOK_PRICE = "book_price"; // 书价格 public static final String BOOK_CAN_SALE = "book_cansale"; // 是否可售 public BookDBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 建表操作 StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE IF NOT EXISTS " + BOOK_TABLE + "("); sb.append(BOOK_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"); sb.append(BOOK_NAME + " VARCHAR(100),"); sb.append(BOOK_PRICE + " VARCHAR(100),"); sb.append(BOOK_CAN_SALE + " INTEGER)"); db.execSQL(sb.toString()); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + BOOK_TABLE); onCreate(db); } }
接下来是一个Dao类,实现了增删改查的方法等:
[java]
view plain
copy
print?
package com.lxb.dbdemo.db.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.lxb.dbdemo.db.BookDBHelper;
import com.lxb.dbdemo.model.Book;
public class BookDao {
private BookDBHelper helper;
private SQLiteDatabase db; // 数据库对象
public BookDao(Context context) {
helper = new BookDBHelper(context);
}
/**
* 打开数据库
*/
public void open() {
if(db == null || !db.isOpen()) {
db = helper.getWritableDatabase();
}
}
/**
* 关闭数据库
*/
public void close() {
db.close();
db = null;
}
/**
* 检查数据库是否可用
* @return
*/
private boolean checkDb() {
open();
if(db != null && db.isOpen()) {
return true;
}
return false;
}
/**
* 保存
* @param book
* @return
*/
public int saveBook(Book book) {
ContentValues values = new ContentValues();
values.put(BookDBHelper.BOOK_NAME, book.getName());
values.put(BookDBHelper.BOOK_PRICE, book.getPrice());
values.put(BookDBHelper.BOOK_CAN_SALE, book.isCanSale());
if(checkDb()) {
long id = db.insert(BookDBHelper.BOOK_TABLE, BookDBHelper.BOOK_ID, values);
return Integer.parseInt(id + "");
}
return -1;
}
/**
* 根据ID删除
* @param id
* @return
*/
public int deleteBook(int id) {
if(checkDb()) {
int result = db.delete(BookDBHelper.BOOK_TABLE, BookDBHelper.BOOK_ID + "=?", new String[]{id + ""});
return result;
}
return -1;
}
/**
* 删除
* @param book
* @return
*/
public int deleteBook(Book book) {
if(book != null) {
deleteBook(book.getId());
}
return -1;
}
/**
* 更新
* @param book
* @return
*/
public int updateBook(Book book) {
if(book != null) {
if(checkDb()) {
ContentValues values = new ContentValues();
values.put(BookDBHelper.BOOK_NAME, book.getName());
values.put(BookDBHelper.BOOK_PRICE, book.getPrice());
values.put(BookDBHelper.BOOK_CAN_SALE, book.isCanSale());
return db.update(BookDBHelper.BOOK_TABLE, values,
BookDBHelper.BOOK_ID + "=?", new String[]{book.getId() + ""});
}
}
return -1;
}
/**
* 根据ID查找
* @param id
* @return
*/
public Book getBook(int id) {
if(checkDb()) {
Cursor cursor = db.query(BookDBHelper.BOOK_TABLE,
null, BookDBHelper.BOOK_ID + "=?", new String[]{id + ""}, null, null, null);
Book book = null;
if(cursor != null && cursor.moveToFirst()) {
book = new Book();
book.setId(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_ID)));
book.setName(cursor.getString(cursor.getColumnIndex(BookDBHelper.BOOK_NAME)));
book.setPrice(cursor.getFloat(cursor.getColumnIndex(BookDBHelper.BOOK_PRICE)));
book.setCanSale(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_CAN_SALE))
== 1 ? true : false);
}
cursor.close();
return book;
}
return null;
}
/**
* 查找全部
* @return
*/
public List<Book> getAllBooks() {
if(checkDb()) {
List<Book> books = new ArrayList<Book>();
Cursor cursor = db.query(BookDBHelper.BOOK_TABLE, null, null, null, null, null, null);
if(cursor != null) {
while(cursor.moveToNext()) {
Book book = new Book();
book.setId(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_ID)));
book.setName(cursor.getString(cursor.getColumnIndex(BookDBHelper.BOOK_NAME)));
book.setPrice(cursor.getFloat(cursor.getColumnIndex(BookDBHelper.BOOK_PRICE)));
book.setCanSale(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_CAN_SALE))
== 1 ? true : false);
books.add(book);
}
}
cursor.close();
return books;
}
return null;
}
}
package com.lxb.dbdemo.db.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.lxb.dbdemo.db.BookDBHelper; import com.lxb.dbdemo.model.Book; public class BookDao { private BookDBHelper helper; private SQLiteDatabase db; // 数据库对象 public BookDao(Context context) { helper = new BookDBHelper(context); } /** * 打开数据库 */ public void open() { if(db == null || !db.isOpen()) { db = helper.getWritableDatabase(); } } /** * 关闭数据库 */ public void close() { db.close(); db = null; } /** * 检查数据库是否可用 * @return */ private boolean checkDb() { open(); if(db != null && db.isOpen()) { return true; } return false; } /** * 保存 * @param book * @return */ public int saveBook(Book book) { ContentValues values = new ContentValues(); values.put(BookDBHelper.BOOK_NAME, book.getName()); values.put(BookDBHelper.BOOK_PRICE, book.getPrice()); values.put(BookDBHelper.BOOK_CAN_SALE, book.isCanSale()); if(checkDb()) { long id = db.insert(BookDBHelper.BOOK_TABLE, BookDBHelper.BOOK_ID, values); return Integer.parseInt(id + ""); } return -1; } /** * 根据ID删除 * @param id * @return */ public int deleteBook(int id) { if(checkDb()) { int result = db.delete(BookDBHelper.BOOK_TABLE, BookDBHelper.BOOK_ID + "=?", new String[]{id + ""}); return result; } return -1; } /** * 删除 * @param book * @return */ public int deleteBook(Book book) { if(book != null) { deleteBook(book.getId()); } return -1; } /** * 更新 * @param book * @return */ public int updateBook(Book book) { if(book != null) { if(checkDb()) { ContentValues values = new ContentValues(); values.put(BookDBHelper.BOOK_NAME, book.getName()); values.put(BookDBHelper.BOOK_PRICE, book.getPrice()); values.put(BookDBHelper.BOOK_CAN_SALE, book.isCanSale()); return db.update(BookDBHelper.BOOK_TABLE, values, BookDBHelper.BOOK_ID + "=?", new String[]{book.getId() + ""}); } } return -1; } /** * 根据ID查找 * @param id * @return */ public Book getBook(int id) { if(checkDb()) { Cursor cursor = db.query(BookDBHelper.BOOK_TABLE, null, BookDBHelper.BOOK_ID + "=?", new String[]{id + ""}, null, null, null); Book book = null; if(cursor != null && cursor.moveToFirst()) { book = new Book(); book.setId(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_ID))); book.setName(cursor.getString(cursor.getColumnIndex(BookDBHelper.BOOK_NAME))); book.setPrice(cursor.getFloat(cursor.getColumnIndex(BookDBHelper.BOOK_PRICE))); book.setCanSale(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_CAN_SALE)) == 1 ? true : false); } cursor.close(); return book; } return null; } /** * 查找全部 * @return */ public List<Book> getAllBooks() { if(checkDb()) { List<Book> books = new ArrayList<Book>(); Cursor cursor = db.query(BookDBHelper.BOOK_TABLE, null, null, null, null, null, null); if(cursor != null) { while(cursor.moveToNext()) { Book book = new Book(); book.setId(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_ID))); book.setName(cursor.getString(cursor.getColumnIndex(BookDBHelper.BOOK_NAME))); book.setPrice(cursor.getFloat(cursor.getColumnIndex(BookDBHelper.BOOK_PRICE))); book.setCanSale(cursor.getInt(cursor.getColumnIndex(BookDBHelper.BOOK_CAN_SALE)) == 1 ? true : false); books.add(book); } } cursor.close(); return books; } return null; } }
最后是使用的代码,以查为例:
[java]
view plain
copy
print?
BookDao bookDao = new BookDao(activity);
bookDao.open();
Book book = bookDao.getBook(1);
bookDao.close();
BookDao bookDao = new BookDao(activity); bookDao.open(); Book book = bookDao.getBook(1); bookDao.close();
下面是Demo运行的截图:
最后是Demo的源码:
http://download.csdn.net/detail/shinay/4533586
相关文章推荐
- Android数据库操作总结
- Android开发中对数据库的操作
- Android数据库的批处理操作(以添加联系人为例)
- android adb数据库操作
- 快速上手Android数据库操作
- android数据库操作会出现Leak found,即出现泄漏问题解决
- 【转载】Using SQLite from Shell in Android(在shell 下使用sqlite命令操作数据库)
- android数据库事务操作详解
- Android数据库的批处理操作(以添加联系人为例)
- android SQLite数据库基本操作示例
- 【Android】SqLitOpenHelper操作数据库
- Android 中短信数据库的简单操作
- Android教程之SQlit数据库操作
- 快速上手Android数据库操作
- 数据库android操作
- android中的数据库操作
- Android数据库操作
- android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLITE ,CURSOR操作,CURSOR适配器,SQLITEHELPER,数据库设计模式
- Android演示操作数据库之二
- android中数据库操作简介