如何在 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_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() 函数?据推测,您的方法已通过标记,该标记已经填充了值,并且您想在 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();
}
}
我正在尝试使用 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_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() 函数?据推测,您的方法已通过标记,该标记已经填充了值,并且您想在 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();
}
}