如何在setString

问题描述

我试图使用setString从另一个类中调用方法,但收到一条错误消息,提示无法解析为变量。

在我的Tag班上,我有

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类中,相关的方法

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());但这只是一个不同的错误,“类型Tag中的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()函数?大概是您的方法通过了标记,该标记已经充满了值,并且您想在prepareStatement中使用这些值。

您的手中没有任何名为isbn的东西,这就是问题所在。但是即使您这样做,也仍然会遇到麻烦,因为setIsbn13方法返回的是void,然后您试图将结果传递给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();
    }
}