Android(安卓)Sqite数据库
16lz
2021-01-25
Android 开发中实际使用sql语句不多,那么android就提供了一个"叉叉"helper的类:SQLiteOpenHelper,但是开发人员是通过继承这个类来实现对数据进行操作的.
步骤如下:
<0> : 定义一个管理数据管理类:
public class SQLManager { public static final String SQ_LITE_DATABASE_TABLE="tsql"; public static final String SQL_TABLE_CREATE="create table "+SQ_LITE_DATABASE_TABLE+"{" + "id INTEGER PRIMARY KEY AUTOINCREMENT,user TEXT,password TEXT,nickname varchar(20) }"; public static final String SQL_DROP_EXSIT_TABLE="drop table if exist tsql"; public static final String TABLE_ID_FIELD="id"; public static final String TABLE_USER_FIELD = "user"; public static final String TABLE_PASSWORD_FIELD = "password"; public static final String TABLE_NICKNAME_FIELD = "nickname";}
<1> 先要新建一个几成SQLiteOpenHelper的类:
public class SQLHelper extends SQLiteOpenHelper{}
<2> 这个新建的类还必须要有构造函数,数据库名和版本号可以构建中传入,也可以直接传入常量,如下面:
public SQLHelper(Context context){ super(context,DATABASE_NAME,null,DATABASE_VERSION); } public SQLHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub }
private static final String DATABASE_NAME="user_db"; private static final int DATABASE_VERSION=1;
<3> 在重载onCreate中创建或者打开数据库:
@Override public void onCreate(SQLiteDatabase sqldb) { // TODO Auto-generated method stub sqldb.execSQL(SQLManager.SQL_TABLE_CREATE); }
<4> 打开数据库后,即可以开始操作了,在操作之前需要认识一个类ContentValues,由于android提供封装好的操作方法,操作方法在插入更新数据时,需要开发人员现将一个集合的数据打好包,然后传入操作方法中,而APP的数据就要放大一个"包中",相当于一个中间人,那么ContentValues就起到打包或者说中间人的作用:
ContentValues cvs = new ContentValues();
用其打包数据:把数据放到指定的字段中即可:
cvs.put(SQLManager.TABLE_USER_FIELD, user); cvs.put(SQLManager.TABLE_PASSWORD_FIELD, password); cvs.put(SQLManager.TABLE_NICKNAME_FIELD, nickname);
其次操作数据时,要么就是读取数据,要么就是写入数据,一般情况下如果读取数据时,我们就获得读取数据库的对象就可以了,同样写入:
SQLiteDatabase sqldb=this.getReadableDatabase();
SQLiteDatabase sqldb = this.getWritableDatabase();
<5> : 执行插入操作数据:
public boolean insert(String user, String password, String nickname) { SQLiteDatabase sqldb = this.getWritableDatabase(); ContentValues cvs = new ContentValues(); cvs.put(SQLManager.TABLE_USER_FIELD, user); cvs.put(SQLManager.TABLE_PASSWORD_FIELD, password); cvs.put(SQLManager.TABLE_NICKNAME_FIELD, nickname); // public long insert(String table, String nullColumnHack, ContentValues // values) Long result = sqldb .insert(SQLManager.SQ_LITE_DATABASE_TABLE, null, cvs); if (result == -1) { return false; } else { return true; } }
<6> 执行更新操作:注意操作过程中条件的设置
public boolean update(String user, String password, String nickname) { SQLiteDatabase sqldb = this.getWritableDatabase(); String where = SQLManager.TABLE_USER_FIELD + "=?"; String whereargs[] = { user }; ContentValues cvs = new ContentValues(); cvs.put(SQLManager.TABLE_USER_FIELD, user); cvs.put(SQLManager.TABLE_PASSWORD_FIELD, password); cvs.put(SQLManager.TABLE_NICKNAME_FIELD, nickname); int result = sqldb.update(SQLManager.SQ_LITE_DATABASE_TABLE, cvs, where, whereargs); if (result == 0) { return false; } else { return true; } }
<7> 执行删除数据操作:
public boolean delete(String user) { SQLiteDatabase sqldb = this.getWritableDatabase(); String where = SQLManager.TABLE_USER_FIELD + "=?"; String whereargs[] = { user }; int result = sqldb.delete(SQLManager.SQ_LITE_DATABASE_TABLE, where, whereargs); if (result == 0) { return false; } else { return true; } }
<8> : 执行查询操作:
public void query(){ SQLiteDatabase sqldb=this.getReadableDatabase(); String columns[]={SQLManager.TABLE_USER_FIELD,SQLManager.TABLE_PASSWORD_FIELD,SQLManager.TABLE_NICKNAME_FIELD}; String orderby=SQLManager.TABLE_ID_FIELD; Cursor cr=sqldb.query(SQLManager.SQ_LITE_DATABASE_TABLE, columns, null, null, null, null, null); cr.moveToFirst(); while(!cr.isAfterLast()){ Log.i(TAG,"user : " + cr.getString(1) + " password : " + cr.getString(2)+" nickname : "+ cr.getString(3)); cr.moveToNext(); } }
这个里面query可以传递查询条件,一般这个方法可以这样写:需要返回游标,上面直接打印了.
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
<9> 写完上面辅助操作数据库类,进入具体使用阶段:
private SQLHelper sqlhelper;
sqlhelper = new SQLHelper(this);
sqlhelper.insert(...)....
具体的例子网上很多,个人觉得只要看得懂API,再要记住操作流程,当然实际上寡人是做了demo的.
转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3627383.html
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- 我的android 第28天 - Activity(一)
- android 视频的缩图制作
- In android studio,cannot load 2 facets-unknown facet type:an
- 【30篇突击 android】源码统计 十五
- Android(安卓)Intent的几个主要用法--发短信,打电话,发彩信
- 技术转载:Android开发之常用代码片段