尝试编写 java 代码,使用 switch 到来自 sqlite 数据库的 select 数据
Trying to write java code that uses a switch to select data from sqlite database
我正在尝试使用 JDBC 从数据库中查询数据,但我无法让 SELECT SUM() 在第三个开关案例上工作。所有其他情况和第三种情况下的 SELECT 金额工作得很好,但是当我尝试使用 SELECT SUM(amount) 时,它给出错误“没有这样的列:'amount'”。
这是我的代码:
package net.sqlitetutorial;
import java.util.Scanner;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLMain {
private Connection connect() {
String url = "jdbc:sqlite:C://sqlite/db/test.db";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
public void selectAll(){
String sql = "SELECT name, amount FROM names ORDER BY amount desc";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getString("name") + "\t" +
rs.getInt("amount"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public void selectNames(){
String sql = "SELECT name FROM names ORDER BY name";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public void selectAmount(){
String sql = "SELECT sum(amount) FROM names";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getInt("amount"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
SQLMain app = new SQLMain();
int number;
Scanner console = new Scanner(System.in);
System.out.println("Choose one by entering a number:\n 1. List all ordered by most popular name first\n 2. List names in alphabetical order");
number = console.nextInt();
switch (number)
{
case 1 :
app.selectAll();
break;
case 2 :
app.selectNames();
break;
case 3 :
app.selectAmount();
break;
default:
System.out.println("Invalid input");
}
}
}
这是它给出的错误:
no such column: 'amount'
在此声明中:
SELECT sum(amount) FROM names
没有返回名称为 amount
的列。
您必须为返回的列设置别名:
SELECT sum(amount) AS amount FROM names
或者,如果不为该列添加别名,您可以通过其索引 1
:
获取其值
System.out.println(rs.getInt(1));
这是因为结果包含 SUM(amount)
而不是列 amount
。
例如,您可以通过将查询更改为
来解决此问题
"SELECT sum(amount) AS amount FROM names"
或者通过索引得到结果
rs.getInt(1);
您的查询确实没有 amount
列 - 它有 sum(amount)
。您可以将别名用作 ,或仅使用索引(请记住 - JDBC 中的列索引是从一开始的):
while (rs.next()) {
System.out.println(rs.getInt(1));
}
我正在尝试使用 JDBC 从数据库中查询数据,但我无法让 SELECT SUM() 在第三个开关案例上工作。所有其他情况和第三种情况下的 SELECT 金额工作得很好,但是当我尝试使用 SELECT SUM(amount) 时,它给出错误“没有这样的列:'amount'”。
这是我的代码:
package net.sqlitetutorial;
import java.util.Scanner;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLMain {
private Connection connect() {
String url = "jdbc:sqlite:C://sqlite/db/test.db";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return conn;
}
public void selectAll(){
String sql = "SELECT name, amount FROM names ORDER BY amount desc";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getString("name") + "\t" +
rs.getInt("amount"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public void selectNames(){
String sql = "SELECT name FROM names ORDER BY name";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public void selectAmount(){
String sql = "SELECT sum(amount) FROM names";
try (Connection conn = this.connect();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
while (rs.next()) {
System.out.println(rs.getInt("amount"));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
SQLMain app = new SQLMain();
int number;
Scanner console = new Scanner(System.in);
System.out.println("Choose one by entering a number:\n 1. List all ordered by most popular name first\n 2. List names in alphabetical order");
number = console.nextInt();
switch (number)
{
case 1 :
app.selectAll();
break;
case 2 :
app.selectNames();
break;
case 3 :
app.selectAmount();
break;
default:
System.out.println("Invalid input");
}
}
}
这是它给出的错误:
no such column: 'amount'
在此声明中:
SELECT sum(amount) FROM names
没有返回名称为 amount
的列。
您必须为返回的列设置别名:
SELECT sum(amount) AS amount FROM names
或者,如果不为该列添加别名,您可以通过其索引 1
:
System.out.println(rs.getInt(1));
这是因为结果包含 SUM(amount)
而不是列 amount
。
例如,您可以通过将查询更改为
来解决此问题"SELECT sum(amount) AS amount FROM names"
或者通过索引得到结果
rs.getInt(1);
您的查询确实没有 amount
列 - 它有 sum(amount)
。您可以将别名用作
while (rs.next()) {
System.out.println(rs.getInt(1));
}