java - 为什么我会收到此错误:E/ERROR:executeQuery 方法必须返回结果集。?
问题描述
我正在尝试将我的项目与 SQL-Server 数据库连接起来。但我总是收到此错误 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
我尝试更改stmt.executeQuery
为stmt.executeUpdate
,但它在红色下划线,并表示输出为int
,因此不兼容。
解决方案
使用 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();
}
推荐阅读
- python - Facebook Marketing API Ads Insights 到 Python 中的 CSV
- python - Matplotlib:在 hexbin 图中使用最常见值的 bin 组周围添加边框
- google-photos - 用于存档照片的 Google Photos API
- javascript - 403 在 Vue.js + CodeIgniter 4 中被禁止
- tensorflow - 使用 tensorflow 2.5.0 和 nvidia 11.1 / 455 的 GPU 无法与 Debian 10 一起使用
- python - Pandas:删除符合条件的值
- angular - 角垫表示意图问题
- docker - 未找到 Docker Image-pip3
- apache - htaccess 和 htpasswd 保护根子目录
- c++ - 当比较两个版本号时 vnum1=vnum1*10 做了什么