Как запросить базу данных только для одного поля набора результатов?(JAVA ODBC) - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть задание, над которым я работаю (и пытаюсь отладить). У меня есть JComboBox, который мне нужно заполнить только номерами ISBN. База данных возвращает номера ISBN, BookTitle, QuantityOnHand и Price. Я должен сделать метод (loadCombo), который должен загрузить comboBox (как я уже сказал) только номера ISBN. У меня есть небольшой фрагмент:

    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), затем получаю первое поле (result.getString (1)), а затем добавляю набор результатов и комбинированный список в мой метод addISBN, который добавит набор результатов в мой comboBox?

Итак, я сделал то, что сказал первый ответ (спасибо за совет, думаю, мне следует прочитать мои задания немного более внимательно!). Тем не менее, я сейчас сбой на метод addISBN. В моем текстовом поле ISBN 14 строк, все говорят

'sun.jdbc.odbc.JdbcOdbcReseltSet@13f9460'

Ответы [ 4 ]

3 голосов
/ 07 апреля 2011

Ваш пользовательский интерфейс и поле со списком не должны находиться в пределах ста ярдов от постоянного кода.Это называется наслоением или разделением проблем.Скажите своему профессору, что это считается лучшей практикой в ​​реальном мире.

Этот кодекс отвратителен.Я бы написал так больше.Обратите внимание, как я закрываю эти ресурсы в области метода, в котором они были созданы.Это важноКлассы JDBC не должны вытекать из пакета постоянства.Загрузите результаты в структуру данных (в данном случае это список строк для ISBN).

Java - объектно-ориентированный язык.Где находится книжный класс модели?

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();
        }
    }
}
1 голос
/ 07 апреля 2011

REmove result.getString (1);линия.С ResultSet вам нужно выполнить next (), прежде чем вы сможете получить доступ к элементам результирующего набора, так как нет текущей строки до следующего ();

Кроме того, в будущем у вас гораздо больше шансовчтобы получить хорошие ответы, если вы отправите информацию об исключении.

1 голос
/ 07 апреля 2011

Возможно, потребуется создать правильный оператор SQL.Вместо SELECT * FROM Books используйте SELECT [имя столбца в дБ] FROM Books

edit: какая единица написана в его комментарии.

0 голосов
/ 07 апреля 2011
String myStr = result.getString(1);

Затем используйте myStr вместо result.используйте result только для перехода к следующей строке.

Ссылка - ResultSet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...