Я использую Firebird. Я узнал, что в Firebird мы не можем перемещать верхушку результата. Он поддерживается только TYPE_FORWARD_ONLY
, а TYPE_SCROLL_INSENSITIVE
еще не поддерживается. В моем приложении я хочу переместить указатель результатов на одну строку назад, используя этот resultSet.previous()
. Я хочу знать, есть ли способ переместить курсор назад.Переместить ResultSet курсор назад в Firebird
Посмотрите эту документацию Firebird:
JDBC 3.0 спецификация определяет три типа наборов результатов
- TYPE_FORWARD_ONLY: набор результатов не прокручивать, курсор может двигаться только вперед. Когда используется уровень изоляции TRANSACTION_READ_COMMITTED, набор результатов вернет все строки, удовлетворяющие условию поиска, в момент вызова ResultSet.next() в . В других случаях набор результатов вернет только строк, которые были видны в момент начала транзакции.
- TYPE_SCROLL_INSENSITIVE: результирующий набор прокручивается, курсор может перемещаться назад и вперед, может быть расположен в указанной строке. Видимы только строки, удовлетворяющие условию во время выполнения запроса.
- TYPE_SCROLL_SENSITIVE: не поддерживается Firebird и Jaybird. Драйвер позволяет приложению запрашивать этот тип результирующего набора, однако в соответствии со спецификацией JDBC тип «понижен» до предыдущего типа и соответствующее сообщение добавляется к объекту соединения.
Из-за отсутствующей поддержку прокрутки курсоров в Firebird, их поддержка (TYPE_SCROLL_INSENSITIVE результирующего набор типа) осуществляется путем выборки полного набора результатов клиента. Прокрутка происходит в памяти на клиенте. Это может отрицательно сказаться на использовании системной памяти и производительности при большом наборе результатов.
Это только один кусок кода, я думаю, что было бы полезно:
while (res.next()) {
if (!id.equalsIgnoreCase(res.getString("NO_TRANSFERT"))) {
res.previous();
break;
}
xml = xml + "<" + tableName + ">\n";
for (int i = 1; i <= count; i++) {
String columnName = rsmd.getColumnName(i);
xml = xml + "<" + columnName + ">" + res.getString(i) + "</"
+ columnName + ">\n";
}
xml = xml + "</" + tableName + ">\n\n";
}
Из чата, код, используемый для создания Statement
является:
public static ResultSet selectAll(String table) throws SQLException {
String query = "SELECT * FROM " + table;
PreparedStatement ps = connection.prepareStatement(query);
ResultSet res = ps.executeQuery();
return res;
}
Jaybird поддерживает 'TYPE_SCROLL_SENSITIVE', покажет код, в котором вы создаете' Statement' и 'ResultSet'. –
есть разница между firebird и jaybird? – tbodt
@tbodt Jaybird - это драйвер JDBC для Firebird –