数据存储之SQLite与LitePal<一>
来源:互联网 发布:免费横道图绘制软件 编辑:程序博客网 时间:2024/05/21 15:15
SQLite
一.简意:
(1)SQLite:是一款轻量级关系数据库,占用资源少,运行速度快
(2)适用于大量复杂关系数据(file,sp此时不太适合)
二,用法:
(1)创建一个类 继承SQLiteOpenHelper,重写onCreate()和onUpgrade()方法
onCreate()方法:创建表
onUpgrade():版本更新
如下:
public class MyDatabaseHelper extends SQLiteOpenHelper { private Context mContext; //创表语句 public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " +"name text)"; //创表语句2 public static final String CREATE_CATEGORY = "create table Category (" + "id integer primary key autoincrement, " + "category_name text, " + "category_code integer)"; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); mContext = context; } /** * 创建表 * @param db */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); db.execSQL(CREATE_CATEGORY); Toast.makeText(mContext , "Create successed" , Toast.LENGTH_SHORT).show(); } /** * 更新数据表 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists Book"); db.execSQL("drop table if exists Category"); onCreate(db); }}
布局,定义简单的几个按钮:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/create_database" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Create database"/> <Button android:id="@+id/add" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="add data"/> <Button android:id="@+id/delete" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="delete data"/> <Button android:id="@+id/update" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="update data"/> <Button android:id="@+id/retrieve" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="retrieve data"/></LinearLayout>
在Activity中去执行操作,
四个方法的运用说明在例子中
public class DataBaseActivity extends AppCompatActivity { //创建数据库 @ViewInject(R.id.create_database) private Button mBtnCreate; //增加数据 @ViewInject(R.id.add) private Button mBtnAdd; //更新数据 @ViewInject(R.id.update) private Button mBtnUpdate; //删除数据 @ViewInject(R.id.delete) private Button mBtnDelete; //查询数据 @ViewInject(R.id.retrieve) private Button mBtnRetrieve; //MyDatabaseHelper对象 private MyDatabaseHelper dbHelper; //SQLiteDatabase对象 private SQLiteDatabase db; private static final String TAG = "DataBaseActivity"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_database); ViewUtils.inject(this); //初始化:4个参数:上下文,数据库名字,CursorFactory对象,版本号; //当需要更新数据库版本时可以+1 dbHelper = new MyDatabaseHelper(this , "BookStore.db" , null ,1); db = dbHelper.getWritableDatabase(); } /** * 创建数据库表 * @param view */ @OnClick(R.id.create_database) public void CreateDatabase(View view){ //创建或打开一个现有的数据库 //getReadableDatabase():当磁盘空间满时,将以只读方式去打开 //getWritableDatabase():当磁盘已满时,抛出异常 dbHelper.getWritableDatabase(); } /** * 增加数据:public long insert(String table, String nullColumnHack, ContentValues values) * table:表名 * nullColunmHack:用于在未指定添加数据时,给某些空列自动赋值null * values:ContentValues对象,添加相应数据 * @param view */ @OnClick(R.id.add) public void addDate(View view){ ContentValues values = new ContentValues(); // values.put("name" , "第一行代码"); values.put("author" , "郭霖"); values.put("pages" , 570); values.put("price" , 79.00); db.insert("Book" , null , values); values.clear(); // values.put("name" , "编译原理"); values.put("author" ,"MouMou"); values.put("pages" , 500); values.put("price" , 66.00); db.insert("Book" , null , values); } /** * 更新数据:4个参数 * 假如突然打折,更新某个商品价格 * public int update(String table, ContentValues values, String whereClause, String[] whereArgs) * whereClause:约束某些行 * whereArgs:约束某些行的更新数据 * @param view */ @OnClick(R.id.update) public void updateData(View view){ ContentValues values = new ContentValues(); values.put("price" , 58.99); db.update("Book" , values , "name = ?",new String[]{"编译原理"}); } /** * 删除数据:4个参数 * public int delete(String table, String whereClause, String[] whereArgs) * 与update类似 * @param view */ @OnClick(R.id.delete) public void deleteData(View view){ db.delete("Book" , "price < ?" ,new String[]{"60"}); } /** * 查询数据:7个参数 * public Cursor query(String table, String[] columns, String selection, * String[] selectionArgs, String groupBy, String having, * String orderBy) * table--查询的表名,columns--指定要查询的列名(select column1,column2...) * selection ---- 指定where的约束条件(where column = value) * selectionArgs---为where中的占位符提供具体值 * groupBy --- 指定需要group by 的列(group by column) * having -- 对group by后的结果进行约束(having column = value) * orderBy 指定查询结果的排序方式(order by column1,column2,,,) * @param view */ @OnClick(R.id.retrieve) public void retrieveData(View view){ Cursor cursor = db.query("Book" , null ,null, null ,null , null ,null); if(cursor.moveToFirst()){ do{ String name = cursor.getString(cursor.getColumnIndex("name")); String author = cursor.getString(cursor.getColumnIndex("author")); int pages = cursor.getInt(cursor.getColumnIndex("pages")); double price = cursor.getDouble(cursor.getColumnIndex("price")); Log.d(TAG , "book name is " + name); Log.d(TAG , "book author is " + author); Log.d(TAG , "book pages is " + pages); Log.d(TAG , "book price is " + price); }while (cursor.moveToNext()); }//if cursor.close(); }}
记得自己去看SQLiteDatabase和SQLiteOpenHelper的源码略....
LitePal:
这是github上的开源库,稳定性强,操作简单,效率高等等
运用:
(1)在build.gradle(app)添加依赖:
compile 'org.litepal.android:core:1.5.1'(2)在app/src/main下新建一个路径命名:assets,然后在该目录下创建xml文件litepal.xml
内容如下:
<?xml version="1.0" encoding="utf-8" ?><litepal><!--数据库名字.db--><dbname value = "BookStore"/><!--数据库版本,更新时改动版本--><version value = "1"/><!--这是自己新建的用于数据库存放表数据类型--><list> <mapping class = "testsdcard.cai.maiyu.mdaima06_01.bean.Book"/></list></litepal>
无疑是指定数据库名字,版本,还有一个后面你自己创建的数据表类型(可以先不添加)
(3)在manifest中去配置:
在<application
android:name="org.litepal.LitePalApplication".....
>
......
</application>
若是用自己的application也一样,记得在自己定义的application的onCreate方法中初始化:LitePal 。初始化(this);
(4)创建数据表类:继承DataSupport
public class Book extends DataSupport{ private int id; //id private String name; //书名 private String author; //作者 private int pages; //页数 private double price; //价格 // private String press; //出版社// public String getPress() {// return press;// }//// public void setPress(String press) {// this.press = press;// } 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 String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; }}
(5)Activity中使用:
public class TestLitePalActivity extends AppCompatActivity { //创建数据库 @ViewInject(R.id.create_database) private Button mBtnCreate; //增加数据 @ViewInject(R.id.add) private Button mBtnAdd; //更新数据 @ViewInject(R.id.update) private Button mBtnUpdate; //删除数据 @ViewInject(R.id.delete) private Button mBtnDelete; //查询数据 @ViewInject(R.id.retrieve) private Button mBtnRetrieve; private static final String TAG = "TestLitePalActivity"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_database); ViewUtils.inject(this); } //创建数据库 @OnClick(R.id.create_database) public void createDatabase(View view){ //获取数据库 LitePal.getDatabase(); } /** * 添加数据 * @param view */ @OnClick(R.id.add) public void addData(View view){ Book book = new Book(); book.setName("大话数据结构"); book.setAuthor("程杰"); book.setPages(516); book.setPrice(43.00); //book.setPress("Unknow");//增加出版社 book.save(); } /** * 删除数据 * @param view */ @OnClick(R.id.delete) public void deleteData(View view){ DataSupport.deleteAll(Book.class , "price < ?" , "60"); } /** * 更新数据 * @param view */ @OnClick(R.id.update) public void updateData(View view){ Book book = new Book(); book.setPrice(38.50); book.updateAll("name = ? and author = ?" , "大话数据结构" , "程杰");//更新数据为默认值// book.setToDefault("pages");// book.updateAll(); } /** * 查询数据 * @param view */ @OnClick(R.id.retrieve) public void retrieveData(View view){ List<Book> books = DataSupport.findAll(Book.class); for(Book book : books){ Log.d(TAG , "book name is " + book.getName()); Log.d(TAG , "book author is " + book.getAuthor()); Log.d(TAG , "book pages is " + book.getPages()); Log.d(TAG , "book price is " + book.getPrice()); } //(2)添加限制:select--选定哪几列 //where--约束条件, order--结果排序 ,limit---结果的数量 //offset---查询结果的便宜了offset(1)代表查询表中的从第2条开始// List<Book> books = DataSupport.select("name" , "author" ,"pages")// .where("pages > ?" , "600")// .order("pages")// .limit(10)// .offset(10)// .find(Book.class); //(3)用原生数据库语句查询// Cursor cursor = DataSupport.findBySQL("select * from Book where pages > ?" +// " and price < ?" ,"700" ,"60"); }}
从代码中,对比SQLite,发现更简单,更方便,是不是呢?
(1)创建,更新,删除,增加,是不是更方便呢,
(2)而版本更新,只需要在litepal.xml中改版本号
(3)查询,之前要7个参数,现在利用DataSupport.findXXX就可以了
(4)记得创建数据表类要继承DataSupport类
(5)查询还支持多种查询,原生SQL语句查询,
。。。最后去看一下源码
0 0
- 数据存储之SQLite与LitePal<一>
- Android数据存储之数据库(SQLite和litepal)
- 数据存储之-SQLite数据库一
- 数据存储之 SQLite 数据库操作(一)
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- 【Android 开发】:数据存储之 SQLite 数据库操作(一)
- Android数据存储之SQLite Database(一)
- 第6章 数据存储之使用LitePal操作数据库
- Android开发之数据存储与访问(3)-SQLite数据库
- Android开发之数据存储与访问(4)-SQLite数据库
- Android数据存储与IO之二 SQLite数据库
- Android数据存储与IO之四(SQLite)
- 数据存储与访问之——初见SQLite数据库
- android数据存储(Preferences,File,SQLite,开源数据库 LitePal)
- Android数据库(SQLite)框架(4)——使用LitePal存储数据
- 【Android】数据存储之SQLite
- android数据存储之SQLite
- Android数据存储之SQLite
- 详解匿名内部类
- 面向对象的陷阱——构造器的陷阱
- ANDROID LOG信息分析
- NYOJ123 士兵杀敌(四)(树状数组,插线问点)
- 获取屏幕旋转事件
- 数据存储之SQLite与LitePal<一>
- 4724: [POI2017]Podzielno
- 一个简单的爬虫开发
- Differences and Similarities Between Index Coalesce and Shrink Space
- linux中使用apt-get安装的文件位置
- mybatis动态执行自定义sql
- Android流畅性优化必备基础知识点---线程调度方式
- hdu 2018 母牛的故事
- HDU 4507 吉哥系列故事――恨7不成妻 (平方拆解 + *数位DP 总结)