Chapter 5. Application development with Java 
225
while(rs.next())
{
com.ibm.db2.jcc.DB2Xml data=(com.ibm.db2.jcc.DB2Xml)
rs.getObject(1);
// Print the result as DB2 XML String
System.out.println();
System.out.println(data.getDB2String());
}
// Close the result set
rs.close();
The metadata information regarding the XML data type column gives the data 
type of the column as java.sql.Types.OTHER because there is no XML data
type defined in the JDBC standard.
5.7  Simple application program life cycle
Figure 5-1 on page 226 shows different life cycles for a query in an application 
program. An application program starts by getting the Connection object for the 
database using DriverManager. A Connection object can be used to create three 
different kinds of SQL statements: Statement, PreparedStatement, and 
CallableStatements. Connection objects provide methods to create any of these 
objects. A Statement object is used to execute the SQL statement with a 
parameter, and the PreparedStatement can be used to run the SQL statement 
with a parameter. CallableStatement is used to call the user defined functions 
(UDFs). Figure 5-1 depicts different paths for an SQL statement in a JDBC 
program.
Pdf files thumbnail preview - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
enable pdf thumbnails in; cannot view pdf thumbnails in
Pdf files thumbnail preview - VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
pdf file thumbnail preview; enable pdf thumbnails
226
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Figure 5-1   Different path for an SQL statement in a JDBC program
Each of the three classes, Statement, PreparedStatement, and 
CallableStatement, provides three different methods to execute a query: 
 executeQuery: This method is used to select the rows and return a resultSet 
object.
 executeUpdate: This method is used to update the database and return the 
update count.
 execute method: This method returns a Boolean value of true if the output of 
the query is a ResultSet object ( SELECT ) and false if its an update statement 
( INSERT, UPDATE, or DELETE).
The getUpdateCount method can be used to get the number of rows updated in 
the database by the SQL statement. The getXXX method of the ResultSet object 
can be used to fetch the individual rows.
For CallableStatement, each of these methods has a slightly different meaning. 
The executeQuery method is used when the stored procedure returns a 
ResultSet, where execute is used when the stored procedure returns multiple 
ResultSets.
Driver Manager
Connection
CreateStatement() 
ResultSet
setXXX(?.?)
executeQuery() 
setXXX(?.?)
executeUpdate() 
setXXX(?.?)
execute() 
execute()
Update
Count
Records
Update
Count
Update
Count
Records
executeQuery(?) 
CallableStatement
Statement
executeUpdate(?) 
ResultSet
setXXX(?.?)
executeQuery()
getUpdateCount() 
getUpdateCount() 
setXXX(?.?)
executeUpdate()
Records
next()
getXXX(?.?)
ResultSet
False
getUpdateCount()
PreparedStatement
ResultSet
next()
getXXX(?.?)
next()
getXXX(?.?)
getConnection(?.?.?) 
PrepareStatement(?) 
Null
PrepareCall(?) 
True
How to C#: Preview Document Content Using XDoc.Word
With the SDK, you can preview the document content according to the preview thumbnail by the ways as following. C# DLLs for Word File Preview. Add references:
how to show pdf thumbnails in; program to create thumbnail from pdf
How to C#: Preview Document Content Using XDoc.PowerPoint
With the SDK, you can preview the document content according to the preview thumbnail by the ways as following. C# DLLs: Preview PowerPoint Document.
enable pdf thumbnail preview; create pdf thumbnail image
Chapter 5. Application development with Java 
227
5.8  Introduction to javax.sql package
The javax.sql package defines extension to the JDBC 2.0 API to support 
connection pooling, data source, distributed transaction, and so on. DB2 
universal database implements all of these interfaces. DataSource 
implementation is explained below.
5.8.1  DataSource
Using DriverManager to get the database connection makes the application 
dependent on the vendor specific URL and driver classes. A DataSource object 
can be used to get the connection, which is portable among the different data 
sources, hence, not dependent on the specific URL format and driver classes. 
This portability is gained by registering the different data sources with the JNDI 
service (javax.naming service) and getting the information about any data 
sources by providing the logical name of the datasource in the application. A 
DataSource object is either created in the application itself or by a lookup in the 
JNDI service. Before making use of lookup in JNDI services, you need to register 
the database to JNDI.
The Example 5-17 gives an example of creating DataSource object by JNDI 
lookup service and getting the connection to the data source.
Example 5-17   Creating DataSource by JNDI lookup service
Context ctx=new InitialContext(); 
DataSource ds=(DataSource)ctx.lookup("sampledb");   
Connection con=ds.getConnection(); 
A DataSource object can be bound to a logical name by registering it to JNDI. 
Registering to JNDI services requires setting all of the properties to get a 
connection such as database name, user name, password, and so on. Once the 
data source is registered, an application needs to know only the logical name to 
retrieve the database connection. DB2 universal driver provides the following 
implementation for the DataSource:
com.ibm.db2.jcc.DB2SimpleDataSource
A data source can be registered using this implementation as shown in 
Example 5-18.
How to C#: Preview Document Content Using XDoc.excel
document in memory. With the SDK, you can preview the document content according to the preview thumbnail by the ways as following.
create thumbnails from pdf files; pdf thumbnail preview
How to C#: Overview of Using XDoc.PowerPoint
Tell C# users how to: create a new PowerPoint file and load PowerPoint; merge, append, and split PowerPoint files; insert, delete, move, rotate Create Thumbnail.
show pdf thumbnail in html; pdf thumbnail generator online
228
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Example 5-18   Registering data source
DB2SimpleDataSource db2ds=new com.ibm.db2.jcc.DB2SimpleDataSource();
db2ds.setDatabaseName("sample");
db2ds.setDescription("sample database for DB2 Express-C");
Context ctx=new InitialContext();
ctx.bind("sampledb",db2ds);
5.9  Exception handling
JDBC exception handling is done using the try-catch block of the Java 
application. A DB2 application throws an SQLException whenever it encounters 
the SQL error while running the SQL statements.
5.9.1  SQLExceptions
An object of SQLException is created and thrown whenever an error occurs 
while accessing the database.The object gives the following information 
regarding the error:
 Message:
Message is a textual representation of the error code. The getMessage 
method of the SQLException object returns this message string.
 SQLState:
The SQLState string can be retrieved from the SQLException object by 
calling the SQLState method.
 ErrorCode:
This is an integer value and indicates the error which caused the exception to 
be thrown. Error codes can be retrieved by calling the getErrorCode method 
of the SQLException object.
Apart from the above information, DB2 JCC driver provides an extra interface 
com.ibm.db2.jcc.DB2Diagnosable. This interface gives more information 
regarding the error that occurred while accessing the DB2 database. 
DB2Diagnosable interface has the following methods:
 getSqlca
This method returns the db2sqlca object, which gives an SQL error code, 
SQLERRMC values, SQLERRP value, SQLERRD values, SQLWARN 
values, and SQLState value.
 getThrowable
How to C#: Overview of Using XDoc.Word
Tell C# users how to: create a new Word file and load Word from pdf; merge, append, and split Word files; insert, delete, move, rotate Create Thumbnail.
pdf thumbnail html; create thumbnail jpg from pdf
How to C#: Set Image Thumbnail in C#.NET
Convert Jpeg to PDF; Merge PDF Files; Split PDF Document; Remove Password from VB.NET How-to, VB.NET PDF, VB.NET Word, VB How to C#: Set Image Thumbnail in C#.NET
show pdf thumbnails; view pdf thumbnails
Chapter 5. Application development with Java 
229
This method returns the java.lang.Throwable object that causes the 
SQLException if one exists.
 PrintTrace
This method prints the stack trace information.
If multiple SQLExceptions are thrown, they are chained. The next exception 
information can be retrieved by calling the getNextException method of the 
current SQLException object. This method will return null if the current 
SQLException object is last in the chain. A while loop in the catch block of the 
program can be used to retrieve all the SQLException objects one by one.
Example 5-19 shows how to handle the SQLException in the try-catch block.
Example 5-19   SQLException handling
try {
// code which can throw SQLException go here
} catch (SQLException sqle)
{
if(sqle instanceof DB2Diagnosable)
{
com.ibm.db2.jcc.DB2Diagnosable diag = 
(com.ibm.db2.jcc.DB2Diagnosable) sqle;
DB2Sqlca sqlca = diag.getSqlca();
if(sqlca != null)
{
int sqlCode=sqlca.getSqlCode();
String sqlErrmc = sqlca.getSqlErrmc();
String[] sqlErrmcTokens = sqlca.getSqlErrmcTokens();
String sqlErrp = sqlca.getSqlErrp();                          
// Get the SQLERRP
int[] sqlErrd = sqlca.getSqlErrd(); 
// Get SQLERRD fields
char[] sqlWarn = sqlca.getSqlWarn();                          
// Get SQLWARN fields
String sqlState = sqlca.getSqlState();  
// Get SQLSTATE
System.err.println 
("--------------- SQLCA ---------------");
System.err.println ("Error code: " + sqlCode);
System.err.println ("SQLERRMC: " + sqlErrmc);
for (int i=0; i< sqlErrmcTokens.length; i++) {
How to C#: Generate Thumbnail for Excel
Document. Conversion. Convert Excel to PDF. Convert Excel File: Merge Excel Files. File: Split Excel Document. Insert Image. Thumbnail Create. Thumbnail Create. |
pdf thumbnails; show pdf thumbnails in
How to C#: Generate Thumbnail for Word
Images. Convert Word to ODT. Convert PDF to Word. a Word File. File: Merge Word Files. File: Split Text Search. Insert Image. Thumbnail Create. Thumbnail Create.
how to make a thumbnail of a pdf; pdf thumbnail viewer
230
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
System.err.println ("  token " + i + ": "
+ sqlErrmcTokens[i]);
}
System.err.println ( "SQLERRP: " + sqlErrp );
System.err.println (
"SQLERRD(1): " + sqlErrd[0] + "\n" +
"SQLERRD(2): " + sqlErrd[1] + "\n" +
"SQLERRD(3): " + sqlErrd[2] + "\n" +
"SQLERRD(4): " + sqlErrd[3] + "\n" +
"SQLERRD(5): " + sqlErrd[4] + "\n" +
"SQLERRD(6): " + sqlErrd[5] );
System.err.println (
"SQLWARN1: " + sqlWarn[0] + "\n" +
"SQLWARN2: " + sqlWarn[1] + "\n" +
"SQLWARN3: " + sqlWarn[2] + "\n" +
"SQLWARN4: " + sqlWarn[3] + "\n" +
"SQLWARN5: " + sqlWarn[4] + "\n" +
"SQLWARN6: " + sqlWarn[5] + "\n" +  
"SQLWARN7: " + sqlWarn[6] + "\n" +
"SQLWARN8: " + sqlWarn[7] + "\n" +
"SQLWARN9: " + sqlWarn[8] + "\n" +
"SQLWARNA: " + sqlWarn[9] );
System.err.println ("SQLSTATE: " + sqlState);
}
else
{
System.out.println(sqle.getMessage());
System.out.println(sqle.getErrorCode());
sqle.printStackTrace();
}
System.out.println("Rollback the transaction and quit the
program");
System.out.println();
try { con.rollback(); }
catch (Exception e) {}
System.exit(1);
}
How to C#: Overview of Using XDoc.Excel
Tell C# users how to: create a new Excel file and load Excel; merge, append, and split Excel files; insert, delete, move, rotate, copy and Create Thumbnail.
create thumbnail from pdf; pdf thumbnail generator
How to C#: Generate Thumbnail for PowerPoint
Conversion. Convert PowerPoint to PDF. Convert PowerPoint to File. File: Merge PowerPoint Files. File: Split PowerPoint. Text Search. Insert Image. Thumbnail Create
how to create a thumbnail of a pdf document; thumbnail pdf preview
Chapter 5. Application development with Java 
231
The SQLException class has multiple subclasses, which define more specific 
errors. We explain these classes next.
5.9.2  SQLWarning
The SQLWarning object is created whenever there is a database warning that 
occurred while calling the methods of the following classes:
 Connection
 Statement
 PreparedStatement
 CallableStatement
 ResultSet
All these interfaces contain the getWarning method to retrieve the warning 
information. Note that the creation SQLWarning object does not throw any 
SQLException. You need to call the getWarning method of the above interface to 
check if any warning exists or not. See Example 5-20.
Example 5-20   Handling SQL warning
Statement stmt=con.createStatement();
stmt.executeUpdate("delete from product where pid='101'");
SQLWarning sqlwarn=stmt.getWarnings();
while(sqlwarn!=null)
{
System.out.println ("Warning description: " + sqlwarn.getMessage());    
System.out.println ("SQLSTATE: " + sqlwarn.getSQLState());              
System.out.println ("Error code: " + sqlwarn.getErrorCode());           
sqlwarn=sqlwarn.getNextWarning(); 
}
5.9.3  DataTruncation
The DataTruncation class is a subclass of the SQLWarning to handle the data 
truncation whenever an application tries to insert a value larger than the value 
defined in the database definition. In that case, the data is stored after truncating 
Note: Before using the method of Diagnosable class, make sure that the 
object of the SQLException thrown is an instance of this class. If not, you 
cannot use the method defined in this class. In that case, use the standard 
getMessage, getSQLState, and getErrorCode methods of SQLException to 
print the information.
232
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
the value to the specified size and a DataTruncation object is created to provide 
the information. Whenever truncation happens while reading the value from the 
database, an SQLWarning object is created instead of DataTruncation. A 
DataTruncation object is created when truncation occurred during writing to the 
database.
All the methods in SQLException and SQLWarning classes are inherited in this 
class. Apart from these, the following methods give more information regarding 
DataTruncation Exception:
 getParameter
This method returns true if the parameter value is truncated. It returns false 
if the column value is truncated.
 getIndex
This method will return an integer value, which gives the index of the 
parameter or column being truncated. This method will return -1 if the index 
of the column or parameter is unknown.
 getRead
This method will return true if the truncation occurs while reading. False is 
returned if truncation occurred while writing to the database.
 getDataSize
This methods returns the actual size of the data, which should be read or 
written to the database without truncation.
 getTransferSize
This method will return the size of the data, which is actually read or written to 
the database with truncation.
5.9.4  BatchUpdateException
An object of BatchUpdateException is thrown whenever an error occurs while 
running a set of statements together by using BatchUpdate. This class inherits all 
the methods from java.lang.Exception class. Apart from that, the following 
method is provided by the BatchUpdateException for the additional information:
 getUpdateCounts:
This method returns a array whose size is equal to the number of elements in 
the batch. This array has an entry for each statement in the batch to indicate 
the failure or success of the statement.
Example 5-21 on page 233 shows the catch block of the method createCart 
from our application example. This method does the batch update to update 
the cart table.
Chapter 5. Application development with Java 
233
Example 5-21   Handling BatchUpdateException
catch (BatchUpdateException buex) {
int [] updateCounts = buex.getUpdateCounts();
for (int i = 0; i < updateCounts.length; i++) {
System.err.println("  Statement " + i + ":" + 
updateCounts[i]);
System.err.println(" Message: " + buex.getMessage());
System.err.println(" SQLSTATE: " + buex.getSQLState());
System.err.println(" Error code: " + buex.getErrorCode());
SQLException ex = buex.getNextException();
while (ex != null) {
System.err.println("SQL exception:");
System.err.println(" Message: " + ex.getMessage());
System.err.println(" SQLSTATE: " + ex.getSQLState());
System.err.println(" Error code: " + ex.getErrorCode());
ex = ex.getNextException();
}
}
5.10  Transactions
Transaction are used to access data concurrently with consistency and by 
maintaining data integrity. You can view a database transaction as a set of 
interactions with the database system independent of other transactions, which 
are either completed or aborted. This set of interactions is called 
unit of work
. A 
unit of work can be defined as a set of SQL statements, which need to be 
executed successfully to complete a task. Any failure from these SQL statements 
should lead to failure of the transaction (unit of work), and the database system 
should be restored to the state where it is before starting the transaction. 
A single transaction can contain a set of queries, which reads and writes to the 
database. To complete a transaction, an application should make sure that all of 
the queries are executed successfully before ending the transaction. This is 
required to maintain the integrity of the data. For example, for an order, if the 
customer bought x quantity of the product y, the inventory details for product y 
should be decreased by the x amount to complete the purchase order 
transaction. If the purchase order is successful without updating the inventory, 
the data in the inventory details becomes inconsistent. 
234
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
A typical transaction has the following steps:
1. Start the transaction.
2. Execute some queries. (Any updates to the database are not visible to the 
outside world yet.)
3. Complete the transaction by committing. (Any updates to the database 
become visible now.)
To maintain the consistency and integrity in a transaction, JDBC includes the 
following concepts:
 Auto commit mode
 Transaction isolation level
 Savepoints
5.10.1  Auto commit mode
A transaction is started whenever an SQL statement requires one and there is no 
transaction in place. There is no explicit API defined to start a transaction.
Auto commit mode 
is set to indicate when to end a transaction. Auto commit 
mode can be set by setting the auto-commit attribute of the Connection object. 
This attribute is set to either enable or disable. Enabling this attribute makes 
each SQL statement a separate transaction. So whenever an SQL statement is 
issued by the application, a new transaction is started and once the statement is 
executed successfully, the transaction is completed by committing any updates 
done to the database. Disabling this attribute gives the application flexibility to 
end the transaction any time by calling the commit method of the Connection 
object. if any of the SQL statements in the transaction failed, the application 
needs to restore the state of the database by calling the rollback method of the 
Connection object. Disabling this attribute gives the flexibility to the application to 
include multiple SQL statements in a transaction and commit and roll back the 
transaction whenever needed.
The value of the auto-commit attribute of the Connection object can be set by 
calling the Connection object method setAutoCommit. The default value for this 
attribute is true (enable). If the value of the auto-commit attribute is changed in 
the middle of the transaction, the current transaction is committed and a new 
transaction with the changed value is started.
5.10.2  Transaction isolation level
The isolation level specifies how the data is visible to the transactions running 
concurrently while the transactions update the data in the database. Isolation 
level also relates to how the data is locked for a particular transaction. They 
Documents you may be interested
Documents you may be interested