我有一个SQL Lite数据库,包含我需要计数的特定值。我只需要一次,与某个值有关。如果我在数据库中写入以下请求:
SELECT count(Global_Sales) FROM Data WHERE Platform =='PC';
我得到了我需要的,但是如果我在函数中使用相同的请求,所有的请求都保存在一个txt文件中,它会说:
no such column: 'count'
我使用的代码:
try(Connection conn = DriverManager.getConnection(url))
{
Path pathRQ = Paths.get("resources/BaseRequests.txt");
requests = Files.readAllLines(pathRQ, StandardCharsets.UTF_8);
Statement stm = conn.createStatement();
for(int i =0; i < requests.size();i++)
{
Value.add(stm.executeQuery(requests.get(i)).getInt("count"));
}
}
catch(SQLException ex )
{
System.out.println(ex.getMessage());
}
catch(IOException ex )
{
System.out.println(ex.getMessage());
}
我尝试将“count”更改为“Global_Sales”-相同的消息显示,只是文本稍有不同。我不知道为什么会发生这种情况,可能是因为数据库中的所有值都保存为“TEXT”,也可能是因为我在这里的代码中做了一些错误。问题是-如何修复此问题?
3条答案
按热度按时间3gtaxfhh1#
你能试试吗?
据我所知,由于一次只返回一个值(1行,1列),您应该能够使用上面的代码片段
f1tvaqid2#
使用列的别名:
然后你可以用它来得到这个值
顺便说一句:SQL中的相等检查将由一个相等符号而不是两个来完成。
qyuhtwio3#
count
不是列的名称。列的名称为count(Global_Sales)
。正如其他人所说,你可以添加一个column alias,但是你不需要列名。接口
java.sql.Statement
中的方法executeQuery返回一个ResultSet
。首先,你需要调用方法next,然后你可以调用方法getInt(int)并使用列索引而不是列名。我不能测试上面的代码,因为我没有你的SQLite数据库的副本,我也不能模拟一个,因为你问题中的代码不是minimal, reproducible example,但我认为为每个[SQL]查询创建一个新的、单独的
Statement
可能更好。还建议在代码引发异常时打印整个堆栈跟踪,而不是仅打印错误消息。请注意,某些异常没有消息,因此对于此类异常,仅打印消息与完全忽略异常是一样的。