使用'in sqlite存储字符串

时间:2014-11-28 20:18:00

标签: java android sqlite

我的sqlite有问题。在我的应用程序中,我获得语音识别编辑文本,然后将此字符串存储在sqlite中。 它的工作非常好,问题是当我试着说出像#34; don&#t; t"并尝试将其保存到sqlite,应用程序崩溃因为它的sqlite的例外。 任何解决方案

这是语音识别的on活动结果:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case REQ_CODE_TAG_INPUT: {
        if (resultCode == RESULT_OK && null != data) {
            ArrayList<String> result = data
                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            if (!result.get(0).equals("delete all")) {
                et1.setText(et1.getText().toString() + " " + result.get(0));
            } else {
                et1.setText("");
            }
        }
        break;
    }

这是sqlite的保存方法:

if (!et1.getText().toString().equals("")
            && !et2.getText().toString().equals("")) {
        tag = et1.getText().toString();
        des = et2.getText().toString();
        Notes.getInstance().getmNotes()
                .add(new MyNote(tag, des, date, 1, id));
        MyOH oh = new MyOH(getApplicationContext());
        mDb = oh.getWritableDatabase();
        if (MainActivity.state == 1) {
            mDb.execSQL("UPDATE note SET tag='" + tag + "',des='" + des
                    + "',time='" + date + "',noteid=" + id
                    + " WHERE noteid = " + id);
        } else {
            mDb.execSQL("INSERT INTO note VALUES ('" + tag + "','" + des
                    + "','" + date + "'," + id + ")");
        }

这是例外:

引起:android.database.sqlite.SQLiteException:near&#34; t&#34 ;:语法错误(代码1):,同时编译:INSERT INTO note VALUES(&#39; No Tag&#39;, &#39;不要&#39;吨&#39;&#39 28 /二千零十四分之十一&#39;, - 133663026

感谢您的帮助!!

1 个答案:

答案 0 :(得分:2)

你可以简单地加倍&#39; 即:don''t
像这样:des = des.replace("'", "''");

或者,更好的是,您可以在SQL命令中使用绑定参数 像这样:

if (MainActivity.state == 1)
{
    mDb.execSQL("UPDATE note SET tag = ?, des = ?, time = ?, noteid = ? WHERE noteid = ?", new String[]{tag, des, date, id, id});
}
else
{
    mDb.execSQL("INSERT INTO note (tag, des, time, noteid) VALUES (?, ?, ?, ?)", new String[]{tag, des, date, id});
}

绑定参数会阻止您的代码进行SQL注入,并为您执行自动类型转换 不仅:绑定参数还会阻止所有这些字符串连接,这是一个性能吸盘。