2009-11-11 14 views

Odpowiedz

1

Zainstalować JDBC sqlite3 gem

Następnie w skrypcie 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

pojawia się błąd, gdy próbuję to zrobić: pakiet 'skapitalizowane lub klasa nie znaleziono (' java.org.sqlite.JDBC ') "' Wszelkie sugestie. być bardzo wdzięcznym, nawet jeśli ktoś mógłby mi powiedzieć, jak się o tym przekonać: –

+0

@duckyfuzz Jakie wersje JRuby itp używasz? Czy jdbc-sqlite3 pojawia się po uruchomieniu 'gem list'? Powyższe działa dla mnie bez błędy, o ile dodam 'require 'rubygems'' jako pierwszą linię.Używam jruby-1.6.4. –

+0

@RobertHaines Używanie 1.6.4 Mam klasę z' import Java '. metody w klasie używa kodu z powyższej odpowiedzi. Kiedy próbuję go uruchomić, otrzymuję teraz błąd: 'Pakiet Java' java 'nie ma metody' + ''. Potrzebuję rubygemów, a klejnot jest prawidłowo zainstalowany. –

0

JDBC pliku sterownika sqlite-3.5.8.jar zostanie skopiowany do katalogu gem. Musi zostać skopiowany do katalogu jruby/lib. Aplikacja również wymaga restartu.

Plik sterownika można pobrać bezpośrednio stąd

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

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

Oto przykład, który współpracuje z JRuby 1.6.6 (w Ruby 1.8 trybu kompatybilnego) ze 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 

wyjściowa:

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

To jest wyjątkowo pomocna odpowiedź. Pomyślałem jednak, że powinienem wykonać '' 'Jdbc :: SQLite3.load_driver''' przed linią' '' org.sqlite.JDBC''', aby to działało - prawdopodobnie ze względu na zmiana w Jdbc od momentu opublikowania tej odpowiedzi. – abhillman