我的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
感谢您的帮助!!
答案 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注入,并为您执行自动类型转换 不仅:绑定参数还会阻止所有这些字符串连接,这是一个性能吸盘。