Android SQLite的连接和基本操作

欢迎转载,转载请标明出处,谢谢

每一个Android手机都自带一个sqlite数据库,用来保存来自网络的数据及手机上的数据,但要怎么连接,怎么进行增删改查呢?这就是本文的重点。

我将结合实例代码进行介绍,其中代码注释也算详细:
类:
1:用户类:UserInfor 用户的基本信息:id,username,pwd,age
2:数据库类:SQLiteUtil 继承SQLiteOpenHelper,完后对数据库额建立和表的创建
3:数据库操作类:UserDao 类中实例化SQLiteUtil ,完成对数据库的各种操作
4:调用类(测试activity): 实例化UserDao ,完成对数据库具体的各种操作

1:创建类继承SQLiteOpenHelper
连接数据库是靠系统提供的SQLiteOpenHelper这个类,用户创建类并继承SQLiteOpenHelper实现onCreate()onUpgrade()方法。

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

/**
 * Created by Administrator on 2016/4/27.
 */
public class SQLiteUtil extends SQLiteOpenHelper {

    //定义数据库的各种常量,如数据库名,表名,表的字段
    private static final String DBNAME = "user.db";
    private static final String TABLE_NAME = "user_info";
    private static final String TABLE_INFO_COLUM_ID  = "_id";//主键前面一般都带下划线,也可不带
    private static final String TABLE_INFO_COLUM_NAME = "name";
    private static final String TABLE_INFO_COLUM_PWD = "pwd";
    private static final String TABLE_INFO_COLUM_AGE = "age";
    private static final String TABLE_INFO_COLUM_IMG = "imgUrl";

    //本类的构造方法
    public SQLiteUtil(Context context, int version) {
    /**
    创建构造方法时,默认是以下构造方式,可根据个人需要修改
    public SQLiteUtil(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    */
        //上面定义了数据库名,故可直接写死DBNAME
        super(context, DBNAME, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建表,使用StringBuffer代替String减少内存消耗
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("CREATE TABLE IF NOT EXISTS ");
        stringBuffer.append(TABLE_NAME + "(");
        stringBuffer.append(TABLE_INFO_COLUM_ID+" integer primary key autoincrement ,");
        stringBuffer.append(TABLE_INFO_COLUM_NAME+" varchar(10),");
        stringBuffer.append(TABLE_INFO_COLUM_PWD+" varchar(10),");
        stringBuffer.append(TABLE_INFO_COLUM_AGE+" varchar(10),");
        stringBuffer.append(TABLE_INFO_COLUM_IMG+" varchar(10))");
        //执行操作
        db.execSQL(stringBuffer.toString());
    }
    //重写的onUpgrade方法。当数据库结构修改,优化后,需要更新版本时,执行该方法,具体就是将旧的数据库删除,重写创建数据库。以达到更新的目的。方法中的oldVersion和newVersion分别对应新旧版本,可以用户自己定义,系统会自动回调该方法并判断版本是否发生变化
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "drop table if exists "
                +TABLE_NAME;
        db.execSQL(sql);
        onCreate(db);
    }
}

2:实现对数据库的操作方法

该类是对数据库操作的具体实现类,类中的方法可在任意地方调用,以达到对数据库的操作

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

import com.inext.test.sqlitetest.dbutil.SQLiteUtil;
import com.inext.test.sqlitetest.entry.UserInfo;

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

/**
 * Created by Administrator on 2016/4/27.
 */
public class UserDao {

    //定义之前刚完成的SQLiteUtil
    private SQLiteUtil sqLiteUtil;
    //该类构造方法
    public UserDao(Context context){
        //实例SQLiteUtil ,并将参数传入,1为版本号,可自定义
        sqLiteUtil = new SQLiteUtil(context,1);
    }

    /**
     * 获取数据库有两种:getWritableDatabase()和getWritableDatabase(),均返回SQLiteDatabase
     *    前者用来对数据库的插入,修改等有改变值得操作,后者用来查询等无改变值的操作
     * 数据库操作:增删改查
     * 有两种方式:系统自己封装好的各种方法,如rawQuery(),insert(),update(),delete()等
     * 也可以自己写sql语句,并通过execSQL()执行语句
     */
    //查询方法
    public List search(){
        //创建list用来存放对象
        List list = new ArrayList();
        //通过getReadableDatabase()获取可读的数据库
        SQLiteDatabase db = sqLiteUtil.getReadableDatabase();
        //执行语句,获取返回类型为Cursor 的结果集
        Cursor cursor = db.rawQuery("select * from user_info ", null);
        UserInfo userInfo = null;
        //循环得到结果集里的对象
        while (cursor.moveToNext()){
            int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String username = cursor.getString(cursor.getColumnIndex("name"));
            String pwd = cursor.getString(cursor.getColumnIndex("pwd"));
            String age = cursor.getString(cursor.getColumnIndex("age"));
            String imgUrl = cursor.getString(cursor.getColumnIndex("imgUrl"));
            userInfo = new UserInfo();
            userInfo.setId(id);
            userInfo.setUsername(username);
            userInfo.setPwd(pwd);
            userInfo.setAge(age);
            userInfo.setImgUrl(imgUrl);
            list.add(userInfo);
        }
        cursor.close();
        db.close();
        return list;
    }

    //添加
    public void insert(UserInfo userInfo){
        //通过getWritableDatabase()获取可写的数据库
        SQLiteDatabase db = sqLiteUtil.getWritableDatabase();
        //ContentValues 用来存放数据,类似Map
        ContentValues contentValues = new ContentValues();
        contentValues.put("name",userInfo.getUsername());
        contentValues.put("pwd",userInfo.getPwd());
        contentValues.put("age", userInfo.getAge());
        contentValues.put("imgUrl",userInfo.getImgUrl());
        //执行插入
        db.insert("user_info", null, contentValues);
        db.close();
    }

    //删除
    public void del(int id){
        //通过getWritableDatabase()获取可写的数据库
        SQLiteDatabase db = sqLiteUtil.getWritableDatabase();
        db.delete("user_info", "_id = ?", new String[]{String.valueOf(id)});
        db.close();
    }

    //更新
    public void update(UserInfo userInfo){
        //通过getWritableDatabase()获取可写的数据库
        SQLiteDatabase db = sqLiteUtil.getWritableDatabase();
        String sql = "update user_info set name = ? where _id = ?";
        db.execSQL(sql,new Object[]{userInfo.getUsername(),userInfo.getId()});
        db.close();
    }
}

3:调用数据库的操作方法

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private Button button1,button2,button3,button4;
    private TextView textView1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init(){
        button1 = (Button)findViewById(R.id.search);
        button2 = (Button)findViewById(R.id.insert);
        button3 = (Button)findViewById(R.id.update);
        button4 = (Button)findViewById(R.id.del);
        textView1 = (TextView)findViewById(R.id.show);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        UserDao userDao = new UserDao(getBaseContext());
        int id = v.getId();
        switch (id){
            case R.id.search:
                Log.d("----","这里是查询");
                List list = userDao.search();
                if (list.size()==0){
                    return;
                }
                UserInfo user = null;
                StringBuffer stringBuffer = null;
                StringBuffer show = new StringBuffer();
                for (int i = 0;i<list.size();i++){
                    user = (UserInfo) list.get(i);
                    stringBuffer = new StringBuffer();
                    stringBuffer.append("ID:"+user.getId());
                    stringBuffer.append("用户名:"+user.getUsername());
                    stringBuffer.append("密码:"+user.getPwd());
                    stringBuffer.append("年龄:"+user.getAge());
                    stringBuffer.append("图片地址:" + user.getImgUrl()+"\n");
                    show.append(stringBuffer);
                }
                textView1.setText(show.toString());
                break;
            case R.id.insert:
                Log.d("----","这里是插入");
                UserInfo userInfo = new UserInfo();
                userInfo.setUsername("肖盛");
                userInfo.setPwd("admin");
                userInfo.setAge("20");
                userInfo.setImgUrl("图片地址");
                userDao.insert(userInfo);
                break;
            case R.id.update:
                Log.d("----","这里是更新");
                UserInfo userInfo1 = new UserInfo();
                userInfo1.setId(6);//设置id
                userInfo1.setUsername("石国国");
                userInfo1.setPwd("123");
                userInfo1.setAge("21");
                userInfo1.setImgUrl("另一个地址");
                userDao.update(userInfo1);//更新id为6的数据
                break;
            case R.id.del:
                Log.d("----","这里是删除");
                userDao.del(0);//删除一条id为0的数据
                break;
        }
    }
}

以上就是对Android数据库的基本操作。如有补充,会继续更新。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值