您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 安卓开发 >> 正文

Android中SQLite数据库操作

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  一.基础知识:

  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. 界面编辑(reslayoutmain.xml):

  [java]

  

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  >

  

  android:text="创建数据库"

  android:id="@+id/ButtonCreate"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="增加数据"

  android:id="@+id/ButtonInsert"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="更新数据"

  android:id="@+id/ButtonUpdate"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  android:text="查询数据"

  android:id="@+id/ButtonQuery"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content">

  

  

  

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_par