2015-03-10 1 views
0

Я прочесал сеть и ничего не нашел для этого. У меня есть группа записей в JTable, и мне нужно экспортировать эти записи в существующую таблицу в базе данных MS Access. Мне нужно иметь возможность добавлять записи в эту таблицу, поскольку, возможно, уже есть данные.Java JTable экспортируется в существующую таблицу доступа MS

Я прочитал последние два дня и узнал о библиотеках Jackcess и UcanAccess. На этом этапе я абсолютно готов, поэтому, если кто-то будет достаточно любезен, чтобы опубликовать какой-то код, я бы очень признателен.

Редактировать: 5:15 PM PT Монолитная задача наверняка. Спасибо всем за полезные советы. Мне только сейчас удалось найти решение. Я прочитал сообщение, которое помогло мне понять, что содержимое jTable действительно существует только для целей показа, а не для идеального источника для экспорта наборов данных в другие базы данных. Поэтому я использовал ImportUtil в библиотеке Jackcess, чтобы напрямую экспортировать ResultSet в базу данных Access. Ответ был прямо передо мной все время: http://jackcess.sourceforge.net/ (это четвертый пример кода сверху)

Итак, для этого создан класс AccessExporter.java. Три параметра: объект ResultSet, «TableName» и объект File, определяющий, где находится файл базы данных. Вот код:

import com.healthmarketscience.jackcess.Database; 
import com.healthmarketscience.jackcess.DatabaseBuilder; 
import com.healthmarketscience.jackcess.util.ImportUtil; 
import java.io.File; 
import java.sql.ResultSet; 

/** 
* 
* @author petehahn 
*/ 
public class AccessExporter { 
    void fillData(ResultSet jTableResults, String dbTableName, File dbFile){ 
    try { 
     Database dbTarget = DatabaseBuilder.open(dbFile); 
     new ImportUtil.Builder(dbTarget, dbTableName).importResultSet(jTableResults); 

    dbTarget.close(); 

     } catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     } 
     } 
} 
+0

Какая часть этого монолитного решения вы возникли проблемы с? Помните, что мы добровольцы и у вас нет много времени, чтобы написать ваше решение для вас ... – MadProgrammer

+0

Вам также потребуется предоставить гораздо больше информации. Какова структура таблицы базы данных? Какая структура 'JTable'? Как эти два относятся? – MadProgrammer

ответ

1

SimpleTableDemo из The Java ™ Tutorials, который создает и отображает JTable как этот

BasicTable.png

содержит метод printDebugData, который записывает данные таблицы в консоли , Мы можем настроить этот код для записи данных таблицы в базу данных Access.

Мы предполагаем, что вы имеете downloaded UCanAccess и добавил необходимые ссылки на ваш проект, как показано на

Manipulating an Access database from Java without ODBC

Мы также будем считать, что у вас уже есть таблица с именем [SimpleTableDemo] в вашем Доступ к базе данных с полями

ID - AutoNumber, первичный ключ
FirstName - Текст (255)
LastName - Текст (255)
Спорт - Текст (255)
NUMYEARS - Number (Long Integer)
Вегетарианец - Да/Нет

Первая строка в public class SimpleTableDemo не устанавливает переменную DEBUG. Нам нужен этот набор для true:

private boolean DEBUG = true; 

Тогда мы можем изменить метод printDebugData для обновления базы данных

private void printDebugData(JTable table) { 
    // modified to write table data to database instead of printing to console 
    int numRows = table.getRowCount(); 
    javax.swing.table.TableModel model = table.getModel(); 

    try (Connection conn = DriverManager.getConnection(
      "jdbc:ucanaccess://C:/Users/Public/Database1.accdb")) { 
     try (PreparedStatement ps = conn.prepareStatement(
       "INSERT INTO SimpleTableDemo (" + 
       "FirstName, LastName, Sport, NumYears, Vegetarian " + 
       ") VALUES (?,?,?,?,?)")) { 
      for (int i=0; i < numRows; i++) { 
       ps.setString(1, (String)model.getValueAt(i, 0)); // FirstName 
       ps.setString(2, (String)model.getValueAt(i, 1)); // LastName 
       ps.setString(3, (String)model.getValueAt(i, 2)); // Sport 
       ps.setInt(4, (int)model.getValueAt(i, 3)); // NumYears 
       ps.setBoolean(5, (boolean)model.getValueAt(i, 4)); // Vegetarian 
       ps.executeUpdate(); 
      } 
     } 
     System.out.println("Database updated."); 
    } catch (Exception e) { 
     e.printStackTrace(System.err); 
    } 
}