首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用SQLitestatement bindstring方法而不是简单的字符串连接来执行sql语句有什么好处?

使用SQLitestatement bindstring方法而不是简单的字符串连接来执行sql语句有什么好处?
EN

Stack Overflow用户
提问于 2019-06-07 23:38:05
回答 1查看 661关注 0票数 1

我想在Android的SQLite数据库中插入一个表中的值,我想问一下,从下面给出的两种方法中,我应该选择哪种方法。我从一门课程中学到了第一种方法,但我想用第二种方法,这就是我问这个问题的原因

articleId、articleContent和articleTitle都是string类型。

如果您需要的话,请指定每种方法的优缺点,如果can.You可能建议另一种方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String sql = "INSERT INTO articles (articleId, title, content) VALUES (?, ?, ?)";
SQLiteStatement statement = articlesDB.compileStatement(sql);
statement.bindString(1, articleId);
statement.bindString(2, articleTitle);
statement.bindString(3, articleContent);
statement.execute();

或者简单地使用字符串连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqliteDatabase.execSQL("INSERT INTO articles (articleId, title, content) VALUES (" + articleId + ", " + articleTitle + ", " + articleContent + ")");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-07 23:52:25

是的,建议始终使用bindString() ,以避免通过SQL注入在数据库中进行攻击。

在您的特定情况下,似乎要插入的值仅来自您的代码,而不是来自任何动态输入源--例如用户输入。在这种情况下,使用您在问题中提到的任何方法都是安全的。

在您的示例中,您也可以使用来自insert()SQLiteDatabase类来代替字符串连接,这是安全的,不会出现任何语法错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("articleId", articleId);
values.put("title", articleTitle);
values.put("content", articleContent);
db.insert("articles", null, values);

它返回新插入行的行ID,如果发生错误,则返回-1。

但是,如果从用户输入中获取值,则使用字符串连接将使数据库完全易受潜在攻击者的攻击。这就是为什么我们总是建议使用SQLiteProgram类的SQLiteProgram方法来执行我们需要传递值的sql。

另一个原因是,bindString()可以调用java.lang.IllegalArgumentException。因此,在发生语法错误时,使用此方法可以帮助进行异常处理和调试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56504477

复制
相关文章
python json转字符串_在python中将json转换为字符串
一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用str()和json.dumps()。
全栈程序员站长
2022/11/16
10.3K0
在 Python 中将一个 Legendre 系列添加到另一个 Legendre 系列
要将一个 Legendre 系列添加到另一个系列,请使用 Python 中的 polynomial.legendre.legadd() 方法 嘟嘟。该方法返回一个数组,表示其总和的勒让德系列。
很酷的站长
2023/02/23
5520
在 Python 中将一个 Legendre 系列添加到另一个 Legendre 系列
常用的JVM参数选项
栈 -Xss128k <==> -XX:ThreadStackSize=128k 设置线程栈的大小为128K
一个风轻云淡
2023/10/15
3430
常用的JVM参数选项
linux常用命令之文件管理默认情况选项参数注意用法选项用法选项用法参数注意用法选项用法选项注意用法选项注意
LS ls:list directory contents 默认情况 默认情况下显示的是mtime 选项 -a 列出全部文件及目录包括隐藏的 -l 列出详细信息,包括文件类型、权限、节点、owner、group、size(b)、修改日期、文件名 -d 列出目录本身,且不列出目录下的内容 -h size用易读的单位 表示,如kg -F 列出文件类型-S按大小从大到小排序 -t  按更新时间从新到旧排序 -r 以相反的顺序排序 -i 显示inode号码 –time=atime 显示访问时间 –time=ct
用户1174983
2018/02/05
2.6K0
jQuery 选项卡插件 FengTab by FungLeo
好无聊啊,权当练手,写了一个选项卡插件 Html 结构 <h2>Demo 1</h2> <div id="FengTab" class="FengTab"> <ul class="tab"> <li>Title 1</li> <li>Title 2</li> <li>Title 3</li> <li>Title 4</li> </ul> <div c
FungLeo
2022/11/28
1.3K0
jquery nicescroll 配置参数
jQuery滚动条插件兼容ie6+、手机、ipad http://www.areaaperta.com/nicescroll/ jQuery(function($){ $("#scrollInner").niceScroll({ touchbehavior:false, cursorcolor:"#398F70", cursoropacitymax:1, cursorwidth:5, cursorborder:
deepcc
2018/05/16
4.1K0
删除所选项(附加搜索部分的jquery)
1.视图端(views)的配置为: <script> $(document).ready(function() { $("#info-grid").kendoGrid({ dataSource: { type: "json",
wfaceboss
2019/04/08
9370
jquery ajax参数详解
type:boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
别团等shy哥发育
2023/02/25
2.5K0
python中将字符串转为json对象并
string =" {   "status": "error",   "messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],   "code": 404
py3study
2020/01/09
1.2K0
Shell脚本的参数和选项
Shell脚本是一种常用的自动化工具,用于编写各种任务和批处理脚本。Shell脚本支持参数和选项,可以让我们更灵活地控制脚本的行为。本文将详细介绍Shell脚本中的参数和选项,包括基本语法、使用方法和示例。
玖叁叁
2023/04/10
2.4K0
python中将 \\uxxxx转换为 Unicode字符串
今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下:
渔父歌
2018/09/26
2.3K0
在Java中将ArrayList转换为Array
In this tutorial you will learn how to convert ArrayList to Array in Java.
用户7886150
2021/04/29
1.7K0
如何在Python中将列表转换为字符串?
Python provides different variable type for programmers usage. We can use int, float, string, list, set … data types in our applications. While using different type of variables we may need to convert then to different types. In this tutorial we will different type of conversion from list to string in Python.
全栈程序员站长
2022/08/12
4.5K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
在开始之前,让我们先了解一下 PATH 变量的基本概念。PATH 变量是一个由冒号分隔的目录列表,系统将按照这个列表的顺序搜索可执行文件。当我们在终端输入一个命令时,系统会按照 PATH 变量中的目录顺序逐个搜索,直到找到与命令名称匹配的可执行文件或者搜索完所有的目录。
网络技术联盟站
2023/09/06
2.7K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
jquery中ajax参数详解
title: $.ajax参数详解 date: 2017-04-08 15:25:57 tags: ajax categories: ajax
念念不忘
2019/03/29
2.1K0
如何在 Bash 中将字符串计算为数字?
当您尝试在 bash 中进行算术运算时,这会产生问题,您尝试添加的数字会给您带来奇怪的结果。
网络技术联盟站
2022/04/21
1.5K0
如何在 Bash 中将字符串计算为数字?
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
在 Linux 系统中,PATH 变量是一个非常重要的环境变量,用于指定系统在执行命令时搜索可执行文件的路径。默认情况下,系统会在预定义的一组目录中查找可执行文件。但是,有时候我们可能需要将自定义的目录添加到 PATH 变量中,以便系统能够找到我们自己创建的可执行文件。在本文中,我们将学习如何在 Linux 中将目录添加到 PATH 变量,以便能够方便地执行自定义的命令。
网络技术联盟站
2023/06/09
2.5K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
python中将字符串转为json对象并取值
"messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],
用户7886150
2021/01/16
2.2K0
如何在 JS 中将字符串切割成字符?
(10) ["D", "r", "a", "g", "o", "n", " ", "�", "�", " "]
酷酷的哀殿
2020/10/26
1.4K0
如何在 TypeScript 中将字符串转换为日期对象?
在应用程序中,我们经常需要将日期字符串转换为日期对象。在 TypeScript 中,由于类型系统的存在,这个过程可能需要一些额外的步骤。在本文中,我们将讨论如何在 TypeScript 中将字符串转换为日期对象,并解决在此过程中可能遇到的一些问题。
网络技术联盟站
2023/06/07
3.5K0

相似问题

Windows窗体和WCF服务

12

WCF请求来自windows窗体,而不是windows服务。

12

WCF:从服务内部访问windows窗体

22

WCF,从服务访问windows窗体控件

50

使用wcf服务Windows窗体应用程序

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文