如何将包含撇号的字符串传递给android中的查询?

Posted

技术标签:

【中文标题】如何将包含撇号的字符串传递给android中的查询?【英文标题】:How to pass the string containing apostrophe to query in android? 【发布时间】:2013-12-20 05:36:53 【问题描述】:

我正在开发 android 应用程序。实际上,在我的应用程序中,我从之前存储的 sqlite 数据库中获取数据。但是我的 db 列之一包含带有撇号的字符串。当我传递查询时,当传递带有撇号的字符串时,它会显示错误。

下面是我的代码:

String fest = "Guru Rabindranath's Birthday";

querythefest(fest);

    public void querythefest(String festname) 
        DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(this);
        try 
            dbAdapter.createDataBase();
         catch (IOException e) 
            Log.i("unable to create database", e.getMessage());
        
        dbAdapter.openDataBase();


        query2 = "Select desc from List where name='"+ festname + "'";

        System.out.println("que " + query2);

        arr1 = new ArrayList<ArrayList<String>>();
        arr1 = dbAdapter.selectRecordsFromDBList(query2, null);



        dbAdapter.close();
    

请帮我解决这个问题。

【问题讨论】:

你应该使用这个:String[] festss =new String [] "New Year","Guru Rabindranath's Birthday"; 您的部分问题是您没有使用准备好的语句(您可能对 SQL 注入持开放态度);使用 one 可以解决问题,因为撇号本质上会自动转义。 【参考方案1】:

最简单快捷的方法是用一个额外的单引号来转义每个单引号,如下所示:

String fest = "Guru Rabindranath''s Birthday";

或者你可以使用 rawQuery 方法的 selectionArgs 参数(Sql Injection)

query = "Select desc from List where name = ?";
mDb.rawQuery(query, new String[]  fest );

【讨论】:

嗨,谢谢您的回复...如果我保留单个撇号和一个额外的撇号,那么我需要在数据库中插入相同的撇号吗?还是在数据库中带有单个撇号的字符串就足够了? 多余的撇号只是一个转义字符。【参考方案2】:

您可以通过以下方式转义 ',因此:

"Select desc from List where name ='"+ Daniel O''Neal+ "'"

参考this链接

【讨论】:

以上是关于如何将包含撇号的字符串传递给android中的查询?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中,如何创建包含引号和撇号的 mySQL 选择查询?

如何通过 MySql 传递带有撇号的 C# 变量

将带撇号的 json 值发送到 Web 服务时出现无效对象错误

当查询包含撇号时,NSFetchRequest 会触发 NSInvalidArgumentException

声明包含单引号/撇号的 char 值的最清晰方法

反序列化包含引号和撇号的 JSON 字符串