Android 使用Sqlite
如何使用
- 继承SQLiteOpenHelper,通过SQLiteOpenHelper可以方便的管理SQLiteDatabase
public class MyDataBaseHelper extends SQLiteOpenHelper { public final static String CREATE_TABLE_SQL="create table dict (_id integer primary key autoincrement,word text,detail text)"; public MyDataBaseHelper(Context context, String name, int version) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { // 第一次使用数据库是自动建表 db.execSQL(CREATE_TABLE_SQL); } /** * 升级数据是调用 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
- 获取可写数据库:SQLiteDatabase database=databaseHelper.getWritableDatabase();
- 获取可读数据库: SQLiteDatabase db=databaseHelper.getReadableDatabase();
执行SQL语句
db.executeSQL(String sql); db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集
insert
db.insert(String table, String nullColumnHack, ContentValues values);
- 第一个参数都是表示要操作的表名;insert中的第二个参数表示强行插入null值的数据列的列名,当values参数为空或不含任何key-value对时该参数有效;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;插入方法执行后会返回新添记录的行号,该行号是一个内部值,与主键id无关,发生错误返回-1;
- 通过SQL语句也可实现:比如:db.execSQL("insert into news_info values(null,?,?)",new String[]{title,content})
update
db.update(String table, Contentvalues values, String whereClause, String whereArgs);
- table:表名
- values: 想更新的数据
- whereClause:满足whereClause子句的记录将会被更新
- whereArgs: 用于为whereClause子句传入参数
例
int result=db.update("news_info",values,"_id>?",new Integer[]{20});
delete
db.delete(String table, String whereClause, String whereArgs);
- table: 表名
- whereClause:满足whereClause子句的记录将会被删除
- whereArgs: 用于为whereClause子句传入参数
query
db.rawQuery(String sql, String[] selectionArgs); db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit); db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderB
上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集;下面的几种参数都很类似,columns表示要查询的列所有名称集,selection表示WHERE之后的条件语句,可以使用占位符,groupBy指定分组的列名,having指定分组条件,配合groupBy使用,orderBy指定排序的列名,limit指定分页参数,distinct可以指定“true”或“false”表示要不要过滤重复值。需要注意的是,selection、groupBy、having、orderBy、limit这几个参数中不包括“WHERE”、“GROUP BY”、“HAVING”、“ORDER BY”、“LIMIT”等SQL关键字。
最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。
Cursor
c.move(int offset); //以当前位置为参考,移动到指定行 c.moveToFirst(); //移动到第一行 c.moveToLast(); //移动到最后一行 c.moveToPosition(int position); //移动到指定行 c.moveToPrevious(); //移动到前一行 c.moveToNext(); //移动到下一行 c.isFirst(); //是否指向第一条 c.isLast(); //是否指向最后一条 c.isBeforeFirst(); //是否指向第一条之前 c.isAfterLast(); //是否指向最后一条之后 c.isNull(int columnIndex); //指定列是否为空(列基数为0) c.isClosed(); //游标是否已关闭 c.getCount(); //总数据项数 c.getPosition(); //返回当前游标所指向的行数 c.getColumnIndex(String columnName);//返回某列名对应的列索引值 c.getString(int columnIndex); //返回当前行指定列的值
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Flutter 05: 图解修改应用名称及图标
小菜有个臭毛病就是新建的项目都会优先更改一下项目名称,按照自己喜欢的名字定义,当然包括 Logo 也修改一下。刚接触 Flutter,语法都还没有了解,一切都是未知,单就改个项目名称也耽误了不少功夫,现在整理一下。 Flutter 在新建过程中的 project name 即为默认的应用名称,现在想要修改,尝试如下: 默认创建时 project name 解决方式 修改 lib/main.dart 中 title 内容,但是应用的名称并未修改;小菜理解为应用内名称,当应用处于切换状态时,展示的为 title 名称,而此时桌面应用名称未改变,如图: 切换时 title Flutter Project Name.png 小菜找了好久,以为 Flutter 是跨平台应用,对应 Android 和 iOS 的 project name 是统一修改的,可是小菜我理解错了,应用名称是需要在 Android 和 iOS 中分别调整的;Android 是在 AndroidManifest.xml 中修改;iOS 则是在 Info.plist 中修改的;如图:Tip: 在 Android 和 iOS 中...
- 下一篇
Android中的设计模式之单例模式
参考 《设计模式:可复用面向对象软件的基础 》3.5 Singleton 单件--对象创建型模式 《设计模式解析》(第二版)第21章 Singleton模式和Double-Checked Locking模式 《Android源码设计模式解析与实战》第2章 单例模式 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 动机 对一些类来说,只有一个类实例是很重要的,比如一个公司CEO只有一位,一个帝国只有一个皇帝。 单例模式是应用最广的模式之一,单例对象的类必须保证只有一个实例存在。如在一个应用中,应该只有一个ImageLoader实例,这个ImageLoader中又含有线程池,缓存系统,网络请求等,很消耗资源,因此,没有理由让它构造多个实例。 保持只有一个单例,好的办法是让类自身负责保存它的唯一实例。 适用性 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它。 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例。 定义 确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例 角色 Client 高层客户端 Singleton...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装