You are on page 1of 15

Java JDBC

Programming
Solutions to
Workshops
Java JDBC Programming: Solutions to Workshops Page i

Table of Contents

2. Connecting to Database ............................................................................................................. 1


3. Using Static Statements.............................................................................................................. 2
4. Using Result Sets........................................................................................................................ 3
5. Updating Result Sets .................................................................................................................. 4
6. Using Prepared Statements........................................................................................................ 6
7. Getting Metadata......................................................................................................................... 8
9. Using Stored Procedures.......................................................................................................... 10
10. Transaction Management ....................................................................................................... 11
11. Using Batch Processing.......................................................................................................... 12
12. Managing Drivers .................................................................................................................... 13

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 1

2. Connecting to Database

import java.sql.*;

public class JdbcLabApp extends ApplicationBase


implements com.sb.gui.mvc.App {

private Connection _conn;


--------------------------------------------------------

public void connect(String strURL, String strUID, String strPWD,


int iTimeout) throws SQLException {

// Try to get a connection


_conn = DriverManager.getConnection( strURL, strUID, strPWD );
}
--------------------------------------------------------

public void disconnect() throws SQLException {


if(_conn != null && ! _conn.isClosed()) {
_conn.close();
_conn = null;
}
}

--------------------------------------------------------
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 2

3. Using Static Statements

public ResultSet executeQuery(String strSQL, boolean bEditable)


throws SQLException {

Statement stmt = _conn.createStatement();


ResultSet rs = stmt.executeQuery(strSQL);
return rs;
}
--------------------------------------------------------
public int executeUpdate(String strSQL) throws SQLException {
Statement stmt = _conn.createStatement();
int iResult = stmt.executeUpdate(strSQL);
stmt.close();
return iResult;
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 3

4. Using Result Sets

public Vector getCustomers() throws SQLException {


Vector v = new Vector();
Statement stmtCusts = _conn.createStatement();
String strSQL = "Select * from customers " +
"order by lastname, firstname" ;
ResultSet rsCusts = stmtCusts.executeQuery( strSQL );

while( rsCusts.next() ) {
Customer cust = new Customer();

cust.cust_no = rsCusts.getInt("cust_no");
cust.lastname = rsCusts.getString("lastname");
cust.firstname = rsCusts.getString("firstname");
cust.street = rsCusts.getString("street");
cust.city = rsCusts.getString("city");
cust.state = rsCusts.getString("state");
cust.zip = rsCusts.getString("zip");
cust.area_code = rsCusts.getString("area_code");
cust.phone = rsCusts.getString("phone");

v.add(cust);
}
return v;
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 4

5. Updating Result Sets

public ResultSet executeQuery(String strSQL, boolean bEditable)


throws SQLException {

if(bEditable) {
Statement stmt = _conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);

// Test updateable RS
ResultSet rs = stmt.executeQuery(strSQL);

return rs;
}
else {
Statement stmt = _conn.createStatement();
ResultSet rs = stmt.executeQuery(strSQL);
return rs;
}
}
--------------------------------------------------------
public void updateRow(ResultSet rs, Object[] objData,
String[] strColNames) throws SQLException {

for( int i = 0; i < objData.length; i++ ) {


rs.updateObject(strColNames[i], objData[i]);
}
rs.updateRow();
}
--------------------------------------------------------
public void insertRow(ResultSet rs, Object[] objData,
String[] strColNames) throws SQLException {

rs.moveToInsertRow();
for( int i = 0; i < objData.length; i++ ) {
if(objData[i] != null)
rs.updateObject(strColNames[i], objData[i]);
}
rs.insertRow();
rs.moveToCurrentRow();
}
--------------------------------------------------------

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 5

public void deleteRow(ResultSet rs) throws SQLException {


rs.deleteRow();

// Check if still on deleted row


if(rs.rowDeleted())
// If so, move to next row;
// if not on a valid row, move to previous.
if(! rs.next())
rs.previous();
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 6

6. Using Prepared Statements

private Connection _conn;


private PreparedStatement _prepOrders, _prepItems;
--------------------------------------------------------
public boolean createPreparedStatements() throws SQLException {
// return false;

// A prepared statement to retrieve orders for a customer


String strSQL =
"select order_no, order_price, order_date, city, state " +
"from orders where cust_no = ? order by order_no";
_prepOrders = _conn.prepareStatement(strSQL);

// A prepared statement to retrieve items for an order


strSQL =
"select item_no, product_id, quantity, price " +
"from order_items where order_no = ? order by item_no";
_prepItems = _conn.prepareStatement(strSQL);

return true;
}
--------------------------------------------------------
public void disconnect() throws SQLException {
if(_conn != null && ! _conn.isClosed()) {
_conn.close();
_conn = null;
}

_prepOrders = null;
_prepItems = null;
}
--------------------------------------------------------
public Vector getOrders(Customer cust) throws SQLException {
Vector v = new Vector();

_prepOrders.setInt(1, cust.cust_no);
ResultSet rsOrders = _prepOrders.executeQuery();

while( rsOrders.next() ) {
Order ord = new Order();
ord.cust_no = cust.cust_no;
ord.order_no = rsOrders.getInt("order_no");
ord.city = rsOrders.getString("city");

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 7

ord.state = rsOrders.getString("state");
ord.order_price = rsOrders.getFloat("order_price");
ord.order_date = rsOrders.getDate("order_date");
v.add(ord);
}

rsOrders.close();
return v;
}
--------------------------------------------------------
public Vector getItems(Order ord) throws SQLException {

Vector v = new Vector();

_prepItems.setInt(1, ord.order_no);
ResultSet rsItems = _prepItems.executeQuery();

while( rsItems.next() ) {
Item item = new Item();

item.order_no = ord.order_no;
item.item_no = rsItems.getInt("item_no");
item.product_id = rsItems.getInt("product_id");
item.quantity = rsItems.getInt("quantity");
item.price = rsItems.getFloat("price");

v.add(item);
}

return v;
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 8

7. Getting Metadata

private Connection _conn;


private PreparedStatement _prepOrders, _prepItems;
private DatabaseMetaData _dbmd;
--------------------------------------------------------
public void connect(String strURL, String strUID, String strPWD,
int iTimeout) throws SQLException {

// Try to get a connection


_conn = DriverManager.getConnection( strURL, strUID, strPWD );

// Initialize metadata object


_dbmd = _conn.getMetaData();
}
--------------------------------------------------------
public void disconnect() throws SQLException {
if(_conn != null && ! _conn.isClosed()) {
_conn.close();
_conn = null;
}

_prepOrders = null;
_prepItems = null;
_dbmd = null;
}
--------------------------------------------------------
public Vector getSchemas() throws SQLException {
Vector v = new Vector();

ResultSet rsSchemas = _dbmd.getSchemas();


while( rsSchemas.next() )
v.add( rsSchemas.getString( 1 ));

rsSchemas.close();
return v;
}
--------------------------------------------------------
public Vector getTables(String strSchemaName)
throws SQLException {

Vector v = new Vector();

ResultSet rsTables =
_dbmd.getTables(null, strSchemaName, null, null);

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 9

while( rsTables.next() )
v.add( rsTables.getString( 3 ));
rsTables.close();
return v;
}
--------------------------------------------------------
public Vector getColumns(String strTableName)
throws SQLException {

Vector v = new Vector();

ResultSet rsColumns =
_dbmd.getColumns(null, null, strTableName, null);
while( rsColumns.next() )
v.add( rsColumns.getString( 4 ) + "\n " +
rsColumns.getString( 6 ));
rsColumns.close();
return v;
}
--------------------------------------------------------
public String[] getGeneralMetadata() throws SQLException {
String strInfo[] = new String[4];
strInfo[0] = _dbmd.getDatabaseProductName();
strInfo[1] = _dbmd.getDatabaseProductVersion();
strInfo[2] = _dbmd.getDriverName();
strInfo[3] = _dbmd.getDriverVersion();

return strInfo;
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 10

9. Using Stored Procedures

private Connection _conn;


private PreparedStatement _prepOrders, _prepItems;
private DatabaseMetaData _dbmd;
private CallableStatement _csProc;
--------------------------------------------------------
public boolean createCallableStatement() throws SQLException {
// return false
String strSQL = "{ call orders_for_cust( ?, ?, ? ) }" ;
_csProc = _conn.prepareCall( strSQL );
_csProc.registerOutParameter( 2, Types.FLOAT );
_csProc.registerOutParameter( 3, Types.INTEGER );

return true;
}
--------------------------------------------------------
public void sumCustomerOrders(OrderTally ot)
throws SQLException {

_csProc.setInt(1, ot.customer.cust_no);
_csProc.setFloat(2, ot.min_amount);
_csProc.executeUpdate();

ot.tally = _csProc.getFloat(2);
ot.order_count = _csProc.getInt(3);
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 11

10. Transaction Management

public void setAutoCommit(boolean bState) throws SQLException {


_conn.setAutoCommit(bState);
}
--------------------------------------------------------
public void commit() throws SQLException {
_conn.commit();
}
--------------------------------------------------------
public void rollback() throws SQLException {
_conn.rollback();
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 12

11. Using Batch Processing

public int[] executeBatch(String[] strSQL) throws SQLException {


try {
Statement stmt = _conn.createStatement();
for( int i = 0; i < strSQL.length; i++ ) {
stmt.addBatch(strSQL[i]);
}
int[] iUpdateCounts = stmt.executeBatch();
stmt.close();
return iUpdateCounts;
}
catch(BatchUpdateException e) {
return e.getUpdateCounts();
}
}

© 2006 SkillBuilders, Inc. V 2.1


Java JDBC Programming: Solutions to Workshops Page 13

12. Managing Drivers

public void connect(String strURL, String strUID, String strPWD,


int iTimeout) throws SQLException {

// Try to get a connection


_conn = DriverManager.getConnection( strURL, strUID, strPWD );

// Initialize metadata object


_dbmd = _conn.getMetaData();

// Set login timeout


DriverManager.setLoginTimeout(iTimeout);
}
--------------------------------------------------------
public int getLoginTimeout() {
// return 0;
return DriverManager.getLoginTimeout();
}
--------------------------------------------------------
public boolean setTraceLog(boolean bEnable) {
//return false;
if(bEnable)
DriverManager.setLogWriter(new ConsoleLog());
else
DriverManager.setLogWriter(null);
return true;
}
--------------------------------------------------------
public boolean printToLog(String strMsg) {
//return false;
if(DriverManager.getLogWriter() != null) {
DriverManager.println(strMsg);
return true;
}
else
return false;
}

© 2006 SkillBuilders, Inc. V 2.1

You might also like