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", null, 1);
    }

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

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, 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", null, cv);
        db.close();
        return rowid;
    }
    /**
     * 删除全部数据
     */
    public void deleteAll(){
        SQLiteDatabase db=dh.getWritableDatabase();
        db.delete("students1", null, 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, null, null, null, null, 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, null, null, null, null, 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编程介绍好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值