example i an application showing jdbc access to cloudscape

28
EXAMPLE I An application showing JDBC access to Cloudscape. http://www-306.ibm.com/software/data/cloud scape/

Upload: hugh-reed

Post on 29-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: EXAMPLE I An application showing JDBC access to Cloudscape

EXAMPLE I

An application showing JDBC access to Cloudscape.

http://www-306.ibm.com/software/data/cloudscape/

Page 2: EXAMPLE I An application showing JDBC access to Cloudscape

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

import com.ibm.db2j.drda.DB2jServer;

Page 3: EXAMPLE I An application showing JDBC access to Cloudscape

public class SimpleApp { /* the default framework is embedded*/ public String framework = "embedded"; public String driver = "com.ibm.db2j.jdbc.DB2jDriver"; public String protocol = "jdbc:db2j:";

public static void main (String[] args) {

new SimpleApp().go( args);

}

void go (String args[]) {

/* parse the arguments to determine which framework is desired*/

parseArguments( args);

System.out.println ("SimpleApp starting in " + framework + " mode.");

Page 4: EXAMPLE I An application showing JDBC access to Cloudscape

try { /* The driver is installed by loading its class. In an embedded

environment, this will start up Cloudscape, since it is not already running. */

Class.forName(driver).newInstance(); System.out.println ("Loaded the appropriate driver.");

Connection conn = null; Properties props = new Properties(); props.put ("user", "user1"); props.put ("password", "user1");

/* The connection specifies create=true to cause the database to be created. To remove the database, remove the directory db2jDB and its contents. The directory db2jDB will be created under the directory that the system property db2j.system.home points to, or the current directory if db2j.system.home is not set. */

Page 5: EXAMPLE I An application showing JDBC access to Cloudscape

if (framework.equals ("embedded")) { conn = DriverManager.getConnection (protocol + "db2jDB;create=true", props);

}else { // jccjdbc framework

DB2jServer server = new DB2jServer(null); server.testConnection("db2jDB;create=true", null, null, "localhost", 1527);

conn = DriverManager.getConnection(protocol + "//localhost:1527/db2jDB", props); }

System.out.println ("Connected to and created database db2jDB");

conn.setAutoCommit(false);

/* Creating a statement lets us issue commands against the connection. */

Page 6: EXAMPLE I An application showing JDBC access to Cloudscape

Statement s = conn.createStatement(); // We create a table, add a few rows, and update one.

s.execute ("create table db2jDB(num int, addr varchar(40))"); System.out.println ("Created table db2jDB");

s.execute ("insert into db2jDB values (1956,'Webster St.')"); System.out.println ("Inserted 1956 Webster");

s.execute ("insert into db2jDB values (1910,'Union St.')"); System.out.println ("Inserted 1910 Union");

s.execute( "update db2jDB set num=180, addr='Grand Ave.' where num=1956"); System.out.println ("Updated 1956 Webster to 180 Grand");

s.execute( "update db2jDB set num=300, addr='Lakeshore Ave.' where num=180"); System.out.println ("Updated 180 Grand to 300 Lakeshore");

Page 7: EXAMPLE I An application showing JDBC access to Cloudscape

// We select the rows and verify the results.

ResultSet rs = s.executeQuery ("SELECT num, addr FROM db2jDB ORDER BY num"); if (!rs.next()) throw new Exception ("Wrong number of rows"); if (rs.getInt(1)!=300) throw new Exception ("Wrong row returned"); if (!rs.next()) throw new Exception ("Wrong number of rows"); if (rs.getInt(1)!=1910) throw new Exception ("Wrong row returned") if (rs.next()) throw new Exception ("Wrong number of rows");

Page 8: EXAMPLE I An application showing JDBC access to Cloudscape

System.out.println ("Verified the rows");

s.execute ("drop table db2jDB"); System.out.println ("Dropped table db2jDB");

// We release the result and statement resource rs.close(); s.close(); System.out.println ("Closed result set and statement");

// We end the transaction and the connection.

conn.commit(); conn.close(); System.out.println ("Committed transaction and closed connection");

Page 9: EXAMPLE I An application showing JDBC access to Cloudscape

/* In embedded mode, an application should shut down Cloudscape. If the application fails to shut down Cloudscape explicitly, the Cloudscape does not perform a checkpoint when the JVM shuts down, which means that the next connection will be slower. Explicitly shutting down Cloudscape with the URL is preferred. This style of shutdown will always throw an "exception". */

boolean gotSQLExc = false; if (framework.equals ("embedded")) { try

{ DriverManager.getConnection("jdbc:db2j:;shutdown=true");

} catch (SQLException se) { gotSQLExc = true; } if (!gotSQLExc) System.out.println ("Database did not shut down normally"); else System.out.println( "Database shut down normally"); } }

Page 10: EXAMPLE I An application showing JDBC access to Cloudscape

catch (Throwable e) {System.out.println ("exception thrown:");

if (e instanceof SQLException) printSQLError( (SQLException) e); else e.printStackTrace(); } System.out.println ("SimpleApp finished"); }

static void printSQLError (SQLException e) { while (e != null) { System.out.println (e.toString()) e = e.getNextException(); } }

Page 11: EXAMPLE I An application showing JDBC access to Cloudscape

private void parseArguments(String[] args) {int length = args.length;

for (int index = 0; index < length; index++) {

if (args[index]. equalsIgnoreCase ("jccjdbcclient")) {

framework = "jccjdbc";driver = "com.ibm.db2.jcc.DB2Driver";protocol = "jdbc:db2j:net:"; // localhost:1527

} } } }

Page 12: EXAMPLE I An application showing JDBC access to Cloudscape

This program accomplishes the following tasks:

starts up the Cloudscape engine, if necessary creates and connects to a database creates a table inserts data updates data selects data drops a table disconnects shuts down Cloudscape, if necessary

Page 13: EXAMPLE I An application showing JDBC access to Cloudscape

Run in the Embedded Environment

The simplest Cloudscape environment. The application starts up an instance of

Cloudscape within the current JVM and shuts down the instance before it completes.

No network access is involved. In an embedded environment, only one application at a time can access a database.

Page 14: EXAMPLE I An application showing JDBC access to Cloudscape

New Files and Directories: after running the application

db2jDB (directory) The directory that makes up the db2jDB database.

We must not modify anything in this directory, or we will corrupt the database.

The directory was created when the application connected with Cloudscape, using the attribute create=true in the database connection URL.

The database name, db2jDB, was also set in the database connection URL.

db2jDB\log (directory) The directory that holds the database log for the db2jDB database.

db2jDB\seg0 (directory) The directory that holds the data for the db2jDB database.

db2jDB\service.properties An internal file that holds boot-time configuration parameters for the db2jDB database; do not edit.

db2j.LOG The log file with Cloudscape progress and error messages.

Page 15: EXAMPLE I An application showing JDBC access to Cloudscape

Setting Class Path for an Embedded Environment

Cloudscape provides a script to help us get started setting class path in

%DB2J_INSTALL%bin This script is called setCP and

comes for Windows environment with .bat For users working in this environment, copying the

commands in this file will help us get started setting the class path.

Page 16: EXAMPLE I An application showing JDBC access to Cloudscape

Running the Application in an Embedded Environment

Open a command window and change directory in which the application files are copied

For example: C:\Cloudscape_5.1\bin DB2J_INSTALL environment variable is set to the

the directory we installed the Cloudscape software (C:\Cloudscape_5.1)

Run Cloudscape's utility for testing the class path for an embedded environment

java com.ibm.db2j.tools.sysinfo -cp arguments or java com.ibm.db2j.tools.sysinfo -cp embedded SimpleApp.class

Page 17: EXAMPLE I An application showing JDBC access to Cloudscape

com.ibm.db2j.tools

public class sysinfo extends java.lang.ObjectThis class (sysinfo) displays system information to systemout.

This class displays system information to system out. To run from the command-line, enter the following:

java com.ibm.db2j.tools.sysinfo

Also available on this class are methods which allow us to determine the version of the code for the system without actually booting a database.

This is the Cloudscape version of the .jar files, not of our databases.

Page 18: EXAMPLE I An application showing JDBC access to Cloudscape

If the environment is set up correctly

The utility shows output indicating success. It looks like the following:

FOUND IN CLASS PATH:

Cloudscape primary library (db2j.jar)

Valid Cloudscape license (Cloudscape primary

library, or for evaluation copies of the software

only, license.jar)

user-specified class (SimpleApp)

SUCCESS: All Cloudscape-Related classes for

embedded environment found in class path.

Page 19: EXAMPLE I An application showing JDBC access to Cloudscape

If something is missing from class path environment

The utility indicates what is missing For example, if we neglected to add the directory containing

the SimpleApp class to our class path, the utility would indicate as such:

Testing for presence of Cloudscape-related libraries for embedded environment.

FOUND IN CLASS PATH:Cloudscape primary library (db2j.jar)Valid Cloudscape license (Cloudscape primary library, or for

evaluation copies of the software only, license.jar)NOT FOUND IN CLASS PATH:user-specified class (SimpleApp)(SimpleApp not found.)

Page 20: EXAMPLE I An application showing JDBC access to Cloudscape

If we have our environment set up correctly

we can execute the application from the same directory java SimpleApp A successful run produces the following output: SimpleApp starting in embedded mode. Loaded the appropriate driver. Connected to and created database db2jDB Created table db2jDB Inserted 1956 Webster Inserted 1910 Union Updated 1956 Webster to 180 Grand Updated 180 Grand to 300 Lakeshore Verified the rows Dropped table db2jDB Closed result set and statement Committed transaction and closed connection Database shut down normally

Page 21: EXAMPLE I An application showing JDBC access to Cloudscape

create=truefunction

Creates the standard database specified within the database connection URL

Cloudscape system and then connects to it.

If the database cannot be created, the error appears in the error log and the connection attempt fails with an SQLException indicating that the database cannot be found.

Page 22: EXAMPLE I An application showing JDBC access to Cloudscape

EXAMPLE II

An application showing JDBC access to MySQL

Page 23: EXAMPLE I An application showing JDBC access to Cloudscape

import java.sql.*;public class JdbcExam2 {

public static void main(String args[]) {Connection con = null;Statement st = null;ResultSet rs = null;

try { Class.forName ("com.mysql.jdbc.Driver"). newInstance();

con = DriverManager.getConnection ("jdbc:mysql:///examples", "root", "secret");

st = con.createStatement();rs = st. executeQuery ("SELECT user_id, first_name, last_name,

country_code FROM users");

while (rs.next()) {int userId = rs.getInt(1);String firstName = rs.getString(2);String lastName = rs.getString(3);String countryCode = rs.getString(4);

System.out.println(userId + ". " + lastName + ", " + firstName + " (" + countryCode + ")");

}

Page 24: EXAMPLE I An application showing JDBC access to Cloudscape

} catch (Exception e) {System.err.println ("Exception: " + e.getMessage());

} finally {try {

if(rs != null)rs.close();

if(st != null)st.close();

if(con != null)con.close();

} catch (SQLException e) {}

}}

}

Page 25: EXAMPLE I An application showing JDBC access to Cloudscape

Step by Step Explanations

We create 3 variables to hold Connection,Statement and ResultSet objects for uswhich we'll create later in a try/catch/finallyblock. Connection con = null; Statement st = null; ResultSet rs = null; Then, we enter a try/catch/finally block.

Our data access code will reside in the try blockException notification code in the catch block Code to close the connection in the finally block

Page 26: EXAMPLE I An application showing JDBC access to Cloudscape

Step by Step Explanations cont’d

First thing we do to display records is toobtain a connection to MySQL database

we do that my first loading it's JDBC (Connector/J) driver and then using DriverManager to obtain a connection to our "examples" database.

We might want to change the password from"secret" to whatever is our password for'root' account.

Class.forName ("com.mysql.jdbc.Driver").newInstance();con = DriverManager.getConnection ( "jdbc:mysql:///examples", "root", "secret");

Page 27: EXAMPLE I An application showing JDBC access to Cloudscape

Step by Step Explanations cont’d

Once we are connected, we create a new

SQL Statement object.

st = con.createStatement(); We then execute this statement to obtain a

ResultSet which contains all the records from the "users" table and we do that by executing a SELECT SQL statement.

rs = st.executeQuery("SELECT user_id,

first_name, last_name, " + "country_code FROM

users");

Page 28: EXAMPLE I An application showing JDBC access to Cloudscape

Step by Step Explanations cont’d

We then iterate through that ResultSet to obtain values for each field of the "users" table. We then print these values on the user console

In the finally block we close off our ResultSet, Statement and Connection objects.

Finally: Compile the example, Before running the Java program, make sure that

MySQL server is running properly created and setup "examples" database and "users" table.

Now to run our Java program, execute following command at the command prompt from the folder