Android sqlite create table时指定类型的一个好处

用个例子来解释下最近遇到一个问题。

在android sqlite3命令行中执行create table t(a)创建表。这里不指定a的具体类型。

然后执行insert into t values(0)。

如果我在sqlite3命令行中使用"select * from t where a = 0",能查询成功;如果是“select * from t where a=‘0‘”,则失败。

原因是我在调用values.put("a", 0);时,0是整型,所以数据库中认为是数字。所以where中使用‘0‘,数据库不知道该column应该使用什么类型,所以不会转化成数字,所以查询不到东西。

如果create table t(a integer),具体指定a的类型为integer,则两条语句都会查询成功。

因为sql解析器知道该列的具体类型,所以即使指定string的‘0‘进来,仍然可以自动转化为数字0,然后再查询。

在java编写程序的时候的时候,因为SQLiteDatabase.rawQuery中如果指定sql参数必须为String类型,所以如果在创建table时不指定具体类型,那string就不会自动转化为数字,那么查询就会失败。

时间: 2024-11-01 22:13:20

Android sqlite create table时指定类型的一个好处的相关文章

mysql5.5基础 create table... 在指定数据库创建一个表

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜. 数据.数据,命根就在数据.操作数据库一定要谨慎小心.给最苦 这里的代码,看看就好,要有自己的判断.遇到抉择,要不耻上下问. mysql:5.5                     os:Windows7 x64 数据库现状 mysql> show databases; +--------------------+ | Databa

mysql create table - data_type length -- clwu

mysql create table 时,有时需要指定  data_type length http://dev.mysql.com/doc/refman/5.5/en/create-table.html 但 类型的长度很多开发并不理解,理解上可以分为两种 1)数字类型: 如 int 是 4个byte,32个bit, 对于 signed int     它的最大值是 2**32-1=4294967295,带符号显示为 +4294967295 刚好是 11 个字符, 对于 unsigned int

Android Sqlite数据库加密

Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收费工具: SSE(SQLite Encryption Extension) 免费工具: SQLCipher SQLCipher使用: SQLCipher是完全开源的软件,提供256-bit AES加密 源码编译: 1. OpenSSL编译 SQLCipher源码编译需要依赖OpenSSL提供的lib

SQL高级应用(CREATE DATABASE、CREATE TABLE)

SQL CREATE DATABASE CREATE DATABASE 用于创建数据库,语法如下 CREATE DATABASE database_name 例子:创建一个名为 db_test的数据库 CREATE DATABASE db_test 可以通过 CREATE TABLE 来添加数据库表. SQL CREATE TABLE CREATE TABLE 语句用于创建数据库中的表,语法如下 CREATE TABLE table_name ( 列名称1 数据类型, 列名称2 数据类型, 列名

Mysql Create Table 语句中Date类型

Mysql创建语句中的数据类型包括时间类型,有一下几类: | DATE  | TIME[(fsp)]  | TIMESTAMP[(fsp)]  | DATETIME[(fsp)]  | YEAR 这几个类型中,特别值得注意的是DATE,DATETIME,TIMESTAMP有什么区别? DATE mysql> select get_format(date,'ISO');     +------------------------+ | get_format(date,'ISO') | +-----

Android Sqlite对Date类型操作总结

首先,sqlite数据库在时间处理上和sqlserver还有oracle不同,下面根据自己做过的实例总结一下. 创建了一个Log数据表: LogID SourceID OperatorID LogType LogLevel LogTime              LogContent 1 aaa.aspx 0 2 1 2011-08-18 16:44:32.000 aaaa 2 bbb.aspx 1 2 2 2011-08-18 16:38:32.000 bbbb 3 ccc.aspx 2 3

VC2010打开资源视图时提示“指南必须指定类型”,.rc资源文件损坏(转)

VC: 打开资源视图时提示“指南必须指定类型 ”(Guideline……specify type) ,.rc资源文件损坏 可能是TFS导致的 使用记事本打开.rc文件,找到“DESIGNINFO”节,会看到如下的数据:    BEGIN          , 50          , 13798327    END这就是错误原因. 解决方法:1. 参考此前的源码备份版本,并修改上面的错误数据.2. 对于无法修改的,可以直接去掉中间的数字,如下: BEGIN    END

C#把对象类型转化为指定类型,转化失败时返回该类型默认值

/// <summary> ///通用类型扩展方法类 /// </summary> public static class ObjectExtensions { /// <summary> ///把对象类型转化为指定类型,转化失败时返回该类型默认值 /// </summary> /// <typeparam name="T"> 动态类型 </typeparam> /// <param name="v

【翻译自mos文章】在12c中Create or Truncate Table时非常慢,等待事件为 DFS Lock Handle wait

来源于: Create or Truncate Table Slow in 12c While Waiting for DFS Lock Handle wait (文档 ID 2085308.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.2 and later Information in this document applies to any platform. SYMPTOMS In 12c dat