в моем текущем проекте Я использую базу данных H2 для хранения данных из JTable (точнее данных TableModel).Извлечь данные из базы данных H2 эффективно
Я написал код, чтобы сохранить все столбцы из моей таблицы, и теперь я хочу снова получить данные (загрузка из базы данных).
Пока все хорошо, но я не могу найти хороший способ извлечения данных из базы данных и отполировать его для добавления в таблицу. У меня есть метод для моей таблицы, чтобы добавить новую строку с данными для всех столбцов, поэтому это не проблема (что-то вроде public void addRow(Object dataForFirstCol, Object dataForSecondCol [...]
), но мне нужно получить данные по строкам. Как это возможно с H2/Java SQL?
Я нашел, что ResultSet
будет полезен для этого, но мне все еще нужно получать данные по строкам через SQL, а что-то вроде SELECT * FROM SOMEDATABASE
не поможет.
Я бы очень признателен за помощь, чтобы я начал, в настоящее время я не могу думать о более чем запрашивающий все данные колонка А, добавьте все необходимые строки в таблицу и добавить все данные сверху внизу для эта колонка (строка за строкой). Затем запросите данные для столбец B, а также добавьте эту строку за строкой к таблицам столбец B. Для меня это вообще кажется возможным решением, но добавление полной строки будет более удовлетворительным и, скорее всего, более эффективным для тысяч строк.
EDIT: Это код, который я использую для создания базы данных, а также для ее сохранения. Однако запрос «DROP» предназначен только для тестирования.
/**
* Save tables content into H2 database
* @param filename of the database
* @param table to get the contents from
*/
public void save(File filename, JTable table) {
// prevent saving when user is editing a cell
if (table.isEditing()) {
table.getCellEditor().stopCellEditing();
}
try {
Class.forName("org.h2.Driver");
System.out.println(filename.toString());
Connection conn = DriverManager.getConnection("jdbc:h2:" + filename.toString(), "sa", "");
Statement state = conn.createStatement();
state.execute("DROP TABLE IF EXISTS TASKS");
state.execute("CREATE TABLE TASKS ("
+ "SeqNumber INT PRIMARY KEY,"
+ "FBNumber INT,"
+ "ReportNumber INT,"
+ "BetraNumber INT,"
+ "Date varchar(255),"
+ "StationName varchar(255),"
+ "Kilometrage varchar(255),"
+ "BlockTime varchar(255),"
+ "WorkTime INT,"
+ "Worker varchar(255),"
+ "Task varchar(255),"
+ "Comments varchar(255),"
+ "ClosedState BOOLEAN," + ")"
);
String sqlInsert = "INSERT INTO TASKS "
+ "(SeqNumber, "
+ "FBNumber, "
+ "ReportNumber, "
+ "BetraNumber, "
+ "Date, "
+ "StationName, "
+ "Kilometrage, "
+ "BlockTime, "
+ "WorkTime, "
+ "Worker, "
+ "Task, "
+ "Comments, "
+ "ClosedState) "
+ "VALUES"
+ "(?" // SeqNumber
+ ",?" // FBNumber
+ ",?" // ReportNumber
+ ",?" // BetraNumber
+ ",?" // Date
+ ",?" // StationName
+ ",?" // Kilometrage
+ ",?" // BlockTime
+ ",?" // WorkTime
+ ",?" // Worker
+ ",?" // Task
+ ",?" // Comments
+ ",?)"; // ClosedState
for (int rowIndex = 0; rowIndex < table.getModel().getRowCount(); rowIndex++) {
PreparedStatement sqlState = conn.prepareStatement(sqlInsert);
sqlState.setInt(COLUMN_SEQ_NUMBER, getSeqNumber(table, rowIndex));
sqlState.setInt(COLUMN_FB_NUMBER, getFBNumber(table, rowIndex));
sqlState.setInt(COLUMN_REPORT_NUMBER, getRepNumber(table, rowIndex));
sqlState.setInt(COLUMN_BETRA_NUMBER, getBetraNumber(table, rowIndex));
sqlState.setString(COLUMN_DATE, getDate(table, rowIndex));
sqlState.setString(COLUMN_STATION_NAME, getStationName(table, rowIndex));
sqlState.setString(COLUMN_KILOMETRAGE, getKilometrage(table, rowIndex));
sqlState.setString(COLUMN_BLOCK_TIME, getBlockTime(table, rowIndex));
sqlState.setInt(COLUMN_WORK_TIME, getWorkTime(table, rowIndex));
sqlState.setString(COLUMN_WORKER, getWorker(table, rowIndex));
sqlState.setString(COLUMN_TASK, getTask(table, rowIndex));
sqlState.setString(COLUMN_COMMENTS, getComments(table, rowIndex));
sqlState.setBoolean(COLUMN_CLOSED_STATE, getClosedState(table, rowIndex));
sqlState.executeUpdate();
}
// This is also just temporary code to see the contents
ResultSet dbContent = conn.createStatement().executeQuery("SELECT * FROM TASKS");
while(dbContent.next()) {
for (int i = 1; i+1 < DBDatabaseSystem.table.getColumnCount(); i++) {
System.out.println(dbContent.getString(i));
}
}
conn.close();
unsavedChanges = false;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
DBDatabaseSystem.infoSystem.addError("Es gab ein SQL Problem beim Speichern der Datenbank");
}
}
Почему вы говорите, что «ВЫБЕРИТЕ * ИЗ БОЛЬШЕ?» Вам не поможет?Как создается таблица базы данных? – RealSkeptic
Ох ошибся там '' 'SELECT * FROM SOMEDATABASE''' – Flatron
В настоящее время все мои данные хранятся в одной базе данных с одной таблицей. – Flatron