2 clcurie 11 clcurie_11 于 2013.04.23 14:53 提问

在数据库中省略符号和选择数据时程序崩溃

我从 sqlite 数据库中选择数据。问题是当数据库中有省略符号,比如 " I' m John " ,当我选择数据时,程序就崩溃。
当程序中没有省略符号,一切都运行正常。
选择数据的函数:

String query = "SELECT * FROM " + mainCollumn  + " WHERE used=0 " + " AND season <= " + seasons + " ORDER BY RANDOM() LIMIT " + count ;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(query, null);

    if(cursor.moveToFirst()){
        do {
            Question question = new Question(Integer.parseInt(cursor.getString(0)),
                    cursor.getString(1),cursor.getString(2),cursor.getString(3),cursor.getString(4),cursor.getString(5),
                    Integer.parseInt(cursor.getString(6)));

            questionList.add(question);
        }while(cursor.moveToNext());
    }

2个回答

myq_26
myq_26   2013.04.23 16:31

你可以用双倍的省略符号代替省略号,但是最好的方法是使用 query() 的 selectionArgs 代替 rawQuery()。

SQLiteDatabase db = this.getReadableDatabase();
String[] columns = new String[] {column1, column2}; // the columns you want
Cursor cursor = db.query(mainCollumn, String[] columns, "used=0 and season<=?", new String[] {seasons}, null, null, "RANDOM() LIMIT " + count);
zyc13701469860
zyc13701469860   2013.04.24 14:18

是单引号‘的问题
解决办法
在写SQL语句之前检查一下参数,把参数中所有的单引号替换成2个单引号。
如:
" I' m John " -> " I'' m John "

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在数据库中条件查询很慢的时候,如何优化
在数据库中条件查询很慢的时候,如何优化 1.建索引(a 提高查询检索的性能b 创建唯一索引c 创建主键d 归类) 2.减少表之间的关联 3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询, 应该走索引,把数据量大的表排在前面 4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽 量返回少量数据
对于事务,无法在数据库 '' (数据库 ID 为 )的页 重做日志记录页: LSN =类型 = 2日志:
对于事务 ID (0:7597567),无法在数据库 'yyyy' (数据库 ID 为 10)的页 (1:119539) 上 重做日志记录 (96116:41:32)。页: LSN = (96079:253:17),类型 = 2。日志: 操作码 = 2 ,上下文 3,上一页的 LSN: (96115:486:32)。请从数据库备份还原该数据库,或者修复它
数据库系统数据产生不一致的根本原因
数据不一致性是指数据的矛盾性、不相容性。 产生数据不一致的原因主要有以下三种:一是由于数据冗余造成的;二是由于并发控制不当造成的;三是由于各种故障、错误造成的。 根本原因:数据冗余
导致数据库中数据不一致的根本原因
数据库中很有可能存在不一致的数据。   一般导致数据库中数据不一致的根本原因有三种情况。第一种是数据冗余造成的,第二种是并发控制不当造成的,第三种是由于某种原因(比如软硬件故障或者操作错误)导致数据丢失或数据损坏。   让我们具体讲讲这三种情况: 第一种情况:数据冗余 假如数据库中两个表都放了用户的地址,在用户的地址发生改变时,如果只更新了一个表的数据,那么两个表就有了不一致的数据。
数据库中的view, index
1. 视图就是数据中表的窗口,在表上的查询所形成的一个数据集体。 通过视图,你将看到你所需要的信息,而排除其它不关心的内容。 使用视图的好处就是: 将表中所需要的列和行选取出来传递给用户。不是真正将数据重新复制一遍,不占用存储空间。不仅在表的基础上建立,还可在视图的基础之上再建立视图。 那使用视图的主要目的是: 保护数据安全,防止机密数据泄露。简化数据查询方式
如何向数据库中插入和读取图片2
传aspx                             onclick="btnAdd_Click"> 上传图片部分 string connstr = @"Data Source=WANGRUI-PC\WANGRUI;Initial Catalog=JingDong;Persist Security Info=True;User ID=sa;Password=admin"
尝试在数据库5 中提取逻辑页() 失败。该逻辑页属于分配单元xxx而非xxx
此信息表明数据库或表 已经部分损坏可以通过以下步骤尝试修复:  1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。  use master declare @databasename varchar(255) set @databasename='需要修复的数据
【数据库新手】关于创建数据库过程失败,“master”中拒绝了CREATE DATABASE权限问题
问题描述:SQL server身份验证模式下登入,创建数据库报错:“master”拒绝了CREATE DATABASE权限问题。 解决方案:首先,用windows模式重新登入,点击“安全性->登录名”,然后会有一个登录名的下拉列表, 然后,双击你上次出错的登录名,会出现如下界面: 选择“服务器角色”,然后会出现如下的界面,在上边全部打勾(PS:新手不懂就全部打
jsp对数据库的增删改查
jsp获取前端页面的数据,存储在数据库中,并对数据库中的数据进行增删改查操作
mybatis执行sql检索不到数据,在数据库能成功检索到
在开发中遇到了这个问题,进行检索的时候,mybatis检索返回结果为空,但是把打印的sql放在数据库里执行能检索到数据,百度了才发现,是连接数据库的时候没有设置字符编码 在jdbc.properties中,url后面加上?autoReconnect=true&useUnicode=true&characterEncoding=utf8 driver=com.mysql.jdbc.Driver