JDBC Code Templates
1. Connection
*. To open a connection using thin driver :
DriverManager.getConnection("jdbc:oracle:thin:@<mc-name>:<port-no>:<sid>",
"scott", "tiger");
OR
DriverManager.getConnection("jdbc:oracle:thin:@(description=(address=(host=<mc-name>)(protocol=tcp)(port=<port-no>))(connect_data=(sid=<sid>)))",
"scott","tiger");
*. To open a connection using OCI driver.
To use the default connection.
DriverManager.getConnection("jdbc:oracle:oci8:@", "scott","tiger");
Or
DriverManager.getConnection("jdbc:oracle:oci8:@(description=(address=(host=<mc-name>)(protocol=tcp)(port=<port-no>))(connect_data=(sid=<sid>)))",
"scott","tiger");
Or
DriverManager.getConnection("jdbc:oracle:oci8:@<tns-name>", "scott","tiger");
*. Closing a connection.
conn.close();
*. To set auto commit on.
conn.setAutoCommit(true)
*. To set the batch size to 100
((OracleConnection)conn).setDefaultExecuteBatch (100);
2. Statements
*. To create a statement
Statement stmt = conn.createStatement();
*. To create a prepared Statement
PreparedStatement pstmt =
conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (?, ?)");
*. To Create a callable statement.
CallableStatement procnone = conn.prepareCall ("begin procnone; end;"
*. To execute a SQL that returns a QUERY
ResultSet rset = stmt.executeQuery ("select ENAME from EMP");
*. To execute a DML that returns the no of rows affected
PreparedStatement pstmt =
conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (123, 'John')");
int rows = pstmt.executeUpdate ();
Ps. execute and executeQuery can also be called on a PreparedStatement.
They return a boolean and resultSet respectively.
PreparedStatement pstmt =
conn.prepareStatement ("select ENAME from EMP where EMPNO = ?");
pstmt.setInt(1,123);
ResultSet rset = pstmt.executeQuery();
*. To execute a DDL.
boolean status = stmt.execute("create table temp(col1 int)");
*. To Bind an IN variable.
PreparedStatement pstmt =
conn.prepareStatement ("select ENAME from EMP where EMPNO = ?");
pstmt.setInt(1,123);
ResultSet rset = pstmt.executeQuery();
* To Bind an OUT variable
CallableStatement funcin = conn.prepareCall ("begin ? := funcout (?); end;");
funcout.registerOutParameter (1, Types.CHAR);
funcout.registerOutParameter (2, Types.CHAR);
Where funcout is,
create or replace function funcout (y out char)
return char is
begin
y := 'tested';
return 'returned';
end;
* To set the batch size to 100
((OracleStatement)stmt).setRowPrefetch (100);
* To explicitly send the row to the server in batch mode.
int rows = ((OracleStatement)stmt).sendBatch();
3. ResultSets
* Fetch the next row
rset.next();
* Retrieve data from column i based on column no
rset.getInt(i);
* Based on Column Name
rset.getInt("EMPNO");
* Close the resultset
rset.close();
4. Streams: Long columns in JDBC are streamed.
* To set a long (Stream) column
pstmt.setAsciiStream (1, <input-stream>, <input-stream-length>);
If the string data is in Unicode format, then use setUnicodeStream.
pstmt.setUnicodeStream (1, <input-stream>, <input-stream-length>);
For long raw columns, use setBinaryStream
pstmt.setBinaryStream (1, <input-stream>, <input-stream-length>);
create table streamexample (data long)
PreparedStatement pstmt =
conn.prepareStatement ("insert into streamexample values (?)");
InputStream is = new FileInputStream ("notes.txt");
File file = new File ("notes.txt");
pstmt.setAsciiStream (1, is, (int)file.length ());
* To retrieve a long column
ResultSet rset =
stmt.executeQuery ("select * from streamexample");
InputStream ascii_data = rset.getAsciiStream (1);
// Loop, reading from the gif stream and writing to the file
int c;
while ((c = ascii_data.read ()) != -1)
Systemm.out.print(c);
5. Objects
* How to create a STRUCT type descriptor
StructDescriptor type_descriptor =
StructDescriptor.createDescriptor (<type name>, connection);
* How to create a STRUCT object
Object[] attributes = { ... };
STRUCT obj = new STRUCT (<type descriptor>, connection, attributes };
* How to create a SQL to Java type map entry.
map.put (<SQL Type Name>, <Java class which implements SQLData interface>);
* How to retrieve a STRUCT column.
1. As a SQLData object.
For example, to map SQL type "PERSON" to Java class "PersonObj.java"
which implements oracle.jdbc2.SQLData interface:
java.util.Dictionary map = new Hashtable (10);
map.put ("PERSON", Class.forName ("PersonObj"));
PersonObj obj = (PersonObj) rset.getObject (1, map);
2. As a CustomDatum object
CustomDatum obj = rset.getCustomDatum (1, <CustomDatum factory>);
3. As a oracle.sql.STRUCT object
STRUCT obj = (STRUCT) rset.getObject (1);
* How to retrieve STRUCT attributes.
1. With Connection default type map.
STRUCT struct = ...
Object[] attributes = struct.getAttributes ();
2. With the requested type map.
java.util.Dictionary map = ...
STRUCT struct = ...
Object[] attributes = struct.getAttributes (map);
3. Without map, return as oracle Datums.
Datum[] attributes = struct.getOracleAttributes ();
* How to create a ARRAY type descriptor
ArrayDescriptor type_descriptor =
ArrayDescriptor.createDescriptor (<type name>, connection);
* How to create a ARRAY object
Object[] elements = { ... };
ARRAY obj = new ARRAY (<type descriptor>, connection, elements };
* How to retrieve a ARRAY column.
ARRAY obj = ((OracleResultSet) rset).getARRAY (1);
* How to retrieve ARRAY elements.
ARRAY array = (ARRAY) rset.getObject (1);
Object[] elements = array.getArray ();
or
Object[] elements = array.getArray (<type map for elements>);
or
Object[] elements = array.getArray (<begin index>, <count>);
or
Object[] elements = array.getArray (<begin index>, <count>, <type map>);
* How to retrieve ARRAY elements as a ResultSet which holding the elements.
ARRAY array = (ARRAY) rset.getObject (1);
ResultSet array_rset = array.getResultSet ();
or
ResultSet array_rset = array.getResultSet (<type map for elements>);
or
ResultSet array_rset = array.getResultSet (<begin index>, <count>);
or
ResultSet array_rset = array.getResultSet (<begin index>, <count>, <type map>);
* How to retrieve a REF column.
REF obj = ((OracleResultSet) rset).getREF (1);
* To access the value which a REF points to.
REF ref = ((OracleResultSet)rset).getREF (1);
Object value = ref.getValue (); // use connection default map
or
REF ref = ((OracleResultSet) rset).getREF (1);
Object value = ref.getValue (<type map>); // use specified map
* To change the value which a REF points to.
REF ref = ((OracleResultSet) rset).getREF (1);
Object newValue = ...;
ref.setValue (newValue);
6. LOBS
* To read a piece of a LOB.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
byte[] bytes = blob.getBytes (<begin index>, <length>);
CLOB clob = ((OracleResultSet) rset).getCLOB (2);
String str = clob.getSubString (<begin index>, <length>);
BFILE bfile = ((OracleResultSet) rset).getBFILE (3);
byte[] bytes = bfile.getBytes (<begin index>, <length>);
* To read the LOB content as a stream.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
InputStream input_stream = blob.getBinaryStream ();
input_stream.read (...);
CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
Reader char_stream = Clob.getCharacterStream ();
char_stream.read (...);
CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
InputStream input_stream = Clob.getAsciiStream ();
input_stream.read (...);
BFILE bfile = ((OracleResultSet) rset).getBFILE (1);
InputStream input_stream = bfile.getBinaryStream ();
input_stream.read (...);
* To write a specified amount of data into a LOB.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
byte[] data = ...
int amount_written = blob.putBytes (<begin index>, data);
CLOB clob = ((OracleResultSet) rset).getCLOB (1);
String data = ...
int amount_written = clob.putString (<begin index>, data);
* To replace the LOB content from a stream.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
OutputStream output_stream = blob.getBinaryOutputStream ();
output_stream.write (...);
CLOB clob = ((OracleResultSet) rset).getCLOB (1);
Writer char_stream = Clob.getCharacterOutputStream ();
char_stream.write (...);
CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
OutputStream output_stream = Clob.getAsciiOutputStream ();
output_stream.write (...);
* To get LOB length.
long length = blob.length ();
long length = clob.length ();
long length = bfile.length ();
댓글 없음:
댓글 쓰기