SQLite数据库编程

在安卓中,使用比较多并且比较重要的数据库编程就是sqlite数据库了。sqlite数据库类似与MysqL数据库编程,底层也是sql语言实现。
首先,sqlite存储有两种方式实现,一种是完全使用sql语句来实现数据的增删改查操作,一种是使用谷歌官方提供的API来进行增删改查操作。下面就一一介绍这两种方式。
无论使用那种方式进行数据存储,建议使用sqliteOpenHelper帮助类来创建数据库,不要使用sqliteDatabase创建数据库。因为使用sqliteDataBase来操作就显得笨重麻烦。sqliteDatabase用来对已有数据库进行必要的操作。

使用sql语句实现数据库操作

一、新建一个类继续自sqliteOpenHelper
示例代码

public class MysqLitehelper extends sqliteOpenHelper {

    public MysqLitehelper(Context context) {
        super(context,"contactinfo1.db",null,2);
        //null 表示使用认游标工厂
    }

    @Override//数据库第一次创建时调用
    public void onCreate(sqliteDatabase db) {
        String sql="create table number1 (id integer primary key autoincrement,name varchar(20),phone int)";
        db.execsql(sql );
        Log.e("数据库表","创建表成功");
    }
       /** * @param oldVersion 就得数据库版本 * @param newVersion 更新后的数据库版本 * @param db 数据库对象,用来对数据进行增删改查等操作 */
    @Override//数据库更新时调用数据库一旦创建成功,需要修改数据库表或者增加表的时候就在此方法实现
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {

    }

}

注意:还需要调用下面方法才可以真正创建数据库

MysqLitehelper my=new MysqLitehelper(this);
        my.getWritableDatabase();
接下来就是对数据库数据进行操作:
package com.example.util;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.widget.Toast;

public class Contacts {

    /** * 实现联系人的增删改查 */

    private MysqLitehelper helper;

    public Contacts(Context context){
        helper=new MysqLitehelper(context);
    }
    /** * 增加一条联系人记录 * * @param name * 联系人名字 * @param number * 联系人号码 */ 
    public void add(String name,int phone) {
        sqliteDatabase db=helper.getWritableDatabase();
        String sql="insert into number1 (name,phone) values(?,?)";
        db.execsql(sql,new Object[]{name,phone});
        db.close();
    }

    /** * 删除一条联系人记录 * * @param name * 联系人名字 */
    public void delete(String name) {
        sqliteDatabase db=helper.getWritableDatabase();
        String sql="delete from number1 where name=?";
        db.execsql(sql,new String[]{name});
        db.close();
    }

    /** * 修改记录 * @param name 修改用户名 * @param phone 修改的号码 */
    public void update(String name,int phone) {
        String sql="update number1 set phone=? where name=?";
        sqliteDatabase db=helper.getWritableDatabase();
        db.execsql(sql,new Object[]{phone,name});
        db.close();
    }

    /** * 查询记录 * @param name 需要查询用户 */
    public int query(String name) {
        int query_phone =0;
        sqliteDatabase db=helper.getReadableDatabase();
        String sql="select * from number1 where name=?";
        Cursor cursor=db.rawQuery(sql,new String[]{name});
        if(cursor.movetoNext()){//一定要判断游标是否可以移动到下一行
         query_phone=cursor.getInt(2);//Cursor是从0开始
        }
        cursor.close();
        db.close();
        return query_phone;
    }

    public void deleteall(){
        String sql="delete from number1";
        sqliteDatabase db=helper.getWritableDatabase();
        db.execsql(sql);
        db.close();
    }


}

到此,基本数据操作已经实现,剩下的就是根据具体业务逻辑来使用封装好的方法

使用谷歌提供的API

同样创建一个帮助类:
## 示例代码 ##

package com.wnl.dao;

import com.example.studentinfo.MainActivity;
import com.example.studentinfo.R;

import android.content.Context;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class DataBaseHelper extends sqliteOpenHelper {

    public DataBaseHelper(Context context) {
        super(context,"students.db",1);
    }

    @Override
    public void onCreate(sqliteDatabase db) {
        Log.e("DataBaseHelper","onCreate");
        String sql="create table students1(_id integer primary key autoincrement,"+
        " id varchar(20),number varchar(20) )";
        db.execsql(sql);
        Log.e("DataBaseHelper-->onCreate","成功创建了表");
    }

    @Override
    public void onUpgrade(sqliteDatabase db,int newVersion) {
        Log.e("DataBaseHelper","onUpgrade");
    }

接下来就是使用此类来进行数据操作:

package com.wnl.dao;

import java.util.HashMap;
import java.util.Map;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;

public class StudentsIpl {
    /** * 实现学生信息的增删改查 */
    private DataBaseHelper dh;

    public StudentsIpl(Context context) {
        dh = new DataBaseHelper(context);
    }

    /** * 增加一条学生记录 * * @param id * 学生ID * @param name * 学生姓名 * @param number * 学生号码 */
    public long addStudent(String id,String name,String number) {
        sqliteDatabase db = dh.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("id",id);
        cv.put("name",name);
        cv.put("number",number);
        long rowid = db.insert("students1",cv);
        db.close();
        return rowid;
    }
    /** * 删除全部数据 */
    public void deleteall(){
        sqliteDatabase db=dh.getWritableDatabase();
        db.delete("students1",null);
        db.close();
    }
    /** * 删除指定数据 */
    public void delete(String name){
        sqliteDatabase db=dh.getWritableDatabase();
        db.delete("students1","name=?",new String[]{name});
        db.close();
    }

    /**查询数据库一共有多少条记录 * */
    public int getTotalInfo(){
        sqliteDatabase db=dh.getReadableDatabase();
        Cursor cursor=db.query("students1",null);
        int count=cursor.getCount();
        return count;
    }
/** * 查询指定学生记录,并把记录封装到HashMap中 * @param position 需要查询记录的位置 * @return */
    public Map<String,String> queryStudent(int position) {
        Map<String,String> map = new HashMap<String,String>();
        sqliteDatabase db = dh.getReadableDatabase();
        Cursor cursor = db.query("students1",null);// 实现全部查询
        cursor.movetoPosition(position);
        String id=cursor.getString(1);// 取得学生ID
        String name=cursor.getString(2);// 取得学生姓名
        String number=cursor.getString(3);// 取得学生号码
        map.put("id",id);
        map.put("name",name);
        map.put("number",number);
        cursor.close();
        dh.close();
        return map;
    }
}

至此,两种方式来进行sqlite编程介绍好了。

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能