Почему я получаю эту ошибку: E / ERROR: метод executeQuery должен возвращать набор результатов.? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь связать свой проект с базой данных SQL-Server.Но я всегда получаю эту ошибку E / ERROR: метод executeQuery должен возвращать набор результатов.

Class.forName("net.sourceforge.jtds.jdbc.Driver");
        String username = "un";
        String password = "pass";

        conn = DriverManager.getConnection("jdbc:jtds:sqlserver://ip/db;user=" + username + ";password=" + password);

        Log.w("Connection","open");

        String sql = "INSERT INTO TABLE" +
                "(Cliente, NomePessoa, Email, NivelSatisfacao, Nota) " +
                "VALUES ('" + informacao.getNomeCliente() + "', '" + informacao.getNome() + "', '" + informacao.getEmail() + "', '" + informacao.getSatisfacao() + "', '" + informacao.getNota() + "') ";
        Statement stmt = conn.createStatement();
        ResultSet rSet = stmt.executeQuery(sql); // error here

Я пытался изменить stmt.executeQuery на stmt.executeUpdate, но он подчеркивает его красным и говорит:что вывод int, поэтому он несовместим.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Использование PreparedStatement намного безопаснее.

Class.forName("net.sourceforge.jtds.jdbc.Driver");
    String username = "un";
    String password = "pass";

    conn = DriverManager.getConnection("jdbc:jtds:sqlserver://ip/db;user=" + username + ";password=" + password);

    Log.w("Connection","open");

    String sql = "INSERT INTO TABLE" +
            "(Cliente, NomePessoa, Email, NivelSatisfacao, Nota) " +
            "VALUES (?, ?, ?, ?, ?)";

    try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, informacao.getNomeCliente())
        pstmt.setString(2, informacao.getNome())
        pstmt.setString(3, informacao.getEmail())
        pstmt.setString(4, informacao.getSatisfacao())
        pstmt.setString(5, informacao.getNota())

        int result = pstmt.executeUpdate();

    } catch (SQLException e) {
                e.printStackTrace();
    }
0 голосов
/ 10 мая 2019

Я думаю, вам следует использовать метод executeQuery при запросе таблиц в базе данных (если у вас есть ключевое слово SELECT). Если вы хотите выполнить операторы SQL (например, INSERT, UPDATE и другие), вы должны использовать метод execute, как показано в здесь .

В вашем случае вы можете попробовать:

Boolean rSet = stmt.execute(sql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...