[jruby-user] JRuby and Sqlite3

21 views
Skip to first unread message

Roderich T.

unread,
Feb 28, 2015, 10:06:26 AM2/28/15
to us...@jruby.codehaus.org
Hi,
I want to compile my ruby application into a jar File.

Now there I get a strange error using jdbc/sqlite3.

This is my ruby (test) code:

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

import org.sqlite.JDBC

connection = java.sql.DriverManager.getConnection
'jdbc:sqlite:test.sqlite3'
begin
statement = connection.createStatement
begin
statement.executeUpdate("insert into user values ('test', 7)")
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

There are no problems using jruby directly, but when I include the
script in jruby-complete.jar using "jar ufe myapp.jar
org.jruby.JarBootstrapMain jar-bootstrap.rb", I always get an error when
I start it ( java -jar myapp.jar ):

NameError: missing class or uppercase package name (`org.sqlite.JDBC')

--
Posted via http://www.ruby-forum.com/.

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

http://xircles.codehaus.org/manage_email


Ariel Valentin

unread,
Feb 28, 2015, 10:22:10 AM2/28/15
to us...@jruby.codehaus.org
Does your jar contain all of the dependencies? Or are they located somewhere else?

Thanks,
Ariel
---
Sent from my mobile device. Please excuse any errors.

Roderich T.

unread,
Feb 28, 2015, 10:27:57 AM2/28/15
to us...@jruby.codehaus.org
The jar file is a raw "jruby-complete.jar" containing no dependencies.

All necessary gem files are located in a subfolder "gems" with the
ENV['GEM_PATH'] variable pointing on it.

Thanks,
Roderich

Karol Bucek

unread,
Feb 28, 2015, 10:46:57 AM2/28/15
to us...@jruby.codehaus.org

require 'jdbc/sqlite3' does not auto-load the driver class: https://github.com/jruby/activerecord-jdbc-adapter/tree/master/jdbc-sqlite3

Roderich T.

unread,
Feb 28, 2015, 11:03:56 AM2/28/15
to us...@jruby.codehaus.org
@Karol: thanks for your hint.

But the problem still exists. I downloaded the sqlite-jdbc.jar. I put in
in my classpath AND included it in my myapp.jar file.

But the result is:
DBI::DatabaseError: java.sql.SQLException: No suitable driver found

Roderich T.

unread,
Feb 28, 2015, 11:32:11 AM2/28/15
to us...@jruby.codehaus.org
Problem solved!

I made a mistake by including sqlite-jdbc into the main jar file.

Thanks to all!

Cloudrck Tech

unread,
Apr 10, 2015, 12:24:41 AM4/10/15
to us...@jruby.codehaus.org
Forgive my ignorance, but I'm new to JRuby. What is the reason for
requiring "rubygems", I don't see any specific code that uses a gem.

Tim Uckun

unread,
Apr 10, 2015, 12:26:40 AM4/10/15
to us...@jruby.codehaus.org
rubygems allows you to be able to require the other libs in your script.  Basically it tells your script which directories to load your libs from.

These days people mostly use bundler though.

Christian MICHON

unread,
Apr 10, 2015, 2:06:44 AM4/10/15
to us...@jruby.codehaus.org
you still need to call rubygems before you call bundler anyway...
--
Christian

christian

unread,
Apr 10, 2015, 2:11:44 AM4/10/15
to us...@jruby.codehaus.org
in newer ruby version including jruby there is no need to require "rubygems" it is already required.

if you do not want rubygems from a jruby commandline execution then you need to explicitly tell jruby not to require it:

jruby -Xcli.rubygems.enable=false -e "p require 'rubygems'"

-christian

Reply all
Reply to author
Forward
0 new messages