Java中带有sum的SQL语句不起作用

Posted

技术标签:

【中文标题】Java中带有sum的SQL语句不起作用【英文标题】:HSQL Statenment with sum in Java doesnt work 【发布时间】:2017-01-11 15:02:39 【问题描述】:

我在我的 java 程序中使用嵌入式 hsql 数据库。 我想写一个这样的hsql语句:

statement.executeQuery("SELECT sum(Points) FROM Table");

一开始我试过这个:

String column = "Points";   

statement.executeQuery("SELECT sum(\""+column+"\") FROM \""+table+"\"");
java.sql.SQLException: Column not found: Points

下一个:

statement.executeQuery("SELECT sum(POINTS) FROM \""+table+"\"");
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: POINTS

下一次尝试,不应该只为你工作:-)

statement.executeQuery("SELECT sum(\'"+column+"\') FROM \""+table+"\"");
java.sql.SQLSyntaxErrorException: incompatible data type in operation

如果我试试这个:

statement.executeQuery("SELECT \""+column+"\" FROM \""+table+"\"");

完美运行

只是为了告诉你我的列存在于我的表中。

此声明:

SELECT sum("Points") as test FROM "MyTable"

在 SQuirrel 客户端版本 3.7 中运行

知道我的问题吗?

【问题讨论】:

【参考方案1】:

在 SQuirrel 中有效的相同语句应该有效。这是与 Java 引用相同的语句:

statement.executeQuery("SELECT sum(\"Points\") FROM \"MyTable\"");

看起来您正在从您的程序和 SQuirrel 连接到不同的数据库。尝试在 SQuirrel 和您的程序中使用相同的数据库文件绝对路径。您不能同时连接,因此您需要在从程序连接之前关闭 SQuirrel 中的数据库。

【讨论】:

这不是问题。当 iam 使用我的 java 程序连接到 DB 时,Squirrel 已关闭。 问题是你没有连接到相同的数据库文件。 问题不是这个!松鼠连接到同一个数据库。我认为 sum 语句需要其他引号。 我已经添加了与你说在 SQuirrel 中有效的语句等效的 Java 感谢您的工作,但您的语句与此语句相同。executeQuery("SELECT sum(\""+column+"\") FROM \""+table+"\""); java.sql.SQLException: Column not found: Points I try your statement got the same Exception【参考方案2】:

这些是我的导入

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

这个语句也没有运行:

statement.executeQuery("SELECT sum(\"Points\") FROM \"MyTable\"");

也许其他人的解决方案:

"SELECT sum(\"Punkte\") as TEST FROM \"Match_Stats\"");   
while(table_01.next())
    players.get(i).setPoints(table_01.getInt("TEST"));

别名 TEST 是关键。

【讨论】:

好的,我明白了!我需要为列点写一个别名。 "SELECT sum(\"Points\") as TEST FROM \"MyTable\"");问题不在于语句,而在于 table_01.getInt("Points")。将其更改为 table_01.getInt("TEST") 并且可以正常工作。有人知道为什么吗? 这是因为sum("Points") 不是名为"Points" 的列。

以上是关于Java中带有sum的SQL语句不起作用的主要内容,如果未能解决你的问题,请参考以下文章

片段中带有 RequestPermission 的 registerForActivityResult 不起作用

Java中的可调用语句不起作用

在 Swift 中带有变量的 NSLocalizedString 不起作用

名称中带有冒号的 XElement 不起作用 [重复]

为啥这条 SQL 语句不起作用?

iphone x中带有intrinsicContentSize的inputAccessoryView不起作用