Skip to main content

JRuby Connection to AS400 DB

Hello friend, I suspect that by you visiting you are running in to the same issues I was having trying to get a database connection working using JDBC in JRuby. After that you may also be interested in the connecting to AS400 part. Please note that with a few tweaks of this example you can also connect to some other types of databases. I will note where as we go along.

When coding the first thing we need to do is get our environment set up properly. At the time of this writing I am using JRuby-1.7.4. If you have JRuby ready to go the next thing that we will need is the JDBC Driver that does the leg work of connecting to the AS400 DB. I like to use the JTOpen JDBC driver to connect. You can get that at http://jt400.sourceforge.net/. Once you download the driver unzip it and look through the files for a jtopen.jar and copy it to a lib folder within your project directory. If you are wanting a different type of db you can search for a JDBC driver that would be appropriate.

Lets make this thing work. We will start off by requiring java and our jar file that we just got.

require 'java'
require 'lib/jt400.jar'

Now that we have our list of requirements for the ruby file we can begin defining our class. In this section if you are using a different type of db your class definition will be different. For example MySql would be com.mysql.jdbc.Driver. From what I have read java_import is a relative new function to create instances of classes. If you have issues with the code saying ClassNotFoundException try the java.lang version commented out in the code example.

java_import 'com.ibm.as400.access.AS400JDBCDriver'

# To use on older versions of JRuby
# driverclass="com.ibm.as400.access.AS400JDBCDriver"
# java.lang::Class.forName(driverclass).newInstance

Once we have defined out class then we can build the connection to the db.

user = "someuser"
  pass = "somepass"
  conn = java.sql.DriverManager.getConnection(
      "jdbc:as400://server;naming=sql;errors=full", 
      user, 
      pass)

Lets have some fun and pull some data.

stmt = conn.createStatement
  rs = stmt.executeQuery("select name from table")
  while (rs.next) do
   puts rs.getString("name")
  end

Hey don't leave yet you need to clean up your house a little bit.

rs.close
stmt.close
conn.close()

Want to see it all put together? Take a look on GitHub

Comments

Popular posts from this blog

JSON Schema testing with Postman

Postman is becoming quite the popular tool for accessing and testing REST api services. One of the cool features is that you can write some Javascript tests on your responses. Built into Postman is also the Tiny Validator v4 and Cheerio. Cheerio is a small core JQuery like implementation. The problem I have is that there is no way to import a schema file from a remote place or a file. This will be about how I get around that issue.Pre-request Script var uri='http://someUrl.com'; $.get(uri + '/someFolder/schema.json', function(schema) { postman.setEnvironmentVariable('schema', JSON.stringify(schema)); }); This Pre-request script is what saves the day. There are a couple of timing issues that are present due to async processing. If you were to put this in your test script your chances of it not completing in time are very high and you would get inconsistent results. If you are familiar with JQuery the $.get should look familiar as a ajax call that d…

Mock HTTP calls with Angular and Protractor

One of the benefits using AngularJS is also using some test tools like Protractor. Protractor is a tool that was made for Angular testing. Many times when testing you will need to mock some data so that you can see if your application responds in the correct manner. Let us assume that we have the following HTML file running our application.
<!doctype html> <html ng-app="demo"> <head> <title>Hello</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular-mocks.js"></script> <script src="hello.js"></script> </head> <body> <div ng-controller="Hello"> <p>Hello <span id="gname">{{exampleResponse.name}}</span></p> </div> …

Remote API useful tricks for Docker on Mac OS X

Install SocatSocat allow you to forward ports to a variety of things. For Docker forwarding a port to the docker.sock file makes a quick way to get access to the Docker remote api. Docker also allow a way to open up that TCP port however on Mac it is temperamental and hard to usebrew install socat socat -d TCP-LISTEN:2375,reuseaddr,fork UNIX:/var/run/docker.sock & Create an IP aliasRunning Docker containers locally is a fairly common thing. Interconnectivity between containers works naturally. However, sometimes you may also want a container to connect back to the Docker Remote API. If you are constantly on the go changing networks you do not want to have to change that IP address every time. A great use case for this is running Jenkins and using docker slavessudo ifconfig lo0 alias 192.168.99.50 Remote API There are also some interesting endpoints you can use for informationcurl http://localhost:2375 curl http://localhost:2375/containers/json curl http://localhost:2375/image…