java - SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效
问题描述
我有一个名为“事务”的表。它有 5 个属性:Date、Description、Amount、Clientname、Transaction_ID,其中 Transaction_ID 是主键。在示例数据中,客户名称“John Smith”有两笔交易,他每笔花费 100.10 和 56.56。SQL Query 在 PHPMyAdmin 中返回 156.66 的预期结果,但 JDBC 似乎无法在 ResultSet 中识别它。
这是我的代码:
public void calculate_client_spending() throws SQLException {
ConnectionClass Databaseloader = new ConnectionClass();
Databaseloader.getConnection();
String sql = "SELECT SUM(Amount) AS total FROM Transactions WHERE Clientname = 'John Smith';";
ResultSet rs = Databaseloader.executeSQLRequestCommand(sql);
// rs.next();
// System.out.println(sum);
ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();
System.out.println(numberOfColumns);
// get the column names; column indexes start from 1
for (int i = 1; i < numberOfColumns + 1; i++) {
String columnName = rsMetaData.getColumnName(i);
// Get the name of the column's table name
if ("total".equals(columnName)) {
System.out.println("Bingo!");
rs.last();
int count = rs.getRow();
rs.beforeFirst();
System.out.println(count);
while (rs.next()) {
Results_trasactions.setText("");
System.out.println("The total profits today are: " + rs.getString(1));
}
}
}
}
此查询在此示例中返回 null,但如果我执行 rs.getDouble(1),它将返回 0。知道问题可能出在哪里吗?我能够使类似的 SUM 查询工作,例如所有客户端的 SUM 和 WHERE 子句似乎适用于我的主键,但是即使 SQL 在 PHPmyadmin 中有效,这个特定的 Query JDBC 似乎也不喜欢它这让我想相信这是一个 Java 问题而不是 SQL 问题。任何帮助将不胜感激。
解决方案
由于不幸的是,这对于评论来说太长了:
不是刻薄的意思,但也许您不应该创建一个新帐户来再次回答您已删除的问题(https://stackoverflow.com/questions/59570469)-> Google 缓存-此外,您正在使用的数据库类给离开你的“真实”帐户(如何检索代表结果集中总和的“总”变量) - 所以我再次投票结束这个问题。
但是,至少有一些提示:
ConnectionClass Databaseloader = new ConnectionClass();
Databaseloader.getConnection();
Databaseloader 不是任何默认的 JDBC 类,而是一些(写得不好)的静态类,对我来说它看起来像是一个奇怪的包装器。你可以做到,但无论如何你都不会静态地做到这一点。通过将这些方法放到 Google 中,你会发现:几乎什么都没有。
对于 mySQL,您将获得这样的数据库连接:
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "sa", "sa")
而是使用连接对象。
我建议您执行以下操作:
- 阅读如何用 Java 连接数据库
- 阅读如何创建和执行准备好的语句
- 阅读如何从结果集中提取结果
- 告知自己有关参数绑定的信息(避免 SQL 注入)
- 利润!
所有这些主题都在 stackoverflow 上得到了很好的介绍。
推荐阅读
- selenium - 是否可以在 xpath 中使用算术运算符?
- javascript - 如何使用对象并创建不同颜色的正方形
- class - UITests 助手类中的扩展与类
- symfony - LDAP 过滤器破坏 Symfony 上的 LDAP 绑定
- php - PHP - 分配变量并使用它为数组赋值
- android - Ionic 应用程序未在 Android 设备中打开(崩溃)
- java - 使用 Java-8 获取最重要的十进制数字
- javascript - 如何修复“错误:EISDIR:对目录的非法操作,读取”错误?
- docker - 在 docker 容器外执行外部服务
- rest - 是否可以使用带有传递替换变量的 rest api 运行云构建?