1 / 82

Java/JDBC

Java/JDBC. Some Database terminology (brief) A simple stand alone JDBC Application Java Server Pages and Scoping A simple JSP and JDBC example JSP and JDBC Connection Pooling Summary. Some Database Terminolgy. Gary Alperson helped developed these slides and the JDBC example.

rae
Télécharger la présentation

Java/JDBC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java/JDBC • Some Database terminology (brief) • A simple stand alone JDBC Application • Java Server Pages and Scoping • A simple JSP and JDBC example • JSP and JDBC Connection Pooling • Summary

  2. Some Database Terminolgy Gary Alperson helped developed these slides and the JDBC example.

  3. 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 Systems by Connolly, Begg, and Strachan

  4. Sample Table

  5. Attribute

  6. Tuple

  7. SQL • Data Definition Language (DDL) • Create tables • Modify tables • Delete (drop) tables • Data Manipulation Language (DML) • Insert data • Update data • Select data

  8. Select Statement We will use this data for our examples

  9. From the broker table, select the contents of the last name attribute Query SELECT lname FROM broker; Results SQL is not case sensitive. Key SQL words are capitalized and line breaks are inserted by convention.

  10. From the broker table, select all attributes Query SELECT * FROM broker; Results * Acts as a wildcard

  11. 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

  12. Use AND or OR to connect multiple where clauses Query SELECT * FROM broker WHERE lname = ‘Smith’ AND fname = ‘John’; Results

  13. 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

  14. Cartesian Product 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 implementations are free to compute the resulting table efficiently,i.e., the actual Cartesian product may not be generated at all.)

  15. Query SELECT * FROM customer, broker WHERE broker.b_id = 1; Results 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.

  16. Cartesian Product Query SELECT * FROM customer, broker WHERE broker.b_id = 1 AND broker.b_id = customer.b_id; Results

  17. 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.

  18. 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

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

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

  21. 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

  22. SQL Query as a Java String From both tables select the last names of all customers whose broker’s last name is Smith but whose broker ID is not 1. The SQL SELECT customer.lname FROM customer, broker WHERE broker.lname = ‘Smith’ AND broker.b_id <> 1 AND broker.b_id = customer.b_id;

  23. 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 !=

  24. A Simple Standalone JDBC Application // This program makes use of a stock database // and the primary JDBC classes (Connection, Statement, // ResultSet and ResultSetMetaData) import java.util.*; import java.sql.*; import java.io.*; public class TestCoolStocksDB { public static void main(String args[]) { Connection con = null; Statement s = null;

  25. ResultSet rs = null; ResultSetMetaData rsm = null; String answer = ""; try { DriverManager.registerDriver( new sun.jdbc.odbc.JdbcOdbcDriver()); con = DriverManager.getConnection("jdbc:odbc:CoolStocks"); s = con.createStatement(); rs = s.executeQuery("select * from customer"); rsm = rs.getMetaData();

  26. while(rs.next()) { for(int col = 1; col <= rsm.getColumnCount(); col++) answer += rs.getString(col); } con.close(); } catch (SQLException sqle) { System.err.println("Exception caught in main:" + sqle); } System.out.println(answer); } }

  27. It Works D:\McCarthy\www\95-713\examples\jdbc>java TestCoolStocksDB 1JonesRobert 2SmithElaine 3ChanJane 4MoralesHector 5SchwartzMichael The carriage returns were added.

  28. JSP and Scoping • When a browser visits a web site we may need to know if that same browser has visited before. • Java provides page scope, request scope, session scope, and application scope • For long term persistence we will often need a database Much of this lecture is from a nice little book entitled “Pure JSP” by Goodwill published by SAMS

  29. Page Scope Beans with page scope are accessible only within the page where they were created. A bean with page-level scope is not persistent between requests or outside the page

  30. Page Scope Example /* A simple bean that counts visits. */ import java.io.*; public class Counter implements Serializable { private int count = 1; public Counter() {} public int getCount() { return count++; } public void setCount(int c) { count = c; } }

  31. Under Tomcat webapps myApplication WEB-INF SomeFile.jsp classes web.xml These programs require a container. Counter.java

  32. <%-- Use the Counter bean with page scope. --%> <%-- The Counter class must be imported. Its in the WEB-INF/classes directory --%> <%@ page import="Counter" %> <jsp:useBean id = "ctr" scope = "page" class = "Counter" /> <html> <head> <title>Page Bean Example</title> </head> <body> <h3>Page Bean Example </h3> <center> <b>The current count for the counter bean is: </b> <jsp:getProperty name = "ctr" property ="count" /> </center> </body> </html>

  33. The count never changes.

  34. One Page May Call Another <%-- Caller page Caller.jsp --%> <html> <head> <title>Caller page </title> </head> <body> <h1> Caller page </h1> <jsp:forward page = "Callee.jsp" /> </body> </html> Any response data is cleared and control passes to the new page.

  35. Callee.jsp <%-- Callee page --%> <html> <head> <title>Callee page </title> </head> <body> <h1> Callee page </h1> </body> </html>

  36. After Visiting Caller.jsp

  37. Request Scope • One page may call another and the bean is still available. • Its considered one request. • The second page will use an existing bean before creating a • new one. • When the current request is complete the bean is reclaimed • by the JVM.

  38. Request Scope Caller.jsp <%-- Caller page --%> <%@ page import="Counter" %> <jsp:useBean id = "ctr" scope = "request" class = "Counter" /> <html> <head> <title>Caller page </title> <jsp:setProperty name = "ctr" property = "count" value = "10" /> </head> <body> <h1> Caller page </h1> <jsp:forward page = "Callee.jsp" /> </body> </html>

  39. Request Scope Callee.jsp <%-- Callee page --%> <%@ page import="Counter" %> <jsp:useBean id = "ctr" scope = "request" class = "Counter" /> <html> <head> <title>Callee page </title> </head> <body> <h1> Callee page </h1> <jsp:getProperty name = "ctr" property ="count" /> </body> </html>

  40. After Visiting Caller.jsp

  41. Session Scope Beans with session scope are accessible within pages processing requests that are in the same session as the one in which the bean was created. Session lifetime is typically configurable and is controlled by the servlet container. Currently, my session ends when the browser exits. Multiple copies of the same browser each get their own session bean.

  42. Session Scope Example <%-- SessionBeanPage.jsp --%> <%@ page import="Counter" %> <jsp:useBean id = "ctr" scope = "session" class = "Counter" /> <html> <head> <title>Session Bean Page </title> </head> <body> <h1> Session Bean Page </h1> <B>Visit number <jsp:getProperty name = "ctr" property = "count"/> </B> </body> </html>

  43. Session Scope Example The counter increments on each hit till browser exits. New browser back to 1.

  44. Application Beans A bean with a scope value of application has an even broader and further reaching availability than session beans. Application beans exist throughout the life of the JSP container itself, meaning they are not reclaimed until the server is shut down. Session beans are available on subsequent requests from the same browser. Application beans are shared by all users.

  45. Application Bean Example 1 <%-- ApplicationBeanPage1.jsp --%> <%@ page import="Counter" %> <jsp:useBean id = "ctr" scope = "application" class = "Counter" /> <html> <head> <title>Application Bean Page </title> </head> <body> <h1> Application Bean Page </h1> <B>Visit number <jsp:getProperty name = "ctr“ property = "count"/> </B> </body> </html>

  46. Application Bean Example 2 <%-- ApplicationBeanPage2.jsp --%> <%@ page import="Counter" %> <jsp:useBean id = "ctr" scope = "application" class = "Counter" /> <html> <head> <title>Application Bean Page Two </title> </head> <body> <h1> Application Bean Page Two </h1> <B>Visit number <jsp:getProperty name = "ctr“ property = "count"/> </B> </body> </html>

  47. After several visits with IE5 we visit with Netscape.

  48. After visiting from a different machines with a different browsers, we still keep count.

  49. A Simple JSP/JDBC Example stocks.mdb database schema There are three tables. Both customer and stocks have a one-to-many relationship with portfolios. The database stocks.mdb was registered with the ODBC driver as “CoolStocks”

  50. Register w/ODBC Create an ODBC data source. Click on the Start button. Choose Settings, Control Panel Double-click on ODBC Data Sources Choose the System DSN tab Click Add Click on the desired driver (MSAccess) Click on the Finish button Enter a Data Source Name (I called my database CoolStocks and that name appears in the java code below) Click on the Select button Locate the directory and file containing your database. This will be the “stock.mdb” file created by Microsoft Access. Click OK

More Related