Android 为什么在SqLite中读取某些内容时会说id,但是';id';创建/更新/删除行时?
我正在创建一个notes应用程序。用户可以输入注释,并将其保存到数据库/显示在屏幕上 我有一个DatabaseHelper类,它包括所有CRUD方法(创建、读取、更新、删除) 当我更新表中的特定注释时,我必须这样做:Android 为什么在SqLite中读取某些内容时会说id,但是';id';创建/更新/删除行时?,android,sql,database,sqlite,Android,Sql,Database,Sqlite,我正在创建一个notes应用程序。用户可以输入注释,并将其保存到数据库/显示在屏幕上 我有一个DatabaseHelper类,它包括所有CRUD方法(创建、读取、更新、删除) 当我更新表中的特定注释时,我必须这样做: db.update("Note", contentValues, "id='"+id+"'", null) 用户id周围有“” 但是,当我查询阅读便笺时,我不必包含“”: 有没有具体的原因?似乎在这两种情况下,我都是指数
db.update("Note", contentValues, "id='"+id+"'", null)
用户id周围有“”
但是,当我查询阅读便笺时,我不必包含“”:
有没有具体的原因?似乎在这两种情况下,我都是指数据库,那么为什么我需要“”呢
谢谢 不需要将数字文字括在单引号中,但字符串文字需要单引号 所以,若id是数字的,就不需要用单引号将其括起来。但是,将数字文字括在引号中并没有什么坏处 因此,假设id为数字,则:-
db.update("Note",contentValues,"id=" + id,null)
有效的工作原理与:-
db.update("Note", contentValues, "id='"+id+"'", null)
但是,建议使用SQLiteDatabase更新
方法,将第4个参数用于where子句参数,以防止SQLite注入。因此,最好使用:-
db.update("Note",contentValues,"id=?",new String[]{id});
SQLite解析器然后适当地处理id,用值替换?,并防止SQLite注入
参见uu和
- 尽管关于绑定参数的解释包括:-
- 常用的是?。这是
更新方法(和其他方法)所期望的
- 这确实意味着在某些情况下,您可能需要将同一个参数化(绑定)参数与?一起编码两次(如果不使用绑定参数,您会这样做)
db.Update(“mytable”,contentvalues,“a=?或b=?或c=?”,新字符串[]{“Fred”,“Mary”,“Tom”})
该方法为您替换了?,(理论上)几乎不可能出错。谢谢。它能填补空缺吗?使用最高参数+1(如文档中所述—“一个问号后面没有数字,则会创建一个数字大于已分配的最大参数数的参数。”)……或者它只是用我们输入的名称数组填充问号(这是一种更直观的方法)?ThanksIt将使用数组中的值,即Fred进入第一个?,Mary进入第二个,Tom进入第三个。。。。(如果?'s的数量与参数的数量不匹配,则出错)。收到了,谢谢。为什么文档中会提到取最高参数并增加“?”参数?如果我们有整数而不是字符串?谢谢
db.update("Note",contentValues,"id=?",new String[]{id});