问题描述
我试图使用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_13
和tag_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();
}
}