如何在 setString 中调用方法

How do I call a method within a setString

我正在尝试使用 setString 从另一个 class 调用方法,但我收到一条错误消息,指出无法解析为变量。

在我的标签 class 中,我有:

import java.util.List;
import models.Book;


public class Tag {

    private String isbn_13;
    private String tag_name;
    
    public Tag(String isbn, String tagName) {
        this.isbn_13 = isbn;
        this.tag_name = tagName;
    }
    
    public Tag() {
        this.isbn_13 = null;
        this.tag_name = null;
    }
    
    public String getIsbn13() {
        return isbn_13;
    }

    public void setIsbn13(String isbn) {
        this.isbn_13 = isbn;
    }
    
    public String getTag() {
        return tag_name;
    }
    
    public void setTag(String tagName) {
        this.tag_name = tagName;
    }
    
    public void add(List<Tag> book_tags) {
        // TODO Auto-generated method stub
        
    }

}

现在,在我的 TagImpl class 中,相关方法是

public boolean addTag(Tag tag) {
        try {
            connection = DAOUtilities.getConnection();
            String sql = "INSERT INTO Book_tags VALUES (?, ?)"; 
            stmt = connection.prepareStatement(sql);
            
            stmt.setString(1, tag.setIsbn13(isbn)); // Error here "isbn cannot be resolved to a variable"
            stmt.setString(2, tag.setTag(tagName)); // Error here "tagName cannot be resolved 
                                                    // to a variable"
            
            if (stmt.executeUpdate() != 0)
                return true;
            else
                return false;
            
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        } finally {
            closeResources();
        }
    }

我看了所有我能想到的文档和能找到的教程,看起来都是正确的。唯一的区别是其中一些显示空括号,即 stmt.setString(1, tag.setIsbn13());但这只是给出了一个不同的错误,“类型标签中的方法 setIsbn13(String) 不适用于参数 ()”此外,如果我将 (isbn) 更改为 (isbn_13) 或 ( tagName) 到 (tag_name) - 它仍然“无法解析为变量。

您必须从标签中获取 isbn_13tag_name 并设置到 stmt

替换

stmt.setString(1, tag.setIsbn13(isbn)); 
stmt.setString(2, tag.setTag(tagName));

stmt.setString(1, tag.getIsbn13()); 
stmt.setString(2, tag.getTag());

我不确定你想用 setIsbn13 调用做什么。我认为您只需要 tag.getIsbn13()。您是否希望从标签中获取 Isbn13 值并将其发送到 stmt.setString() 函数?据推测,您的方法已通过标记,该标记已经填充了值,并且您想在 preparedStatement 中使用这些值。

你手上没有任何名为isbn的东西,这是问题所在。但即使你这样做了,你仍然会有麻烦,因为 setIsbn13 方法 returns 是一个空值,然后你试图将结果传递给 stmt.setString。那也会出错。

我假设您正在尝试这样做。您可以内联调用,但我创建了一个新的局部变量以使其更清楚发生了什么。

public boolean addTag(Tag tag) {
    try {
        connection = DAOUtilities.getConnection();
        String sql = "INSERT INTO Book_tags VALUES (?, ?)"; 
        stmt = connection.prepareStatement(sql);

        String isbn = tag.getIsbn13();
        String tagName = tag.getName();  // You named this getTag, but please change it.
        
        stmt.setString(1, isbn); 
        stmt.setString(2, tagName);
        
        if (stmt.executeUpdate() != 0)
            return true;
        else
            return false;
        
    } catch (SQLException e) {
        e.printStackTrace();
        return false;
    } finally {
        closeResources();
    }
}