Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么在SqLite中读取某些内容时会说id,但是';id';创建/更新/删除行时?_Android_Sql_Database_Sqlite - Fatal编程技术网

Android 为什么在SqLite中读取某些内容时会说id,但是';id';创建/更新/删除行时?

Android 为什么在SqLite中读取某些内容时会说id,但是';id';创建/更新/删除行时?,android,sql,database,sqlite,Android,Sql,Database,Sqlite,我正在创建一个notes应用程序。用户可以输入注释,并将其保存到数据库/显示在屏幕上 我有一个DatabaseHelper类,它包括所有CRUD方法(创建、读取、更新、删除) 当我更新表中的特定注释时,我必须这样做: db.update("Note", contentValues, "id='"+id+"'", null) 用户id周围有“” 但是,当我查询阅读便笺时,我不必包含“”: 有没有具体的原因?似乎在这两种情况下,我都是指数

我正在创建一个notes应用程序。用户可以输入注释,并将其保存到数据库/显示在屏幕上

我有一个DatabaseHelper类,它包括所有CRUD方法(创建、读取、更新、删除)

当我更新表中的特定注释时,我必须这样做:

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和

  • 尽管关于绑定参数的解释包括:-
但是,由于容易错误计算问号,因此不鼓励使用此参数格式。鼓励程序员使用下面的一种符号格式或上面的?NNN格式

  • 常用的是。这是
    更新方法(和其他方法)所期望的

    • 这确实意味着在某些情况下,您可能需要将同一个参数化(绑定)参数与?一起编码两次(如果不使用绑定参数,您会这样做)

在SQL查询(或其中的一部分)中,除了使用参数外,根本不应使用字符串连接来获取值。如果id是整数,则不必使用“字符串连接”。如果id是字符串,则需要使用“字符串连接”。但正如前面提到的,不要这样做,你正在打开一个巨大的安全整体。查询参数化查询以了解如何正确操作,查询SQL注入以了解其原因。感谢您的回复!对于此行:db.update(“Note”,contentValues,“id=?”,新字符串[]{id});自从是不鼓励的,我们应该使用参数?NNN来代替,我们是否会使用?4来保留第四个参数的位置,我们将其作为更新函数中的id传入?感谢您没有使用SQLiteDataabse方法,他们只使用?不是和?NNN。我很少看到?NNN用过。e、 g.您可以使用
db.Update(“mytable”,contentvalues,“a=?或b=?或c=?”,新字符串[]{“Fred”,“Mary”,“Tom”})
该方法为您替换了?,(理论上)几乎不可能出错。谢谢。它能填补空缺吗?使用最高参数+1(如文档中所述—“一个问号后面没有数字,则会创建一个数字大于已分配的最大参数数的参数。”)……或者它只是用我们输入的名称数组填充问号(这是一种更直观的方法)?ThanksIt将使用数组中的值,即Fred进入第一个?,Mary进入第二个,Tom进入第三个。。。。(如果?'s的数量与参数的数量不匹配,则出错)。收到了,谢谢。为什么文档中会提到取最高参数并增加“?”参数?如果我们有整数而不是字符串?谢谢
db.update("Note",contentValues,"id=?",new String[]{id});