当前位置:数据库 > SQLite >>

[Android开发学习05]Android中SQLite数据库操作

 


一.基础知识:

1.SQLite的数据类型:

NULL:空值。
INTEGER:带符号的整型,具体取决有存入数字的范围大小。
REAL:浮点数字,存储为8-byte IEEE浮点数。
TEXT:字符串文本。
BLOB:二进制对象。

smallint 16位元的整数。
interger 32位元的整数。
decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float  32位元的实数。
double  64位元的实数。
char(n)  n 长度的字串,n不能超过 254。
varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。
vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000
date  包含了 年份、月份、日期。
time  包含了 小时、分钟、秒。
timestamp 包含了 年、月、日、时、分、秒、千分之一秒。
datetime 包含日期时间格式,必须写成'2010-08-05'不能写为'2010-8-5',否则在读取时会产生错误!

 

2.SQLite的基本操作:

①SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。


[java]
// 创建数据库  
public void onCreate(SQLiteDatabase db) 
// 更新数据库  
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
// 打开数据库  
public void onOpen(SQLiteDatabase db) 
// 得到一个可读SQLiteDatabase对象  
public synchronized SQLiteDatabase getReadableDatabase() 
// 得到一个可写SQLiteDatabase对象  
public synchronized SQLiteDatabase getWriteableDatabase() 

// 创建数据库
public void onCreate(SQLiteDatabase db)
// 更新数据库
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
// 打开数据库
public void onOpen(SQLiteDatabase db)
// 得到一个可读SQLiteDatabase对象
public synchronized SQLiteDatabase getReadableDatabase()
// 得到一个可写SQLiteDatabase对象
public synchronized SQLiteDatabase getWriteableDatabase()
②SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。
[java]
execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; 
rawQuery()方法可以执行select语句。 
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) 
 
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 
columns:要查询出来的列名。相当于select语句select关键字后面的部分。 
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” 
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 
groupBy:相当于select语句group by关键字后面的部分 
having:相当于select语句having关键字后面的部分 
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; 
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。  
 
//还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些:  
public long insert( 
    String table,       // 待插入的表名  
    String nullColumnHack,  // 通常设置为null  
    ContentValues values        // 待插入的数据  

public int update( 
    String table,       // 待更新的表名  
    ContentValues values,   // 待更新的内容  
    String whereClause,     // 选择通过哪个字段来更新  
    String [] whereArgs     // 为whereClause字段要查询的值  

execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句;
rawQuery()方法可以执行select语句。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)

table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。

//还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些:
public long insert(
 String table,   // 待插入的表名
 String nullColumnHack,  // 通常设置为null
 ContentValues values  // 待插入的数据
)
public int update(
 String table,   // 待更新的表名
 ContentValues values, // 待更新的内容
 String whereClause,  // 选择通过哪个字段来更新
 String [] whereArgs  // 为whereClause字段要查询的值
)
③下面为网上常用的访问数据库的一般流程:
[java]
public void onClick(View v) { 
    DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); 
    SQLiteDatabase db = databaseHelper.getWritableDatabase(); 
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});   
    db.close();  
}; 

public void onClick(View v) {
 DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this);
 SQLiteDatabase db = databaseHelper.getWritableDatabase();
 db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); 
 db.close();
};

 


二.编程实现:


1. 界面编辑(res\layout\main.xml):

[java]
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button  
        android:text="创建数据库"  
        android:id="@+id/ButtonCreate"  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
    </Button>                                 <!--添加一个Button控件--> 
        <Button  
        android:text="增加数据"  
      &nb

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,