Android之SQLite总结

SQLite 是一个轻量级的数据库,常用于各种嵌入式设备当中。
android 提供了SQLiteOpenHelper抽象类用于帮助开发数据库。
在实际使用中经常定义一个类继承SQLiteOpenHelper,并重写构造方法,onCreate()方法和 onUpdate()的方法;
//注意:上面三个方法必须重写:重写构造方法一般用于初始化
                                                          onCreate()方法:
                                                           onUpdate()用于数据库版本的更新时调用,只在数据库更新时调用一次。

如:MySQLiteHelper类继承SQLiteOpenHelper
// MySQLiteOpenHelper extends SQLiteOpenHelper;
//MySQLiteOpenHelper myhelper;
myhelper = new MySQLiteOpenHelper(contenext);


** SQLiteDatabase是直接操作数据库的对象,可以使用SQLiteOpenHelper的 getReadableDatabase
或getWritableDatabase方法得到SQLiteDatabase对象。
//SQLiteDatabase db = myhelper.getReadableDatabase();
//注意:只有调用了getReadableDatabase()或getWritableDatabase方法,才算真正创建了数据库,接下来就可以使用数据库的各种方法,
处理数据;

查询结果的返回值:Cursor cursor ;Cursor相当于结果集ResulytSet;
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
总结:使用SQLite的一般步骤:
           a:自定义一个继承SQLiteOpenHelper的类,然后使用数据库帮助类的对象调用getReadableDatabase()或getWritableDatabase方法创建数据库
          b: 对数据库db进行增删改查的操作
          c:对于查询的结果集储存在Cursor中。
         d:数据库db和结果集Cursor使用完毕后注意调用close的方法来释放资源

http://wenku.baidu.com/view/423a00dca58da0116c17491e.html
//该文档比较长比较详细

package com.itheima.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.view.View;

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    /*数据库的构造方法,
    用来定义数据库的名称,
    数据库的结果集和数据库的版本
    创建出一个Person的数据库
    */
    public PersonSQLiteOpenHelper(Context context) {
        super(context, "Person.db", null, 1);
        /*        
         * 一共四个参数,每个参数的含义:1.context上下文,一般都需要
            2:数据库的名字
            游标工厂:移动的指针指向结果集,一般游标工厂用null;
            version:代表数据库的版本。从1开始的,一般使用1;
         */    
    }
    

    /*
     * 在数据库第一次创建的时候使用onCreate(),
     * 一般用来创建数据库的表结构和存一些初始化的表参数
     * 传入的参数db代表被创建的数据库
     * */
    @Override
    public void onCreate(SQLiteDatabase db) {
        
        //初始化表结构
        db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");
        //注意:SQLite 实际上是一个嵌入式的数据库,没有MySQL那么多的数据类型。

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

以上代码是创建了一个继承了SQLiteOpenHelper的类。

package com.itheima.db.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.itheima.db.PersonSQLiteOpenHelper;
import com.itheima.db.domain.Person;

public class PersonDao {
    //因为要对helper进行操作,所以该类需要有一个helper的对象
    private PersonSQLiteOpenHelper helper;
    public PersonDao(Context context){
        helper = new PersonSQLiteOpenHelper(context);
        
    }
    //任何一个函数的构造方法都要传入context的对象,因为context相当于全局变量为整个应用的接口
    //这样写代码的好处,在构造方法中已经将personhelper初始化
    //养成习惯:只要一拿到数据库就在后面写上close的方法。
    public void insert(String name , String num){
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL("insert into person (name,number) vlaues(?,?) ",new Object[]{name ,num});
        db.close();
    }
    //数据库db,只有在helper调用了getWritableDatabase()或者getReadableDatabase()的方法后才会被创建出来
    //使用任何一个数据库最后都要关闭数据库来释资源,所以当你在开始创建数据库的时候就直接关闭数据库以防忘记
    //数据库db可以调用execSQl的方法来执行SQL语句,SQL语句中的?代表了占位符可以用参数实现
    
    public void delete(String name){
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL("delete from person where name =?",new Object[]{name});
        
        db.close();
    }
    
    public void  update(String name ,String newname ){
        
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL("update person set name =? where name =?",new Object[]{name,newname} );
        db.close();
        
    }
    public boolean find(String name){
        SQLiteDatabase db = helper.getReadableDatabase();
            Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name});
            boolean result = cursor.moveToNext();
            cursor.close();
        db.close();
        return result;
    }
    //cursor使用完也要关闭来释放资源。cursor的常用方法要掌握
    public List<Person> findAll(){
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person",null);
        List<Person>  list = new ArrayList<Person>();
        while(cursor.moveToNext()){
            
            int id = cursor.getInt(0);
            String name  = cursor.getString(1);
            String number = cursor.getString(2);
            Person p = new Person(name,number,id);
            list.add(p);
            
        }
        cursor.close();
        db.close();
        return list;
        
    }
}
//以上是使用SQL语句是实现的增删改查
//可以使用Android 提供的API来实现增删改查的
//使用SQL语句比较麻烦,会出现一些小细节的错误

编写一个Dao类用于操作数据库。

package com.itheima.db.domain;

public class Person {
    private String name;
    private String number;
    private int id;

    public Person(String name, String number, int id) {
        super();
        this.name = name;
        this.number = number;
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    

}
//创建PersonBean类来封装查询到的结果,快捷键右键source,生成getter 和setter的方法,右键source还可以生成构造方法
//一般 构造方法的作用是初始化对象参数值

//自定义了一个Person类用来封装查询结果。

package com.itheima.db;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(this);
      /*  //只执行以上代码实际数据库并没有被创建出来,单纯的new出来了一个对象
        helper.getReadableDatabase();
        helper.getWritableDatabase();
        //只有执行以上的两种方法中任意一种数据库才被创建出来
       */     
        helper.getReadableDatabase();
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

//主函数

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。