ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Android——数据存储(三)(SQLite存储)

2020-07-16 18:34:03  阅读:320  来源: 互联网

标签:getWritableDatabase 存储 String db SQLite cursor Android null SQLiteDatabase


SQLite存储

 

SQLite是Android系统内置的数据库,是一款轻量级的关系型数据库,支持标准的SQL语法,数据库文件存放在/data/data/<package name>/database/目录下。

 

Android提供了一个帮助类SQLiteOpenHelper来简单的对数据库进行创建和升级,SQLiteOpenHelper是抽象类,需要重写两个抽象方法:onCreate()和onUpgrade(),分别实现创建和升级数据库。

  •  onCreate(SQLiteDatabase db):第一次创建数据库时调用。
  •  onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion):当数据库需要升级时调用。

 

SQLiteOpenHelper中还有两个实例方法用于创建或打开一个数据库(数据库存在就直接打开,不存在就创建一个新数据库),并返回一个可对数据库进行读写操作的对象(SQLiteDatabase):getReadableDatabase()和getWritableDatabase()。

添加数据两种方式(行):

 

(1)获取SQLiteDatabase对象,然后使用ContentValues来对要添加的数据进行组装:put(),然后调用SQLiteDatabase对象的insert()方法将ContentValues数据添加到数据库表中:

    

SQLiteDatabase db = dbhelper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("name","The Da Vinci Code");

values.put("author","Dan Brown");

values.put("pages",454);

values.put("price",16.96);

db.insert("Book",null,values);

 

  put()方法的第一个参数是要插入数据的索引,第二个参数是要插入的数据。

  Insert()方法的第一个参数是要插入的表的名字,第二个参数用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL,第三个参数是一个ContentValues对象。

(2)获取SQLiteDatabase对象,调用execSQL()方法执行SQL插入语句:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

db.execSQL(“insert into Book (name,author,pages,price) values(?,?,?,?)”,new String[]{“The Da Vinci Code”,” Dan Brown”,” 454”,” 16.96”});

 

更新数据的两种方式:

 

(1)获取SQLiteDatabase对象,使用ContentValues来对要更新的数据进行组装,然后调用SQLiteDatabase对象的update()方法将ContentValues数据更新到数据库表中:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("price",10.99);

db.update("Book",values,"name = ?",new String[]{"The Da Vinci Code"});

 

update()方法的第一个参数是要插入的表的名字,第二个参数是ContentValues对象,要把更新的数据在这里组装进去,第三、四个参数用于约束更新某一行或某几行的数据,不指定的话默认就是更新所有行。

(2) 获取SQLiteDatabase对象,调用execSQL()方法执行SQL更新语句:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

db.execSQL(“update Book set price = ? where name = ?”,new String[]{“10.99”,” The Da Vinci Code”});

 

删除数据的两种方式:

 

(1)获取SQLiteDatabase对象,调用delete()方法进行删除操作:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

db.delete("Book","pages > ?",new String[]{"500"});

 

delete()方法第一个参数是要插入的表的名字,第二、三个参数是用于约束删除某一行或某几行的数据,不指定的话就是默认删除所有行。

 

(2)获取SQLiteDatabase对象,调用execSQL()方法执行SQL删除语句:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

Db.execSQL(“delete from Book where pages > ?”,new String[]{“500”});

 

查询数据的两种方式:

(1)获取SQLiteDatabase对象,调用query()方法进行查询(这里只详细讲解七个参数的):

 

query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

query()方法参数

对应SQL部分

描述

table

From table_name

指定查询的表名

columns

Select column1,column2

指定返回查询结果的列名

selection

Where column = value

指定where的约束条件

selectionArgs

-

为where中的占位符(?)提供具体的值

groupBy

Group by column

指定需要group by的列

having

Having column = value

对group by后的结果进一步约束

orderBy

Order by column1,column2

指定查询结果的排序方式

 

返回一个Cursor对象,查询的所有数据将从这个对象中取出。

查询书本页数大于400的书的信息:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

Cursor cursor = db.query("Book",new String[]{"name","author","pages","price"},"pages > ?",new String[]{"400"},null,null,null);

 

查询所有书的信息:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

Cursor cursor = db.query("Book",null,null,null,null,null,null);

 

(2)获取SQLiteDatabase对象,调用rawQuery()方法进行查询:

rawQuery (String sql, String[] selectionArgs)

 

查询书本页数大于400的书的信息:

 

SQLiteDatabase db = dbhelper.getWritableDatabase();

Cursor cursor = db.rawQuery("select * from Book where pages > ?",new String[]{"400"});

 

查询所有书的信息:

SQLiteDatabase db = dbhelper.getWritableDatabase();

Cursor cursor = db.rawQuery("select * from Book ",null);

 

提取查询到的数据,调用Cursor对象的moveToFirst()方法将数据的指针移动到第一行的位置,然后进入到循环中,遍历查询到的每一行数据,getColumnIndex()用于获取某一列在表中对应的位置索引。然后将这个索引传入到相应的取值方法中就可以提取出数据了,每遍历一次就调用moveToNext()方法将数据指针移动到下一行:

 

if (cursor.moveToFirst()){
    do {
        //遍历cursor对象,取出数据打印
         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("MainActivity","book name is "+name);
        Log.d("MainActivity","book author is "+author);
        Log.d("MainActivity","book pages is "+pages);
        Log.d("MainActivity","book price is "+price);
    }while (cursor.moveToNext());
}
cursor.close();

 

 

标签:getWritableDatabase,存储,String,db,SQLite,cursor,Android,null,SQLiteDatabase
来源: https://www.cnblogs.com/mulin1999/p/13324265.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有