Previous | Table of Contents | Next |
The JDBC drivers allow a user to batch INSERTs and UPDATEs to the server, which reduces round trips to the server. OraclePreparedStatement.setExecuteBatch is used to set a prepared statement objects batch size:
import java.sql.*; import oracle.jdbc.driver.*; import java.io.*; import java.util.*; Connection conn = DriverManager.getConnection (jdbc;oracle;oci8:@local,scott,tiger); // this statement opens a file and converts it to an data input stream in order to read it // line by line DataInputStream inputStream = new DataInputStream(new FileInputStream(inputfile.csv)); PreparedStatement prepStatement = conn.prepareStatement (insert into customer values (?, ?, ?)); //Change batch size for this statement to 10 ((OraclePreparedStatement)ps).setExecuteBatch (10); String inputLine; while ((inputLine = inputStream.readLine()) != null) { // the following line calls a method that takes a // line read from the file and parses it into multiple // fields - Vector rowValue = parseRow(inputLine); // The following 3 statements insert the file fields in the Vector // created before into a row in the table Customer prepStatement.setInt (1, rowValue.elementAt(0).toString()); prepStatement.setInt (2, rowValue.elementAt(1).toString()); prepStatement.setInt (3, rowValue.elementAt(2).toString()); //The following statement queues this for later execution // on every 10th statement, the inserts will be posted to the // database. prepStatement.executeUpdate (); } // End of While Loop // This statement sends any remaining inserts to the database ((OraclePreparedStatement) prepStatement).sendBatch (); prepStatement.close(); }
Oracle JDBC drivers support execution of PL/SQL stored procedures and anonymous blocks. The following example shows a Java class callPLSQL calling an Oracle stored procedure and a function:
/* * This example show how to call Oracle store procedures * or functions from java via JDBC */ import java.sql.*; class callPLSQL { public static void main (String args []) throws SQLException, ClassNotFoundException { // Load the driver Class.forName (oracle.jdbc.driver.OracleDriver); // Connect to the database with the user scott, the // password tiger and the TNS connect string LOCAL Connection conn = DriverManager.getConnection (jdbc;oracle;oci8:@LOCAL, scott, tiger); // Call a procedure with an IN/OUT prameter // The procedure name is oracle_in_out_proc { CallableStatement inoutProc = conn.prepareCall (begin oracle_in_out_proc (?); end;); // The following line registers the out parameter as being // of type Char in position 1 of the stored procedure inoutProc.registerOutParameter (1, Types.CHAR); // The following line assigns the literal testing to the // first input variable of the proc (it is now being used // for input and output inoutProc.setString (1, testing); // The next line executes the proc inoutProc.execute (); System.out.println (Out argument is: + inoutProc.getString (1)); } // Call to a function with an OUT parameter and a return code // This is simliar to the call above, but the first ? is // assigned to the return value from the function. { CallableStatement funcout = conn.prepareCall (begin ? := funcout (?); end;); funcout.registerOutParameter (1, Types.CHAR); funcout.registerOutParameter (2, Types.CHAR); funcout.execute (); System.out.println (Return value is: + funcout.getString (1)); System.out.println (Out argument is: + funcout.getString (2)); } } }
The Oracle JDBC drivers support all database metadata entry points. A full description of the Metadata class can be found in the Java.Sql specification in JDK 1.1+.
The JDBC support of streaming, either from database to client or client to database (for all stream conversionsbinary, ASCII, and Unicode), allows an efficient means to BLOB.
/* * This example shows how to stream data from the database */ import java.sql.*; import java.io.*; class streamExample { public static void main (String args []) throws SQLException, ClassNotFoundException, IOException { // Load the driver Class.forName (oracle.jdbc.driver.OracleDriver); // Connect to the database // You can put a database name after the @ sign in the connection URL. Connection conn = DriverManager.getConnection (jdbc;oracle;oci8:@, scott, tiger); // Its faster when you dont commit automatically conn.setAutoCommit (false); // Create a Statement Statement stmt = conn.createStatement (); // // You can insert the data in Example.txt into the database. File inFile = new File (Example.txt); InputStream inputStr = new FileInputStream (Example.txt); PreparedStatement prepStmt = conn.prepareStatement (insert into example (the_key, long_value) values (?, ?)); // Insert the key into the first column and the contents of // the file into the second column. The last attribute // gives the AsciiStream the length of the file prepStmt.setAsciiStream (2, inputStr, (int)inFile.length ()); prepStmt.setString (1, FirstExample); prepStmt.execute (); } }
Previous | Table of Contents | Next |