39
RMI and JDBC Some Database terminology Connecting a remote object to a database From relations to XML Gary Alperson helped developed these slides and the JDBC/RMI example.

RMI and JDBC

Embed Size (px)

DESCRIPTION

RMI and JDBC. Some Database terminology Connecting a remote object to a database From relations to XML Gary Alperson helped developed these slides and the JDBC/RMI example. Database Terminology. - PowerPoint PPT Presentation

Citation preview

Page 1: RMI and JDBC

RMI and JDBC

• Some Database terminology• Connecting a remote object to a database• From relations to XML

Gary Alperson helped developed these slides and the JDBC/RMI example.

Page 2: RMI and JDBC

Database Terminology

• Database: A shared collection of logically related data (and a description of this data) designed to meet the information needs of an organization

• Relation: A table with columns and rows

• Attribute: A named column of a relation

• Tuple: A row in a relation

Definitions from Database Systemsby Connolly, Begg, and Strachan

Page 3: RMI and JDBC

Sample Table

brokerb_id lname fname

1 Smith John2 Jones Hannah3 Reynolds Leon4 Chang Donna5 Smith Deborah6 Thompson Daniel7 Frendun Laura

Page 4: RMI and JDBC

brokerb_id lname fname

1 Smith John2 Jones Hannah3 Reynolds Leon4 Chang Donna5 Smith Deborah6 Thompson Daniel7 Frendun Laura

Attribute

Page 5: RMI and JDBC

brokerb_id lname fname

1 Smith John2 Jones Hannah3 Reynolds Leon4 Chang Donna5 Smith Deborah6 Thompson Daniel7 Frendun Laura

Tuple

Page 6: RMI and JDBC

SQL

• Data Definition Language (DDL)– Create tables– Modify tables– Delete (drop) tables

• Data Manipulation Language (DML)– Insert data– Update data– Select data

Page 7: RMI and JDBC

Select Statement

brokerb_id lname fname

1 Smith John2 Jones Hannah3 Reynolds Leon4 Chang Donna5 Smith Deborah6 Thompson Daniel7 Frendun Laura

We will use this data for our examples

Page 8: RMI and JDBC

From the broker table, select the contents of the last name attribute

Query

SELECT lname

FROM broker;

ResultslnameSmithJonesReynoldsChangSmithThompsonFrendun

SQL is not case sensitive. Key SQL words are capitalized and line breaks are inserted by convention.

Page 9: RMI and JDBC

From the broker table, select all attributes

Query

SELECT *

FROM broker;

Results

* Acts as a wildcard

brokerb_id lname fname

1 Smith John2 Jones Hannah3 Reynolds Leon4 Chang Donna5 Smith Deborah6 Thompson Daniel7 Frendun Laura

Page 10: RMI and JDBC

From the broker table, select all attributes where the last name is Smith

Query

SELECT *

FROM broker

WHERE lname = ‘Smith’;

Results

•Note that the string is enclosed by single quotes•The contents of a string are case sensitive

brokerb_id lname fname

1 Smith John5 Smith Deborah

Page 11: RMI and JDBC

Use AND or OR to connect multiple where clauses

Query

SELECT *FROM brokerWHERE lname = ‘Smith’AND fname = ‘John’;

Results

b_id lname fname1 Smith John

Page 12: RMI and JDBC

Example with two Tables

One-to-many relationship•Each broker may have many customers•Each customer is only affiliated with one broker•The b_id joins both tables by identifying the unique broker that each customer is associated with

broker customerb_id lname fname

1 Smith John2 Jones Hannah3 Reynolds Leon4 Chang Donna5 Smith Deborah6 Thompson Daniel7 Frendun Laura

customerid b_id lname fname

1 1 LeParc Wilson2 1 AnstinceDevon3 2 Tabor Mark4 2 Lenks Sandy5 2 PhillipsonRichard6 3 Kini Raghu7 4 Kim David

Page 13: RMI and JDBC

Cartesian Productbroker.b_id

broker.lname

broker.fname

id customer.b_id

broker.lname

broker.fname

1 Smith John 1 1 LeParc Wilson1 Smith John 2 1 Anstince Devon1 Smith John 3 2 Tabor Mark1 Smith John 4 2 Lenks Sandy1 Smith John 5 2 Phillipson Richard1 Smith John 6 3 Kini Raghu1 Smith John 7 4 Kim David2 Jones Hannah 1 1 LeParc Wilson2 Jones Hannah 2 1 Anstince Devon2 Jones Hannah 3 2 Tabor Mark2 Jones Hannah 4 2 Lenks Sandy2 Jones Hannah 5 2 Phillipson Richard2 Jones Hannah 6 3 Kini Raghu2 Jones Hannah 7 4 Kim David3 Reynolds Leon 1 1 LeParc Wilson3 Reynolds Leon 2 1 Anstince Devon3 Reynolds Leon 3 2 Tabor Mark3 Reynolds Leon 4 2 Lenks Sandy3 Reynolds Leon 5 2 Phillipson Richard3 Reynolds Leon 6 3 Kini Raghu3 Reynolds Leon 7 4 Kim David4 Chang Donna 1 1 LeParc Wilson4 Chang Donna 2 1 Anstince Devon4 Chang Donna 3 2 Tabor Mark4 Chang Donna 4 2 Lenks Sandy4 Chang Donna 5 2 Phillipson Richard4 Chang Donna 6 3 Kini Raghu4 Chang Donna 7 4 Kim David

When you do a query on multiple tables, SQL begins by creating the Cartesian product, which combines each tuple from one relation from every tuple of the other relation.(Actual SQL implementationsare free to compute the resulting table efficiently,i.e., the actual Cartesian product may not be generated at all.)

Page 14: RMI and JDBC

Query

SELECT *

FROM customer, broker

WHERE broker.b_id = 1;

SQL does not realize that the b_id in the customer table is the same as the b_id in the broker table unless you join them in the

where clause.

broker.b_id

broker.lname

broker.fname

id customer.b_id

broker.lname

broker.fname

1 Smith John 1 1 LeParc Wilson1 Smith John 2 1 Anstince Devon1 Smith John 3 2 Tabor Mark1 Smith John 4 2 Lenks Sandy1 Smith John 5 2 Phillipson Richard1 Smith John 6 3 Kini Raghu1 Smith John 7 4 Kim David

Results

Page 15: RMI and JDBC

Cartesian ProductQuery

SELECT *

FROM customer, broker

WHERE broker.b_id = 1

AND broker.b_id = customer.b_id;

Resultsbroker.b_id

broker.lname

broker.fname

id customer.b_id

broker.lname

broker.fname

1 Smith John 1 1 LeParc Wilson1 Smith John 2 1 Anstince Devon

Page 16: RMI and JDBC

ODBC

ODBC is a programming interface that enables applications to access data in

database systems that use Structured Query Language (SQL) as a data standard.

Page 17: RMI and JDBC

Creating an ODBC Connection

• Click on the Start button.• Choose Settings, Control Panel• Double-click on ODBC Data Sources• Choose the System DSN tab• Click Add

Page 18: RMI and JDBC

•Click on the desired driver (MSAccess)•Click on the Finish button

Page 19: RMI and JDBC

•Enter a Data Source Name•Click on the Select button•Locate the desired file or directory•Click OK

Page 20: RMI and JDBC

Java’s JDBC

• Allows access to any ANSI SQL-2 DBMS• Does its work in terms of SQL• The JDBC has classes that represent: database connections SQL Statements Result sets database metadata• Can be connected to ODBC

Page 21: RMI and JDBC

SQL Query as a Java String

The SQL

SELECT customer.lname

FROM customer, broker

WHERE broker.lname = ‘Smith’

AND broker.b_id <> 1

AND broker.b_id = customer.b_id;

From both tables select the last names of all customers whose broker’s last name is Smith but whose broker ID is not 1.

Page 22: RMI and JDBC

Executing a query in Java

// Statement aStatement = statement got from connection

String last = “Smith”;

int nonID = 1;

String q = “SELECT customer.lname FROM customer, broker” + “WHERE broker.lname = \’” + last + “\’ AND broker.b_id” + “<>” + nonID + “AND broker.b_id = customer.b_id;”);ResultSet rs = aStatement.executeQuery(q);

•The slash (\) is the escape character. It precedes the single quote to tell Java to include that quote in the String•The String last is outside of the double quotes, because it must be concatonated with the String sent to the database, but it falls within the single quotes so that SQL treats it as a string•nonID does not go within single quotes since it is numeric•Since the String is an SQL statement, it uses = and <> rather than == and !=

Page 23: RMI and JDBC

JDBC and RMI

• Create an ODBC data source that will allow us to connect to an Access database (see above)• Create a server class that registers an object with the rmi registry.• The remote object must have an interface on the client and the server (needed to create the stub for marshalling)• The client accesses the remote object and calls its methods. The remote methods access the database with SQL statements.

Page 24: RMI and JDBC

// On the server side DBServer.javaimport java.rmi.Naming;public class DBServer { public DBServer() { try { StockDB rc = new StockDBImpl(); Naming.rebind("stocks", rc); } catch(Exception e) { System.out.println("Trouble: " + e); } } public static void main(String args[]) { new DBServer(); System.out.println("Server Active"); }}

Remote object

RegisterWith rmi registry

Page 25: RMI and JDBC

Provide an interface for the client and the server

// On the client and the server StockDB.java

//This is the interface to the remote object SockDBImplimport java.sql.*;

public interface StockDB extends java.rmi.Remote {

public String getCustomers() throws java.rmi.RemoteException; public String getStocks() throws java.rmi.RemoteException; public String getPortfolio() throws java.rmi.RemoteException;

}

Page 26: RMI and JDBC

The remote object connects to JDBC

// DBImpl2.java// The remote objectimport java.util.*;import java.sql.*;import java.io.*;

public class StockDBImpl2 extends java.rmi.server.UnicastRemoteObject implements StockDB { private Connection con; private Statement s;

Page 27: RMI and JDBC

//The constructor runs the inherited constructor

public StockDBImpl2() throws java.rmi.RemoteException { super(); } // This private method is called to connect to the database. private void connectToDB() throws SQLException { DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); con = DriverManager.getConnection("jdbc:odbc:stocks"); }

// This private method is called to disconnect from the database. private void disconnectFromDB() throws SQLException{ con.close(); }

Page 28: RMI and JDBC

private String getXML(ResultSet rs, ResultSetMetaData rsm) throws SQLException {

// Currently, this method only returns a non-xml String // representing the rows of the result set String answer; answer = ""; while(rs.next()) { for(int col = 1; col <= rsm.getColumnCount(); col++) { answer += rs.getString(col); } } return answer; }

Page 29: RMI and JDBC

public String getCustomers() throws java.rmi.RemoteException { try { connectToDB(); Statement s = con.createStatement(); ResultSet rs; ResultSetMetaData rsm; rs = s.executeQuery("select * from customer"); rsm = rs.getMetaData(); String answer = getXML(rs,rsm); rs.close(); s.close(); disconnectFromDB(); return answer; } catch(SQLException sq) { System.out.println("SQLException: "+sq); } return null; }

Page 30: RMI and JDBC

public String getStocks()

throws java.rmi.RemoteException { return null;

}

public String getPortfolio()

throws java.rmi.RemoteException { return null;

} }

Page 31: RMI and JDBC

The client makes requests on the remote object

// StockDBClient.java

import java.io.*;import java.rmi.*;import java.net.*;import java.sql.*;public class StockDBClient {

Page 32: RMI and JDBC

public static StockDB stockDataBase; public static void main(String[] args) { try { stockDataBase = (StockDB)Naming.lookup( "rmi://mccarthy.heinz.cmu.edu/stocks"); String xml = stockDataBase.getCustomers(); System.out.println(xml);

xml = stockDataBase.getPortfolio(); System.out.println(xml); xml = stockDataBase.getStocks(); System.out.println(xml);

}

Page 33: RMI and JDBC

catch (MalformedURLException murle) { System.out.println(); System.out.println("MalformedURLException"); System.out.println(murle); } catch (RemoteException re) { System.out.println(); System.out.println("RemoteException"); System.out.println(re); } catch (NotBoundException nbe) { System.out.println(); System.out.println("NotBoundException"); System.out.println(nbe); }

Page 34: RMI and JDBC

catch (java.lang.ArithmeticException ae) { System.out.println(); System.out.println("ArithmeticException"); System.out.println(ae); } catch(IOException e) { System.out.println(); System.out.println("IOException"); System.out.println(e); } }}

Page 35: RMI and JDBC

Homework Database Schema

customer stocks portfolioid symbol idlname company symbolfname price num_shares

There are three tables. Both customer and stocks have a one-to-many relationship with portfolios

Page 36: RMI and JDBC

Customer

----------------------------------------------------------------| id | lname | fname |----------------------------------------------------------------| 1 | Jones | Robert |----------------------------------------------------------------| 2 | Smith | Elaine |----------------------------------------------------------------| 3 | Chan | Jane |----------------------------------------------------------------| 4 | Morales | Hector |----------------------------------------------------------------| 5 | Schwartz | Michael |----------------------------------------------------------------

Page 37: RMI and JDBC

Stocks----------------------------------------------------------| symbol | company | price |---------------------------------------------------------| COMS | 3Com Corporation | 12.9375 |---------------------------------------------------------------------| IBM | International Business Machines | 96.625 |---------------------------------------------------------------------| INTC | Intel Corporation | 34.125 |---------------------------------------------------------------------| ORCL | Oracle Corporation | 26.4375 |---------------------------------------------------------------------| SE | 7Eleven Inc. | 8.0625 |---------------------------------------------------------------------

Page 38: RMI and JDBC

Portfolio

----------------------------------------------------------------| id | symbol | num_shares |----------------------------------------------------------------| 1 | COMS | 1250 |----------------------------------------------------------------| 1 | INTC | 300 |----------------------------------------------------------------| 1 | ORCL | 450 |----------------------------------------------------------------| 2 | COMS | 750 |----------------------------------------------------------------| 2 | IBM | 900 |

Page 39: RMI and JDBC

----------------------------------------------------------------| 2 | INTC | 600 |----------------------------------------------------------------| 3 | COMS | 3232 |----------------------------------------------------------------| 3 | IBM | 1000 |----------------------------------------------------------------| 3 | SE | 200 |----------------------------------------------------------------| 4 | COMS | 333 |----------------------------------------------------------------| 4 | IBM | 250 |----------------------------------------------------------------| 4 | INTC | 400 |----------------------------------------------------------------| 5 | COMS | 750 |----------------------------------------------------------------| 5 | IBM | 250 |----------------------------------------------------------------| 5 | ORCL | 1000 |----------------------------------------------------------------| 5 | SE | 900 |----------------------------------------------------------------