尝试编写 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));
}