У меня есть следующие коды:
# my db connection is here:
# @connection = DriverManager.getConnection("jdbc:hsqldb:file:../db/rdata", "user", "user")
#the method recieves a array of hash {:rev,:time,:path,:result}
def create(list)
st=@connection.createStatement()
sql=""
list.each do |i|
sql.concat("INSERT INTO RESULTS_LOGIN (REVISION, TIMESTAMP, ARCHIVEPATH, RESULTS) VALUES (#{i[:rev]},'#{i[:time]}','#{i[:path]}','#{i[:result]}');\n")
end
p sql.lines.to_a.size
st.execute(sql)
st.close
end
Проблема:
Значение sql.lines.to_a.size равно 128, что означает, что у меня есть 128 строк для вставки. Однако, после многократного повторного запуска, я обнаружил, что каждый раз, когда я получаю разные строки в БД. Например, на этот раз таблица RESULT_LOGIN имеет 114 строк, а в следующий раз было 99 .... Также есть успешные прогоны, в результате которых в таблице было 128 строк.
Я не могу понять, почему это происходит. Нет ошибок, нет исключений, и что странно, что в моем коде есть метод сразу после метода «create», который выполняет «select * from RESULTS_LOGIN» и печатает его, например:
create(list) # insert rows
read_all # print all rows
Каждый раз «read_all» сразу после «create» выводит 128 строк и правильные данные; Тем не менее, если я буду запускать read_all отдельно после закрытия и воссоздать соединение или просмотреть базу данных с помощью инструмента управления графическим интерфейсом HSQLDB, некоторые строки будут отсутствовать ....