【问题标题】:Problem with inserting row on mySQL using JDBC connection in android在android中使用JDBC连接在mySQL上插入行的问题
【发布时间】: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();
    }
}

但是它在下面给了我这个错误消息,我想知道为什么或如何这是一个错误,因为我的查询是插入而不是截断。请帮忙

【问题讨论】:

    标签: android mysql jdbc


    【解决方案1】:

    首先,我建议你使用PreparedStatement来设置参数以避免SQL注入

    对于您的问题,原因是idinteger 的类型,但您只是为此传递了''

     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 的当前代码提供了不安全的解决方案。
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2012-12-24
    • 2023-03-11
    • 1970-01-01
    • 2018-08-19
    • 2017-10-08
    相关资源
    最近更新 更多