首页 > 解决方案 > 为什么我会收到此错误:E/ERROR:executeQuery 方法必须返回结果集。?

问题描述

我正在尝试将我的项目与 SQL-Server 数据库连接起来。但我总是收到此错误 E/ERROR: The executeQuerymethod 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

我尝试更改stmt.executeQuerystmt.executeUpdate,但它在红色下划线,并表示输出为int,因此不兼容。

标签: javaandroidsql-server-2008compiler-errors

解决方案


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

推荐阅读