Android: java. sql .SQLException: нет текущей строки в ResultSet - PullRequest
1 голос
/ 22 апреля 2020

Я получаю следующую ошибку, когда пытаюсь выполнить свой запрос (ы), но я не знаю, почему он выдает следующую ошибку каждый раз, когда я пытаюсь выполнить свой запрос (и). Ошибка также появляется в мой logcat, а не в тосте, как я ожидал.

вот мой код !!

  @Override
        protected String doInBackground(String... strings)  // Connect to the database, write query and add items to array list
        {
            runOnUiThread(new Runnable() {
                public void run() {


                    try {
                        Connection conn = connectionClass.CONN(); //Connection Object
                        if (conn == null) {
                            success = false;
                            msg = "Sorry something went wrong,Please check your internet connection";
                        } else {
                            // Change below query according to your own database.
                            Date c = Calendar.getInstance().getTime();
                            SimpleDateFormat df = new SimpleDateFormat("yyyy/mm/dd");
                            String formattedDate = df.format(c);
                            System.out.println("it isssssssssssssssssssssssssssssssssssssssssaaaaaaaaaaaaaaaaaaaa"+getIntent().getStringExtra("nameid"));
                            String query = "Insert into CustomerSupportChat values('" + formattedDate + "','" + themsg.getText().toString() + "','Customer','3','"+getIntent().getStringExtra("nameid")+"','1','1') " +
                                    "Select MessageID,MessageDate,MessageText,SenderType,MessageRecieved,MessageReaded,Users_Login_Data.Username,StoresData.StoreEnglishName,StoresData.StoreArabicName FROM " +
                                    "CustomerSupportChat INNER JOIN Users_Login_Data ON " +
                                    "CustomerSupportChat.CustomerID = Users_Login_Data.CustomerID INNER JOIN StoresData ON " +
                                    "CustomerSupportChat.StoreID = StoresData.StoreID";
                            String query2 =
                                    "Select MessageID,MessageDate,MessageText,SenderType,MessageRecieved,MessageReaded,Users_Login_Data.Username,StoresData.StoreEnglishName,StoresData.StoreArabicName FROM " +
                                    "CustomerSupportChat INNER JOIN Users_Login_Data ON " +
                                    "CustomerSupportChat.CustomerID = Users_Login_Data.CustomerID INNER JOIN StoresData ON " +
                                    "CustomerSupportChat.StoreID = StoresData.StoreID Where SenderType = 'Store'";

                            Statement stmt = conn.createStatement();
                            Statement stmt2 = conn.createStatement();
                            ResultSet rs = stmt.executeQuery(query);
                            ResultSet rs2 = stmt2.executeQuery(query2);


                            if (rs != null) // if resultset not null, I add items to itemArraylist using class created
                            {
                                while (rs.next()) {

                                    try {
                                        itemArrayList.add(new ClassListChat(rs.getString("MessageDate"), rs.getString("MessageText"), rs.getString("SenderType"), rs2.getString("MessageText")));
                                        themsg.setText("");
                                    } catch (Exception ex) {
                                        ex.printStackTrace();
                                    }
                                }

                                msg = "Found";
                                success = true;
                            } else {
                                msg = "No Data found!";
                                success = false;
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Writer writer = new StringWriter();
                        e.printStackTrace(new PrintWriter(writer));
                        msg = writer.toString();
                        Log.d("Error", writer.toString());
                        success = false;
                    }

                }
            });
            return msg;
        }

Я попытался удалить while и заменить его на оператор if, но он показал мне ту же ошибку , Я также попробовал свой запрос в ms sql, и он успешно выполнен.

EDIT Я решил его, изменив формат даты на MM / dd / yyyy. Но теперь я получаю следующую ошибку:

java.sql.SQLException: No current row in the ResultSet.

Есть идеи?

1 Ответ

0 голосов
/ 22 апреля 2020

Похоже, что в приведенной ниже строке нет нулевой проверки для rs2, поэтому может выдать эту ошибку:

itemArrayList.add(new ClassListChat(rs.getString("MessageDate"), rs.getString("MessageText"), rs.getString("SenderType"), rs2.getString("MessageText")));

Также лучший способ проверить, не вернулась ли ResultSet, что-то вроде этого:

if (rs.next() == false){ 
    msg = "No Data found!";
    success = false;
} else { 
    do { 
        // add items to itemArraylist...
    } while (rs.next());
}

Подробнее: https://javarevisited.blogspot.com/2016/10/how-to-check-if-resultset-is-empty-in-Java-JDBC.html#ixzz6KIFZZHNB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...