在android中使用JDBC连接在mySQL上插入行的问题
Posted
技术标签:
【中文标题】在android中使用JDBC连接在mySQL上插入行的问题【英文标题】:Problem with inserting row on mySQL using JDBC connection in android 【发布时间】:2018-10-07 06:07:35 【问题描述】:我在插入时关注了这个人的answer。
这是我的AsyncTask
的代码
private class sendRequest extends AsyncTask<String, String, String>
String z = "";
boolean isSuccess = false;
@Override
protected void onPreExecute()
progressDialog.setMessage("Sending request...");
progressDialog.show();
super.onPreExecute();
@Override
protected String doInBackground(String... params)
try
Connection con = connectionClass.CONN();
if (con == null)
z = "Please check your internet connection";
else
myArrayList.clear();
String query = "insert into notifications (id, suggestion, type, isIgnored) values ('', '"+ sv.getQuery().toString() +"', 'medicine', 'false')";
Statement stmt1 = con.createStatement();
stmt1.executeUpdate(query);
catch (Exception ex)
isSuccess = false;
z = "Exceptions" + ex;
return z;
@Override
protected void onPostExecute(String s)
if(!isSuccess && !z.equals(""))
Toast.makeText(getBaseContext(), z, Toast.LENGTH_LONG).show();
progressDialog.hide();
但是它在下面给了我这个错误消息,我想知道为什么或如何这是一个错误,因为我的查询是插入而不是截断。请帮忙
【问题讨论】:
【参考方案1】:首先,我建议你使用PreparedStatement来设置参数以避免SQL注入
对于您的问题,原因是id
是integer
的类型,但您只是为此传递了''
:
String query = "insert into notifications (id, suggestion, type, isIgnored) values ('', '"+ sv.getQuery().toString() +"', 'medicine', 'false')";
两种解决方法:
一种。为id
传递一个整数值
湾。将id
设为自动递增,并在sql中删除id
,如下所示:
String query = "insert into notifications (suggestion, type, isIgnored)
values ('"+ sv.getQuery().toString() +"', 'medicine', 'false')";
【讨论】:
我看到您删除了id
列,所以这是否意味着您必须先定义 id 对吗?
也许我可以检索 id 的最大值然后增加它。
@Mr.Benbenbenbenben 既然你已经设置了自动增量,只需删除sql中的id
,数据库就会为它创造价值
是的,我做到了!它确实有效,谢谢,我有中型笔记本电脑,所以我被推迟了
这个答案可以通过展示如何使用准备好的语句来解决这个问题来改进。您的回答提到了准备好的语句,但仅根据 OP 的当前代码提供了不安全的解决方案。以上是关于在android中使用JDBC连接在mySQL上插入行的问题的主要内容,如果未能解决你的问题,请参考以下文章
我们可以使用 JDBC 在 Android 中连接远程 MySQL 数据库吗? [关闭]
在 Android 中使用 JDBC 优化 mysql DB 执行
如何使用 Mysql JDBC 驱动程序将 Android 与 MySQL 连接 [重复]