2009-11-11 14 views

Respuesta

1

Instalar la gema JDBC-sqlite3

Luego, en el script jruby:

require 'jdbc/sqlite3' 
url = "jdbc:sqlite:path.to.your.db" 
begin   
    Java::org.sqlite.JDBC#initialize the driver 
    connection = JavaLang::DriverManager.getConnection(url) #grab your connection 
rescue => error  
    #handle error 
end 
+0

me sale un error cuando trato de hacer esto: 'capitalizado paquete o la clase no encontrada (' java.org.sqlite.JDBC ') "' Cualquier sugerencia. Sería muy apreciado. Incluso si alguien pudiera decirme cómo averiguarlo. –

+0

@duckyfuzz ¿Qué versiones de JRuby, etc. está usando? ¿Aparece jdbc-sqlite3 cuando ejecuta 'gem list'? Lo anterior funciona para mí sin errores siempre y cuando agregue 'require 'rubygems'' como la primera línea. Estoy usando jruby-1.6.4. –

+0

@RobertHaines Usando 1.6.4. Tengo una clase con' import Java' en ella. los métodos en la clase usa el código de la respuesta anterior. Cuando intento ejecutarlo, ahora aparece el error: 'Java package' java 'no tiene un método' + ''. Estoy requiriendo rubygems y la gema está instalada correctamente. –

0

El archivo del controlador JDBC sqlite-3.5.8.jar se copia en el directorio joya. Necesita ser copiado en el directorio jruby/lib. La aplicación también necesita reiniciarse.

El archivo del controlador se pueden descargar directamente desde aquí

http://files.zentus.com/sqlitejdbc/sqlitejdbc-v056.jar 

http://www.zentus.com/sqlitejdbc/ 
5

He aquí un ejemplo que funciona con JRuby 1.6.6 (en Ruby 1.8 modo compat) con JDBC-sqlite3 3.7.2.

require 'rubygems' 
require 'jdbc/sqlite3' 
require 'java' 

org.sqlite.JDBC     # load the driver so DriverManager detects it 
#Java::OrgSqlite::JDBC   # alternate means of same 

connection = java.sql.DriverManager.getConnection 'jdbc:sqlite:test.sqlite3' 
begin 
    statement = connection.createStatement 
    begin 
    statement.executeUpdate("create table user (name varchar, pass varchar)") 
    statement.executeUpdate("insert into user values ('alice', 1234)") 
    statement.executeUpdate("insert into user values ('bob', 5678)") 
    statement.executeUpdate("insert into user values ('charlie', 'asdf')") 

    rs = statement.executeQuery("select * from user") 
    begin 
     puts "user\tpass" 
     while rs.next 
     puts ["#{rs.getString(1)}", 
       "#{rs.getString(2)}"].join("\t") 
     end 
    ensure 
     rs.close 
    end 

    ensure 
    statement.close 
    end 
ensure 
    connection.close 
end 

Salida:

$ rm -f test.sqlite3; ruby sql.rb 
user pass 
------------ 
alice 1234 
bob  5678 
charlie asdf 
+0

Esta es una respuesta excepcionalmente útil. Pensé que señalaría, sin embargo, que tuve que ejecutar '' 'Jdbc :: SQLite3.load_driver''' antes de la línea' '' org.sqlite.JDBC''' para que esto funcione, probablemente debido a una cambiar en Jdbc desde que se publicó esta respuesta. – abhillman

Cuestiones relacionadas