学习数据库SQLite的几点总结

一、SQLite 介绍

1、SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

2、QLite 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQLite。

3、SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。

4、JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。数据库存储在 data/< 项目文件夹 >/databases/ 下。

5、Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。

 二、SQLite 的使用

Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库的帮助类:

package com.chenchen.shujuku;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
/**
*此方法是数据库的构造函数,参数分别代表的是:上下文、数据库的名称、游标工厂(一般为null)、
*数据库的版本(一般从1开始)
*/
 public PersonSQLiteOpenHelper(Context context) {
  super(context, "person.db", null, 1);
  
 }
 @Override
/**
 * 数据库第一次被调用的时候被调用,一般是对这个数据库填充表和初始化数据
 */
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("create table person ( id integer primary key autoincrement,name varchar(20),number varchar(20))");
 }
/** 当数据库的版本跟新时调用,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数
*据库从旧的模型转变到新的模型。
*/
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
 }
}

在MainActivity中调用帮助类:

 package com.chenchen.shujuku;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(this);//此行代码执行后数据库还没有真正被创建
        SQLiteDatabase db= helper.getWritableDatabase();
   
    }
}

 

数据库的增删改查方法一:

 

 package com.yejun.shujuku.dao;
import java.util.List;
import android.R.bool;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.yejun.shujuku.PersonSQLiteOpenHelper;
public class PersonDao {
 private PersonSQLiteOpenHelper helper;
 public PersonDao(Context context){
  helper = new PersonSQLiteOpenHelper(context);
  
 }
/**
 * 增加一条记录到数据库
 * @param name
 * @param number
 */
 public void add(String name, String number){
  SQLiteDatabase db = helper.getWritableDatabase();//可写
  db.execSQL("insert into person(name,number) values (?,?)", new Object[]{name,number});//占位符
  db.close();//数据库使用完后一定记得要释放
 }
 
/**
 * 查询数据
 * @param name
 * @return
 */
 public boolean find(String name){
  SQLiteDatabase db = helper.getReadableDatabase();//可读
  Cursor cursor = db.rawQuery("select *from where name = ?", new String[]{name} );
  boolean result = cursor.moveToNext();
  cursor.close();//游标记得要释放
  db.close();
  return result;
 }
 
 /**
  * 跟新一条记录
  * @param name
  * @param number
  */
 
 public void update(String name,String newnumber){
  SQLiteDatabase db = helper.getWritableDatabase();
  db.execSQL("update person set number=? where name =?", new Object[] {newnumber,name });
  db.close();
 }
 
 /**
  * 删除一条记录
  * @param name
  */
 public void delete(String name){
  SQLiteDatabase db = helper.getWritableDatabase();
  db.execSQL("delete from person where name=?", new Object[]{name});
  db.close();
 }
 
}

数据库的增删改查方法二:

 package com.chenchen.shujuku.dao;
import java.util.List;
import android.R.bool;
import android.R.integer;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.inputmethodservice.Keyboard.Row;
import com.yejun.shujuku.PersonSQLiteOpenHelper;
public class PersonDao2 {
 private PersonSQLiteOpenHelper helper;
 public PersonDao2(Context context) {
  helper = new PersonSQLiteOpenHelper(context);
 }
 /**
  * * 增加一条记录到数据库
  * 
  * @param name
  * @param number
  * @return the row ID of the newly inserted row, or -1 if an error occurred
  */
 public long add(String name, String number) {
  SQLiteDatabase db = helper.getWritableDatabase();// 可写
  // db.execSQL("insert into person(name,number) values (?,?)", new
  // Object[]{name,number});
  ContentValues cv = new ContentValues();
  cv.put("name", name);
  cv.put("number", number);
  long id = db.insert("person", null, cv);
  db.close();
  return id;
 }
 /**
  * 查询数据
  * 
  * @param name
  * @return
  */
 public boolean find(String name) {
  SQLiteDatabase db = helper.getReadableDatabase();// 可读
  // Cursor cursor = db.rawQuery("select *from where name = ?",new String[] { name });
  Cursor cursor = db.query("person", null, "name=?",
    new String[] { name }, null, null, null);
  boolean result = cursor.moveToNext();
  cursor.close();
  db.close();
  return result;
 }
 /**
  * * 跟新一条记录
  * 
  * @param name
  * @param number
  * @return the number of rows affected
  */
 public int update(String name, String newnumber) {
  SQLiteDatabase db = helper.getWritableDatabase();
  // db.execSQL("update person set number=? where name =?", new Object[] {newnumber,name });
  ContentValues values = new ContentValues();
  values.put("number", newnumber);
  int row = db.update("person", values, "name=?", new String[] { name });
  db.close();
  return row;
 }
 /**
  * 删除一条记录
  * @param name
  * @return the number of rows affected if a whereClause is passed in, 0 otherwise.
  *  To remove all rows and get a count pass "1" as the whereClause.
  */
 public int delete(String name) {
  SQLiteDatabase db = helper.getWritableDatabase();
  //db.execSQL("delete from person where name=?", new Object[] { name });
  int row=db.delete("person", "name=?", new String[]{name});
  db.close();
  return row;
 }
}

 

你可能感兴趣的:(数据库,android,数据库,sqlite,sqlite,sqlite,AndroidSQLite,开发中使用)