• Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
564
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
11
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • 4

Transcript

  • 1. CS122B: Projects in Database Management Winter 2010 Notes 2: Database Connectivity Professor Chen Li Department of Computer Science UC Irvine
  • 2. Outline
    • Motivation
    • Architecture
    • 7 steps
    • Sample program
    • Metadata
    CS122B Notes 02: Database Connectivity
  • 3. Motivation
    • Most popular form of database system is the relational database system.
      • Examples: MS Access, Sybase, Oracle, MS Sequel Server, Postgres.
    • Structured Query Language (SQL) is used among relational databases to construct queries.
    • Applications need to query databases
    CS122B Notes 02: Database Connectivity
  • 4. Simple Database Application CS122B Notes 02: Database Connectivity Ex: Access Oracle Sybase A P P L I C A T I O N DBMS DB
  • 5. Multi-Databases CS122B Notes 02: Database Connectivity A P P L I C A T I O N DBMS 1 DBMS 2 DBMS 3 DB DB DB
  • 6. Standard Access to DB CS122B Notes 02: Database Connectivity A P P L I C A T I O N D R I V E R M G R DBMS Driver 1 DBMS Driver 2 DBMS Driver 3 DBMS 1 DBMS 2 DBMS 3 DB DB DB
  • 7. ODBC Architecture CS122B Notes 02: Database Connectivity Application Class1 Class2 Driver Manager DataSource2 DataSource1 DataSource3 ODBC DriverType1 DriverType2 DriverType3
  • 8. Open Database Connectivity (ODBC) Standard
    • ODBC standard is an interface by which application programs can access and process SQL databases in a DBMS-independent manner. It contains:
      • A Data Source that is the database, its associated DBMS, operating system and network platform
      • A DBMS Driver that is supplied by the DBMS vendor (e.g., Oracle, IBM, MS) or independent software companies
      • A Driver Manager that is supplied by the vendor of the O/S platform (e.g., Windows/UNIX/Mac) where the application is running
      • E.g Control Panel->Administrative Tools->Data Sources (ODBC)
      • in Windows. You can use ODBC to access MS Access or even Excel documents using the corresponding drivers.
    CS122B Notes 02: Database Connectivity
  • 9. ODBC Interface
    • System-independent interface to database environment
      • requires an ODBC driver to be provided for each database system from which you want to manipulate data.
    • The ODBC driver manager bridges the differences between
      • The ODBC DBMS-independent interface and the DBMS-dependent interface of the DBMS driver
    CS122B Notes 02: Database Connectivity
  • 10. An Example CS122B Notes 02: Database Connectivity Application DriverManager MySQL Driver DB2 driver SQLServer driver odbc standard API
  • 11. Java Support for Database Connectivity
    • When applications written in Java want to access data sources, they use classes and associated methods provided by Java DBC (JDBC) API.
    • JDBC is specified an “interface.”
    • An interface in Java can have many “implementations.”
      • it provides a convenient way to realize many “drivers”
    • JDBC can be an interface to an ODBC driver manager.
    • Also it provides a JDBC API as a standard way to directly connect to common relational databases.
    CS122B Notes 02: Database Connectivity
  • 12. Application in Java CS122B Notes 02: Database Connectivity Application in Java DriverManager odbc standard API jdbc API MySQL Driver DB2 driver SQLServer driver
  • 13. Application in Java CS122B Notes 02: Database Connectivity Application in Java MySQL Driver Jdbc API
  • 14. Java Support for SQL
    • Java supports embedded SQL .
      • Embedded SQL in Java (SQLJ is one version of it) p rovide s a standardized way for Java programs to interact with multi ple databases, but at a higher level than the existing JDBC API.
      • Embedded SQL allows connect ing to a database by includ ing SQL code right in the program .
      • An Embedded SQL preprocessor converts the SQL statements to Java code at pre-compile time.   The preprocessor generates code that includes the driver functionality for d irect connection to the  DBMS via JDBC.
    • java.sql package and an extensive exception hierarchy.
    • We will examine a direct pure Java JDBC driver using sample code.
    CS122B Notes 02: Database Connectivity
  • 15. An JDBC example
    • JdbcExample.java
    CS122B Notes 02: Database Connectivity
  • 16. Data Source and Driver
    • Data source: database created using any of the common database applications.
    • Your system should have the driver for the database you will be using.
      • E.g., MS SQL Server on a Windows system.
    • There are a number of JDBC drivers available.
      • http://industry.java.sun.com/products/jdbc/drivers
    CS122B Notes 02: Database Connectivity
  • 17. JDBC Components
    • Driver Manager : Loads database drivers, and manages the connection between application & driver.
    • Driver : Translates API calls to operations for a specific data source.
    • Connection : A session between an application and a driver.
    • Statement : A SQL statement to perform a query or an update operation.
    • Metadata : Information about the returned data, driver and the database.
    • Result Set : Logical set of columns and rows returned by executing a statement.
    CS122B Notes 02: Database Connectivity
  • 18. JDBC Classes
    • Java supports DB facilities by providing classes and interfaces for its components
    • DriverManager class
    • Connection interface (abstract class)
    • Statement interface (to be instantiated with values from the actual SQL statement)
    • ResultSet interface
    CS122B Notes 02: Database Connectivity
  • 19. java.sql
    • JDBC is implemented via classes in the java.sql package
      • Supports SQL-2 entry level
    • Define objects for:
      • Remote connection to DB
      • Executing query
    • 8 interfaces to define objects:
      • Statement, CallableStatement, PreparedStatement, DatabaseMetaData, ResultSetMetaData, ResultSet, Connection, Driver
    Notes 02: Database Connectivity
  • 20. CS122B Notes 02: Database Connectivity DriverManager Driver Connection Statement ResultSet
    • Load the driver
    • Define the Connection URL
    • Establish the Connection
    • Create a Statement object
    • Execute a query
    • Process the result
    • Close the connection
    Seven Steps
  • 21. Loading the Driver
    • Registering the driver directly automatically:
    • Class.forName(“ com.mysql.jdbc.Driver ");
    • Calling Class.forName , which automatically
      • creates an instance of the driver
      • registers the driver with the DriverManager
    CS122B Notes 02: Database Connectivity
  • 22. Identifying Data Sources
    • Gives the required information for making the connection to the database
    • Specified using the URL format.
    • <scheme>: <sub_scheme>:<scheme-specific-part>
    • Example:
    • jdbc:postgresql://foo.ics.uci.edu/mydatabase
    • jdbc:postgresql://localhost/testdb
    • jdbc:mysql:///mydb
    CS122B Notes 02: Database Connectivity
  • 23. Connection
    • A Connection represents a session with a specific database
    • Within the context of a Connection, SQL statements are executed and results are returned
    CS122B Notes 02: Database Connectivity
  • 24. Connections
    • There can be multiple connections to a database
    • A connection provides “metadata”, i.e., information about the database, tables, and fields
    • Connection object has methods to deal with transactions
    CS122B Notes 02: Database Connectivity
  • 25. Creating a Connection
    • Use getConnection on the Driver
    • Connection getConnection
    • (String url,
    • String user,
    • String password)
    • Connects to given JDBC URL with given user name and password
    • Throws java.sql.SQLException
    • returns a Connection object
    CS122B Notes 02: Database Connectivity
  • 26. Creating a Connection
    • Connection connection = DriverManager.getConnection(&quot;jdbc:mysql:///mydb&quot;, &quot;testuser&quot;, &quot;mypassword&quot;);
    CS122B Notes 02: Database Connectivity
  • 27. Statements
    • Statement createStatement()
      • returns a new Statement object
      • Used for general queries
    • PreparedStatement prepareStatement(String sql)
      • returns a new PreparedStatement object
      • For a statement called multiple times with different values (precompiled to reduce parsing time)
    • CallableStatement prepareCall(String sql)
      • returns a new CallableStatement object
      • For stored procedures
    CS122B Notes 02: Database Connectivity
  • 28. Statements
    • A Statement object is used for executing a static SQL statement and obtaining the results produced by it
    • executeQuery is used for statements that return an output result
    • executeUpdate is used for statements that need not return an output
    CS122B Notes 02: Database Connectivity
  • 29. Executing Queries and Updates
    • ResultSet executeQuery(String)
      • Execute a SQL statement that returns a single ResultSet
    • int executeUpdate(String)
      • Execute a SQL INSERT, UPDATE or DELETE statement
      • Used for CREATE TABLE, DROP TABLE and ALTER TABLE
      • Returns the number of rows changed
    CS122B Notes 02: Database Connectivity
  • 30. Timeout
    • Use setQueryTimeOut to set a timeout for the driver to wait for a statement to be completed
    • If the operation is not completed in the given time, an SQLException is thrown
    • What is it good for?
    CS122B Notes 02: Database Connectivity
  • 31. Cursor
    • What is the result of a query?
    • How can a database send the result of a query through communication lines?
    • The answer: using a cursor
    CS122B Notes 02: Database Connectivity
  • 32. Result Set
    • A ResultSet provides access to a table of data generated by executing a Statement
    • Only one ResultSet per Statement can be open at once
    • The table rows are retrieved in sequence
    • A ResultSet maintains a cursor pointing to its current row of data
    • The 'next' method moves the cursor to the next row
      • you can’t rewind
    CS122B Notes 02: Database Connectivity
  • 33. Working with ResultSet
    • boolean next()
      • activates the next row
      • the first call to next() activates the first row
      • returns false if there are no more rows
    • void close()
      • disposes of the ResultSet
      • automatically called by most Statement methods
    CS122B Notes 02: Database Connectivity
  • 34.
    • Type get Type (int columnIndex)
      • returns the given field as the given type
      • E.g., int getInt(5); string getString(3);
      • fields indexed starting at 1 (not 0)
    • Type get Type (String columnName)
      • same, but uses name of field
      • less efficient
    • int findColumn(String columnName)
      • looks up column index given column name
    Getting Values from Rows Notes 02: Database Connectivity
  • 35. isNull
    • In SQL, NULL means the field is empty
    • Not the same as 0 or “”
    • In JDBC, you must explicitly ask if a field is null by calling ResultSet.isNull(column)
    Notes 02: Database Connectivity
  • 36. Mapping Java Types to SQL Types
    • SQL type Java Type
    • CHAR, VARCHAR , LONGVARCHAR String
    • NUMERIC , DECIMAL java.math.BigDecimal
    • BIT boolean
    • TINYINT byte
    • SMALLINT short
    • INTEGER int
    • BIGINT long
    • REAL float
    • FLOAT, DOUBLE double
    • BINARY, VARBINARY , LONGVARBINARY byte[]
    • DATE java.sql.Date
    • TIME java.sql.Time
    • TIMESTAMP java.sql.Timestamp
    Notes 02: Database Connectivity
  • 37. Database Time
    • Times in SQL are nonstandard
    • Java defines three classes to help
    • java.sql.Date
      • year, month, day
    • java.sql.Time
      • hours, minutes, seconds
    • java.sql.Timestamp
      • year, month, day, hours, minutes, seconds, nanoseconds
      • usually use this one
    Notes 02: Database Connectivity
  • 38. Optimized Statements
    • Prepared Statements
      • SQL calls that you make again and again
      • allows driver to optimize (compile) queries
      • created with Connection.prepareStatement()
    • Stored Procedures
      • written in DB-specific language
      • stored inside database
      • accessed with Connection.prepareCall()
    CS122B Notes 02: Database Connectivity
  • 39. Prepared Statement Example
    • PreparedStatement updateSales;
    • String updateString = &quot; update COFFEES &quot; +
    • &quot; set SALES = ? where COF_NAME like ? &quot;;
    • updateSales = con.prepareStatement(updateString);
    • int [] salesForWeek = {175, 150, 60, 155, 90};
    • String [] coffees = {&quot;Colombian&quot;, &quot;French_Roast&quot;, &quot;Espresso&quot;,&quot;Colombian_Decaf&quot;,&quot;French_Roast_Decaf&quot;};
    • int len = coffees.length;
    • for(int i = 0; i < len; i++) {
    • updateSales.setInt(1, salesForWeek[i]); updateSales.setString(2, coffees[i]); updateSales.executeUpdate();
    • }
    CS122B Notes 02: Database Connectivity
  • 40. JDBC Class Diagram Notes 02: Database Connectivity
  • 41. Metadata
    • Connection:
      • DatabaseMetaData getMetaData()
    • ResultSet:
      • ResultSetMetaData getMetaData()
    CS122B Notes 02: Database Connectivity
  • 42. ResultSetMetaData
    • What's the number of columns in the ResultSet?
    • What's a column's name?
    • What's a column's SQL type?
    • What's the column's normal max width in chars?
    • What's the suggested column title for use in printouts and displays?
    • What's a column's number of decimal digits?
    • Does a column's case matter?
    • and so on...
    Notes 02: Database Connectivity
  • 43. DatabaseMetaData
    • What tables are available?
    • What's our user name as known to the database?
    • Is the database in read-only mode?
    • If table correlation names are supported (association of a column with the table it comes from, when multiple columns of the same name appear in the same query - multi-table queries) , are they restricted to be different from the names of the tables?
    • and so on…
    Notes 02: Database Connectivity
  • 44. Useful Methods of Metadata
    • getColumnCount
    • getColumnDisplaySize
    • getColumnName
    • getColumnType
    • isNullabale
    • Imagine the case where you want to print the result
    CS122B Notes 02: Database Connectivity
  • 45. Transaction Management
    • A transaction: a sequence of SQL statements
    • Transactions are not explicitly opened and closed
    • Instead, the connection has a state called AutoCommit mode
    • if AutoCommit is true, then every statement is automatically committed
    • default case: true
    CS122B Notes 02: Database Connectivity
  • 46. AutoCommit
    • Connection.setAutoCommit(boolean)
    • if AutoCommit is false, then every statement is added to an ongoing transaction
    • you must explicitly commit or rollback the transaction using Connection.commit() and Connection.rollback()
    CS122B Notes 02: Database Connectivity
  • 47. AutoCommit (cont)
    • Check:
    • http://java.sun.com/docs/books/tutorial/jdbc/basics/transactions.html
    • http://www.devx.com/tips/Tip/15015
    • There's a slight difference between doing them in SQL and JDBC: auto-commit control and commit call in JDBC are Java calls (not SQL).
    CS122B Notes 02: Database Connectivity
  • 48. Connection Manager
    • For a large threaded database server, create a Connection Manager object
    • It is responsible for maintaining a certain number of open connections to the database
    • When your applications need a connection, they ask for one from the CM’s pool
    • Why? Because opening and closing connections takes a long time
    • Warning: the CM should always setAutoCommit(false) when a connection is returned
    CS122B Notes 02: Database Connectivity
  • 49. More info
    • Go through the tutorial at: http://developer.java.sun.com/developer/onlineTraining/Database/JDBC20Intro/
    • http://java.sun.com/products/jdbc/learning.html
    CS122B Notes 02: Database Connectivity