Pedro Filipe
Pedro Filipe

Reputation: 3

Why am I getting this error: E/ERROR: The executeQuery method must return a result set.?

I'm trying to connect my project with an SQL-Server database. But I always get this error E/ERROR: The executeQuery method must return a result set.

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

I tried to change stmt.executeQuery to stmt.executeUpdate, but it underlines it red, and says that the output is int, so it is incompatible.

Upvotes: 0

Views: 2036

Answers (2)

J. Adam
J. Adam

Reputation: 1641

Using PreparedStatement is much safer.

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();
    }

Upvotes: 1

RCaetano
RCaetano

Reputation: 683

I think you should use the executeQuery method while querying tables in the database (when you have the SELECT keyword). When you want to execute SQL statements (like INSERT, UPDATE and others) you should use execute method, as seen in here.

In your case you could try:

Boolean rSet = stmt.execute(sql);

Upvotes: 0

Related Questions