我有一个正在处理的作业(并尝试调试)。我有一个JComboBox,我只需要填写ISBN号。数据库返回ISBN,BookTitle,QuantityOnHand和Price。我要创建一个方法(loadCombo),该方法仅用(如我所说的)ISBN号加载comboBox。我写了这个小片段:
public static void loadCombo(JComboBox box)
{
String query = "SELECT * FROM Books";
try
{
result = statement.executeQuery(query);
result.getString(1);
addISBN(result,box);
}
catch(SQLException sqlex) {sqlex.printStackTrace();}
public static void addISBN(ResultSet result,JComboBox box)
{
try
{
while(result.next()) {box.addItem(result);}
}
catch(SQLException e) {e.printStackTrace();}
}
但是,这会引发大量错误。我在这里做错了什么?我以为我要制作一个resultSet(结果),然后获取第一个字段(result.getString(1)),然后将结果集和组合框扔到我的addISBN方法中,这会将结果集添加到我的comboBox中?
所以我做了第一个答案所说的(谢谢您的建议,我想我应该更加仔细地阅读作业!)。但是,我现在在addISBN方法上崩溃了。我的ISBN文字框共有14行
'sun.jdbc.odbc.JdbcOdbcReseltSet@13f9460'
最佳答案
您的UI和组合框不应位于持久码的一百码内。这称为关注点的分层或分离。告诉您的教授,这被认为是现实世界中的最佳实践。
此代码令人发指。我会这样写。请注意,我是如何在创建它们的方法范围内关闭这些资源的。那很重要没有JDBC类应该从持久性包中泄漏出来。将结果加载到数据结构(在这种情况下,是ISBN的字符串列表)。
Java是一种面向对象的语言。 Book模型班在哪里?
package persistence;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
* BookDao
* @author Michael
* @since 4/6/11
*/
public class BookDao
{
public static final String SELECT_ALL_BOOKS = "SELECT * FROM Books";
private Connection connection;
public BookDao(Connection connection)
{
this.connection = connection;
}
public List<String> find() throws SQLException
{
List<String> isbn= new ArrayList<String>();
Statement statement = null;
ResultSet result = null;
try
{
statement = this.connection.createStatement();
result = statement.executeQuery(SELECT_ALL_BOOKS);
while (result.next())
{
isbn.add(result.getString(1));
}
}
finally
{
close(result);
close(statement);
}
return isbn;
}
private static void close(ResultSet result)
{
try
{
if (result != null)
{
result.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
private static void close(Statement statement)
{
try
{
if (statement != null)
{
statement.close();
}
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}