文件存储的方式并不适用于保存一些较为复杂的文本数据。 ...Delete:删除。..., new String [] {"002"}); 8 //查询,注意:查询是用的rawQuery()方法,不再是execSQL()方法 9 db.rawQuery("select...Atomicity:原子性 Consistancy:一致性 Isolation:隔离性 Durabolity:持久性 SQLite是支持事务特性的,事务特性可以保证让某一系列的操作要么全部完成,要么一个都不完成..., new String[] { "002" }); 11 // 查询,注意:查询是用的rawQuery()方法,不再是execSQL()方法 12 db.rawQuery
execSQL(String sql): 执行给定SQL语句。...rawQuery方法需要开发者手动写出查询SQL,而query方法是由目标表名、where子句、order by子句、having子句等诸多子句由系统组成SQL语句。...本人更喜欢rawQuery的方式,因为此方式更接近传统Java开发,也可以由专业DBA来书写SQL语句,这样更符合MVC的思想,而且这样的代码可读性更高。...五、删除数据 删除数据也是一件很简单的事,只需要调用delete方法,传入参数即可,delete(String table, String whereClause, String[] whereArgs...whereArgs: 用于替代whereClause参数中?占位符的参数。如不需传入参数,则为null。 具体代码如下: db.delete("tab", "_id=? or name=?"
、long、Long、Boolean、boolean INTEGER float、Float、double、Double REAL Date DATE String TEXT PS:这里简单起见,将所有的字符串都用...代码实现 介绍一下几个重要的类 (1) 用于构造SQL语句的类SQLBuilder(主要用了Java反射机制) (2) 用于执行SQL语句的类SQLiteDBExecutor (3) 提供给外部使用的...ORM主类LazyDB 3.1 SQLBuilder:SQL语句构建器 该Class的主要作用是,将外部传进来的Object(对象)或者Class(类),通过Java反射机制,构建成SQL语句。...Java反射的工具类,将所有反射调用的方法都放到这里来,统一管理,方便优化处理; IDUtil:用于主键Field查找的工具类; TableUtil:用于数据库表字段数据与Java数据类型转换、表名生成等...; 3.2 SQLiteDBExecutor:SQL语句执行器 该Class的主要作用是,用于执行SQL语句,或者通过SQLiteOpenHelper执行一些数据库操作,反正所有数据库操作都在这里面。
现在创建好数据库之后,就是进行数据表的创建,数据表的创建我们可以在execSQL()函数中写入,该函数的参数就是一条标准的sql语句,作用就是执行其中的sql语句,以下代码中sql语句的作用是如果student...2、单条数据的删除 和删除全部数据的方法一样,我们在进行数据表中单条数据的删除时,同样是使用execSQL()函数,唯一不同的就是在sql语句后面增加一个限定条件,限定删除的内容,操作语句如下:如我们要删除姓名为...五、数据表中数据的查找 1、查找全部数据 由于数据的查找是需要返回查找到的数据信息的,所以数据的查找操作不能使用execSQL()函数来执行了, 这里我们需要使用一个专门用于进行数据查找,并且返回其查找结果的函数...我们以查询数据表中所有数据为例,之后将查询到的结果按行显示在文本框中。...()方法的sql语句后面增加一个限定参数,方法同样是使用string数组的形式。
onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) db : 数据库对象,通过db.execSQL(String)来执行sql语句...,并将查询到的结果集保存在Cursor游标类中,并返回. // sql:填入select查询语句 // selectionArgs:如果sql参数填入的内容是正常语句,则这里填NULL,如果是where...void execSQL(String sql); //用来执行INSERT、UPDATE 或 DELETE 的sql语句 Cursor类游标默认是指向所有结果之前的一行,然后通过moveToNext...(标题只有id、name、score、class),那么将添加科目和考号标题 db.execSQL("alter table info add age 科目");...FROM student WHERE id = "+id+""); System.out.println("DELETE FROM
持久性( Durabilily )。它能够支持Windows/Linux/UNIX等主流的操作系统,能够跟很多程序语言,例如Tcl、C#、PHP、 Java等相结合。...删除一条数据 下面介绍如何使用SQLiteDatabase的delete()方法修改person表中的数据,示例代码如下。...= db.delete("person",_id =?...查询一条数据 Cursor cursor = db.rawQuery("select _id,name,price from person where id =?"...,new String[]{id}); 从上述代码可以看出,查询操作与增、删、改操作有所不同,前面三个操作都是通过execSQL()方法执行SQL语句,而查询操作使用的是rawQuery()方法。
SELECT 与 SELECT 是相同的,但仍建议将 SQL 命令语句纯大写字母书写,有如下优点: 提高可读性:在 SQL 命令语句中使用纯大写可以使关键字、函数、表名等部分更加醒目,容易阅读和理解...至于某些长语句使用逗号,在不同的数据库系统中有不同的分隔规则。 SQL支持注释: 通过使用 -- 或是 # 来编写注释内容,也可以使用 /* 注释内容 */ 来进行多行注释。...---- 我们可以通过使用 DELETE 来删除表中的数据: DELETE FROM 表名 通过这种方式,将删除表中全部数据,我们也可以使用 WHERE 来添加条件,只删除指定的数据: DELETE FROM...,房间里的人就是一个个具体的数据; 那么视图相当于在这个房间上面开了一个“窗口”能够根据用户的需要来查看数据; 可以对这个“窗口”进行调整(修改),但无论如何修改都无法影响到房间内的人(实际的数据);...持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
同时ManagedSQLiteOpenHelper的用法与SQLiteOpenHelper几乎一模一样,唯一的区别是:数据表的增删改查语句需要放在use语句块之中,具体格式如下: use { ...(...) //4、查询记录 //query(...)或者rawQuery(...) } 其中表的查询操作还要借助于SQLite已有的游标类Cursor来实现,上述代码中的...query和rawQuery方法,返回的都是Cursor对象,那么获取查询结果就得根据游标的指示一条一条遍历结果集合。...下面是Cursor类的常用方法: 1、游标控制类方法,用于指定游标的状态: close : 关闭游标 isClosed : 判断游标是否关闭 isFirst : 判断游标是否在开头 isLast... "married INTEGER NOT NULL," + "update_time VARCHAR NOT NULL" + //演示数据库升级时要先把下面这行注释
代码实现 介绍一下几个重要的类 (1) 用于构造SQL语句的类SQLBuilder(主要用了Java反射机制) (2) 用于执行SQL语句的类SQLiteDBExecutor (3) 提供给外部使用的ORM...主类LazyDB 3.1 SQLBuilder:SQL语句构建器 该Class的主要作用是,将外部传进来的Object(对象)或者Class(类),通过Java反射机制,构建成SQL语句。...Java反射的工具类,将所有反射调用的方法都放到这里来,统一管理,方便优化处理; IDUtil:用于主键Field查找的工具类; TableUtil:用于数据库表字段数据与Java数据类型转换、表名生成等...; 3.2 SQLiteDBExecutor:SQL语句执行器 该Class的主要作用是,用于执行SQL语句,或者通过SQLiteOpenHelper执行一些数据库操作,反正所有数据库操作都在这里面。...的值 */ public void delete(final Class<?
会创建一个Cursor对象, 这时会调用Cursor工厂类 factory, 可以填写null默认值; version:数据库版本,需要升级数据库时将版本号加一,将升级的内容写在onUpgrade中即可...这里的onCreate方法中创建了一张user表,db.execSQL()方法执行了里面SQL语句。...* @param user 用户对象 */ public void insertAUser(User user) { //如果要对数据进行更改,就调用此方法得到用于操作数据库的实例...删(Delete) /** * 根据id删除一条数据 * @param id 用户id */ public void deleteAUser(Integer...* @param user 用户对象 */ public void insertAUser(User user) { //如果要对数据进行更改,就调用此方法得到用于操作数据库的实例
当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。...像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE, DELETE 等语句来更新表的数据。execSQL() 方法适用于所有不返回结果的 SQL 语句。..., parms); delete() 方法的使用和 update() 类似,使用表名,可选的 WHERE 条件和相应的填充 WHERE 条件的字符串。...查询数据库 类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQLite 数据库检索数据。...1 .使用 rawQuery() 直接调用 SELECT 语句; 使用 query() 方法构建一个查询。 Raw Queries 正如 API 名字,rawQuery() 是最简单的解决方法。
deletedata(Integer ID) { SQLiteDatabase sqdb = db.getWritableDatabase(); sqdb.execSQL("delete..., new String[]{offset.toString(),maxResult.toString()}); return cursor; } } 以上是采用Sql语句来操作,当然也可以不采用SQl...语句,Android有相关接口直接操作记录。...deletedata2(Integer ID) { SQLiteDatabase sqdb = db.getWritableDatabase(); sqdb.delete...实验验证方法:通过单元测试,操作数据库,将应用程序下的数据库导出到桌面。然后用sqlite explore查看即可。 如:
执行一个SQL语句,可以是一个select or 其他sql语句 // 即 直接使用String类型传入sql语句 & 执行 (void) execSQL(String sql) 3....占位符; // 注:也可采用SQL语句修改 String sql = "delete from user where id="1"; db.execSQL...(sql); /** * 操作4:查询数据1 = rawQuery() * 直接调用 SELECT 语句 */ Cursor c = db.rawQuery...,参数2 = 实际的参数集 使用建议:都使用SQL语句,因为:SQL语句 通用 & 简单 原生的方法insert()、delete()等方法具备多个参数,使用复杂 4....二进制的数据类型 String sql = "create table user(id int primary key,name varchar(200))"; //execSQL用于执行
首先,对数据库操作的基本步骤: 1、新建一个自定义的类MyHelper继承SQLiteOpenHelper并且重写它的抽象方法oncreate和onUpgrade方法,当然还要提供一个构造函数用于创建数据库文件..., new Object[]{"C Language", ++bookSum, "zhidian", 42.6}); * 这里将 ?...方法删除数据库中的数据 * 对应的SQL语句: * database.execSQL("delete from " + * DatabaseStatic.TABLE_NAME...SQL语句不熟悉的开发者使用,当然我们还可以调用这个类里面的 execSQL 方法来直接执行SQL语句中的插入、更改、删除操作,用rawQuery 方法来执行SQL语句的查询语句。...rawQuery方法执行,详见代码 这里注意一下,前面代码中说过,使用 SQLiteOpenHelper 类的 getWritableDatabase() 方法或者 getReadableDatabase
但是呢,在SQL语句当中,有一种查询是比较特殊的,就是聚合函数查询,它不像传统查询一样是将表中的某些列的数据查询出来,而是将查询结果进行聚合和统计,最终将统计后的结果进行返回。...但是在select语句当中我们通常不会再去指定列名,而是将需要统计的列名传入到聚合函数当中,那么执行select语句使用的还是SQLiteDatabase中的rawQuery()方法。...()方法中我们指定了一个聚合查询语句,其中count(1)就是用于去统计一共有多少行的。...使用LitePal的聚合函数 LitePal中一共提供了count()、sum()、average()、max()和min()这五种聚合函数,基本上已经将SQL语句当中最常用的几种聚合函数都覆盖了,那么下面我们就来对这五种聚合函数的用法一一进行学习..., "0").count(News.class); 这个用法和我们在上一篇文章当中学到的连缀查询是比较像的,在DataSupport类中首先指定一个where语句用于条件约束,然后连缀一个count()
这里用START TRANSACTION语句开启事务,要么使用COMMIT提交事务将修改的数据持久保留,要么使用ROLLBACK销所有的修改。...持久性:通过binlog、redolog来实现。 隔离性:通过(读写锁+MVCC)来实现。 一致性:MySQL通过原子性,持久性,隔离性最终实现(或者说定义)数据一致性。...就像我们在酒店,当我们预定一个房间时,就对该行(房间)添加 意向写锁,但是同时会在酒店的前台对该行(房间)做一个信息登记(旅客姓名、男女、住多长时间、家里几头牛等)。...后续的旅客通过酒店前台来看哪个房间是可选的,那么,如果没有意图锁,会出现什么情况呢?假设我要住房间,那么我每次都要到每一个房间看看这个房间有没有住人,显然这样做的效率是很低下的。...再强调一下,对于INSERT、UPDATE和DELETE,InnoDB 会自动给涉及的数据加排他锁;对于一般的SELECT语句,InnoDB 不会加任何锁,事务可以通过以下语句显式加共享锁或排他锁。
创建数据库.png 二、升级数据库时删除表 1.SQL常量类,将数据库版本改到2:SQLCon.java /** * 数据库版本 */ public static...插入数据.png ---- 四、删除数据 1.SQL常量类 /** * 删除数据 */ public static final String DELETE = "DELETE...sword WHERE id=1;"; 2.在需要的地方使用 mDb = new MySQLHelper(this).getWritableDatabase(); mDb.execSQL(SQLCon.DELETE...修改数据.png 五、查询数据 1.查询所有 Cursor cursor = mDb.rawQuery("SELECT * FROM sword", null); while (cursor.moveToNext...Cursor cursor2 = mDb.rawQuery("SELECT * FROM sword WHERE id = ?"
下面我将一一介绍。...person(id integer primary key autoincrement,name varchar(64),address varchar(64))"; //execSQL用于执行..., 如果为null, 就删除所有行; //第三个参数String[]: where语句的参数, 逐个替换where语句中的 "?"...将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数(selectionArgs) db.rawQuery(String sql, String[] selectionArgs); db.query...,然后第二个参数是实际的参数集 个人建议都使用SQL语句,因为: SQL语句较为通用; 使用insert()、delete()、query()方法具备多个参数,使用复杂 ---- 4.
只有创建者应用可以读写 MODE_WORLD_READABLE创建者应用可以读写,其他人只能读 MODE_WORLD_WRITEABLE创建者应用可以读写,其他人只能写 4.5.2.2 与其它应用共享 DB 数据时,将内容供应器用于访问控制...4.5.2.3 在 DB 操作期间处理变量参数时,必需使用占位符(必需) 在防止 SQL 注入的意义上,将任意输入值并入 SQL 语句时,应使用占位符。 下面有两个方法用占位符执行 SQL。...在SQLiteDatabese类上调用execSQL(),insert(),update(),delete(),query(),rawQuery()和replace()时,使用具有占位符的 SQL 语句...一种是使用 SQL 语句,另一种是不使用 SQL 语句。 使用 SQL 语句的方法是SQLiteDatabase#execSQL()/rawQuery(),它以以下步骤执行。...另一方面,SQLiteDatabase#insert()/update()/delete()/query()/replace()是不使用 SQL 语句的方法。
在执行了修改的查询之后可能返回之前的查询结果,如果您希望EntityManager被自动清除,您可以将@ modify注释的clearautomatic属性设置为true。...自动刷新,即执行完语句后立即将变化内容刷新到磁盘,如果是insert语句操作,则与JPA的 S saveAndFlush(S entity);方法效果相同; 自动清除,即执行完语句后自动清除掉已经过期的实体...顾名思义,后一种方法对数据库发出单个JPQL查询(在注释中定义的查询)。这意味着即使当前加载的User实例也没有看到该命周期回调被触发。 ...为了确保实际调用生命周期查询,deleteByRoleId()的调用执行一个查询,然后逐个删除返回的实例,这样持久性提供者就可以对这些实体实际调用@PreRemove回调。 ...实际上,派生的delete查询是执行查询并在结果上调用CrudRepository.delete(Iterable users)并保持行为与CrudRepository中其他delete()
领取专属 10元无门槛券
手把手带您无忧上云