Android SQLite的连接和基本操作

来源:互联网 发布:阿里云备案客服电话 编辑:程序博客网 时间:2024/05/24 02:37
欢迎转载,转载请标明出处,谢谢

每一个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数据库的基本操作。如有补充,会继续更新。

0 0
原创粉丝点击