【问题标题】:What is this error? (Java database application)这是什么错误? (Java 数据库应用程序)
【发布时间】:2017-06-13 13:51:48
【问题描述】:

我有以下代码,我正在尝试从我的数据库中返回数据(itemName、itemId)。然而它给了我以下错误:

Items() in Items cannot be applied to:
Expected         Actual
Parameters:      Arguments:

pool: com.sun.tools.javac.jvm.Pool     itemName (java.lang.String)
code: com.sun.tools.javac.jvm.Code itemId    (java.lang.String)
symtab: com.sun.tools.javac.code.Symtab     quantity (java.lang.String)
types: com.sun.tools.javac.code.Types     cost (java.lang.String)

这是我的代码:

public List<Items> getItemList() throws SQLException{
    try {
        Statement statement = connection.createStatement();
        ResultSet results = statement.executeQuery("SELECT * FROM Items");
        {

            List<Items> itemsList = new ArrayList<>();

            while (results.next()) {
                String itemName = String.valueOf(results.getString("item_name"));
                String itemId = String.valueOf(results.getString("item_id"));
                Items items = new Items(itemName, itemId); // where the error is
                itemsList.add(items);
            }

            return itemsList;
        }

    } catch(Exception e){
        e.printStackTrace();
    }

    return null;
}

是不是因为类型不兼容(对象与字符串)?如果是这样,String.valueOf... 不正确?

编辑

public class Items {

// Constructor
public Items(String itemName, String itemId){
    setItemName(itemName);
    setItemId(itemId);
}

// itemName
private final StringProperty itemName = new SimpleStringProperty(this,"itemName");

public StringProperty itemNameProperty(){
    return itemName;
}

public final String getItemName(){
    return itemNameProperty().get();
}

public final void setItemName(String itemName){
    itemNameProperty().set(itemName);
}

// itemId
private final StringProperty itemId = new SimpleStringProperty(this,"itemId");

public StringProperty itemIdProperty(){
    return itemId;
}

public final String getItemId(){
    return itemIdProperty().get();
}

public final void setItemId(String itemId){
    itemIdProperty().set(itemId);
}


}

【问题讨论】:

  • 构造函数参数的预期类型是什么?
  • 不确定错误格式来自哪里。所以我会根据我的理解猜测它需要 4 个参数,而不是两个参数,而且似乎是 String 以外的其他类型,你是在导入好的 Items 类吗?
  • @JasonD 您对此有何期待? Blasanka,确实没有必要但也不重要,它只会确保这是一个不在池中的字符串
  • 我是唯一一个从未见过这种方式的堆栈跟踪的人吗?
  • @purpleman,我不这么认为。它必须是您的 JVM 实现。无论如何,我不会在您阅读教程时问它是什么。无论如何,一些想法,其中一些已经被其他人指出: 1. 似乎您正在使用错误的参数调用构造函数,但同样,该堆栈跟踪非常奇怪。您可以发布完整的堆栈跟踪吗? 2. String.valueOf 没用,因为 ResultSet.getString 已经产生了字符串

标签: java mysql database javafx


【解决方案1】:

这看起来像是从错误的包中导入 Items 类引起的问题。如果您有表单的导入声明

import some.package.name.Items ;

靠近包含您的第一个代码块的类的顶部,然后删除该行。

如果包含第一个代码块的类与您的Items 类位于不同的包中,那么您需要添加一行

import the.correct.package.Items ;

代替不正确的import 语句。将the.correct.package 替换为包含Items 类的包的名称(在Items.java 中,查看第一行代码,这是一个package 语句,用于定义哪个包包含Items)。

一些背景资料,我推荐Meaning of the import statement in a Java file

【讨论】:

  • 在我离开之前没有得到确认。这也是我的猜测。关于包,请注意,如果它位于未命名/默认包中,则该语句可能会丢失。那么,就无法导入了。
  • @AxelH 是的;对不起,没有看到你的原始评论。我也打算提到默认包,但我决定不想让它更复杂...... :)。 (OP 似乎不太可能将第一个类放在命名包中,将 Items 类放在默认包中,我认为这将是唯一相关的场景。)
  • 我想不通。这对我来说也是个问题!不错的收获!
  • 无需道歉,我很满意 ;) 有一些很好的帖子询问如何从该包中导入类,一个链接可以消除复杂性,但让您在某人之前添加该信息得到那个问题。但不确定这里是否真的需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多