Observa que:
- Se mete en un bloque que captura posibles excepciones
- En cuanto a la sentencia ten en cuenta que lo correcto es usarla parametrizada para evitar inyección de SQL y para favorecer la reutilización que algunos motores de base de datos hacen de sentencias precompiladas.
- Las sentencias que hacen "FETCH" de datos como las SELECT deben ser cerradas.
#!/bin/ruby
require 'sqlite3'
begin
db = SQLite3::Database.open "/var/www/rails/muytest/db/development.sqlite3"
puts db.get_first_value 'SELECT SQLITE_VERSION()'
stm = db.prepare "SELECT max(id) as id FROM items"
rs = stm.execute
row = rs.next
id = row[0].to_i
stm.close
sentencia = "INSERT INTO items(id, data) VALUES(?,?);"
File.open('fichero.txt', 'r') do |f1|
while linea = f1.gets
id = id+1
stm = db.prepare sentencia
stm.bind_params(id,linea)
end
end
end
rescue SQLite3::Exception => e
puts "Exception occurred"
puts e
ensure
No hay comentarios:
Publicar un comentario