Анализировать набор результатов базы данных в список объектов - PullRequest
1 голос
/ 23 ноября 2010

Я пытаюсь получить все данные из таблицы, содержащейся в базе данных, и разобрать ее в список.Я пробовал несколько разных техник и не могу заставить его работать.Я пытаюсь сериализовать ResultSet, чтобы я мог отправить его через сокет.Код, который я получил до сих пор:

public Object readJavaObject(String query, Connection con) throws Exception
{        
    PreparedStatement stmt = con.prepareStatement(query);
    //stmt.setString(1, id);
    query_results = stmt.executeQuery();
    while (query_results.next())
    {
        dataObject = query_results.getObject(1);
    }
    query_results.close();
    stmt.close();

    return dataObject;
}

public void run()
{
    try
    {
        Class.forName(dbClass);
        con = DriverManager.getConnection (dbUrl, user, pass);
        query = "SELECT * FROM Bench_table";
        dataList = (List) this.readJavaObject(query, con);
        con.close();
    }
}

Я не уверен, какой код писать вокруг readJavaObjectКто-нибудь может помочь указать, где проблема?

Спасибо за любую помощь.

Ответы [ 4 ]

3 голосов
/ 23 ноября 2010

Взгляните на DbUtils (из apache-commons).

Если вам нужно более сложное решение для сопоставления результатов sql с объектами java, взгляните на объектно-реляционное отображение . В Java стандартом является JPA (Java Persistence API) с Hibernate, EclipseLink и OpenJPA в качестве наиболее известных разработчиков.

2 голосов
/ 23 ноября 2010

Есть несколько проблем с вашим кодом.

  1. Вы просматриваете результаты, но возвращаете только данные из последней строки.Вместо этого создайте List в методе readJavaObject и добавляйте элемент при каждом прохождении цикла.
  2. Вместо того, чтобы получать элемент в первом столбце, я предполагаю, что вам нужны все данные.Вам нужно будет более конкретно указать, какие методы «get» вы используете для извлечения данных из ResultSet.Возможно, создайте POJO для представления строки данных, затем внутри цикла заполните ее и сохраните в списке.
  3. Предполагая, что вы используете POJO, вы можете использовать дженерики со своим списком, чтобы было проще получать предметы из него без необходимости разыгрывать.
0 голосов
/ 03 июля 2013

Я недавно обнаружил CachedRowSet , который делает именно то, что нужно OP. Он , в частности , позволяет сериализовать ResultSet и восстанавливать оригинал при необходимости.

0 голосов
/ 23 ноября 2010

Я не знаю точно, чего вы хотите достичь, но могу ли я познакомить вас с шаблоном DAO (объект доступа к данным) ?

...