Jdbc
-
Upload
mumbai-academics -
Category
Technology
-
view
363 -
download
3
description
Transcript of Jdbc
![Page 1: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/1.jpg)
By Mumbai Academics
![Page 2: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/2.jpg)
JDBC JDBC is an alternative to ODBC and ADO that
provides database access to programs written in Java.
JDBC drivers are available for most DBMS products:http://java.sun.com/products/jdbc
![Page 3: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/3.jpg)
JDBC Java API for connecting programs written in Java
to the data in relational databases The standard defined by Sun Microsystems,
allowing individual providers to implement and extend the standard with their own JDBC drivers.
Tasks of JDBC:1) establishes a connection with a database2) sends SQL statements3) processes the results
![Page 4: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/4.jpg)
JDBC The JDBC API supports both two-tier and three-
tier models for database access. Two-tier model - a Java applet or application
interacts directly with the database. Three-tier model - introduces a middle-level
server for execution of business logic:The middle tier to maintain control over data access.The user can employ an easy-to-use higher-level API which is translated by the middle tier into the appropriate low-level calls.
![Page 5: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/5.jpg)
![Page 6: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/6.jpg)
JDBC provides API or Protocol to interactwith different databases.
With the help of JDBC driver we canconnect with different types of databases.
Driver is must needed for connectionestablishment with any database.
A driver works as an interface between theclient and a database server.
![Page 7: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/7.jpg)
JDBC have so many classes and interfaces that allow a Java application to send request made by user to any specific DBMS(Data Base Management System).
JDBC supports a wide level of portability.
JDBC provides interfaces that are compatible with java application
![Page 8: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/8.jpg)
![Page 9: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/9.jpg)
Establish a connection Begin transaction Create a statement object Associate SQL with the statement object Provide values for statement parameters Execute the statement object Process the results End transaction Release resources
![Page 10: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/10.jpg)
Load the driver:•The driver class libraries need to be in
the CLASSPATH for the Java compiler and for the Java virtual machine.
•The most reliable way to load the driver into the program is:
Class.forName(string).newInstance();
![Page 11: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/11.jpg)
Establish a connection to the database:•A connection URL string includes the literal jdbc:, followed by the name of the driver and a URL to the database
String url = "jdbc:oracle:thin:@localhost:1521:csodb";
jdbc “subprotocol”“subname” host port database•Create a Connection object:Connection con = DriverManager.getConnection(url, dbUser,dbPassword);
![Page 12: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/12.jpg)
Begin the transactioncon.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE );
con.setAutoCommit( false );
Create a statement objectStatement stmt = conn.createStatement();
Associate SQL with the statement objectString queryString = "create table students " + "(name varchar(30), id int, phone char(9))";
![Page 13: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/13.jpg)
Process the statement: Example statements:ResultSet rs = stmt.executeQuery(querystring);
Int result = stmt.executeUpdate(updatestring);
ResultSetMetaData rsMeta = rs.getMetaData();
• Compiled queries can be processed via a PreparedStatement object
• Stored procedures can be processed via a CallableStatement object
![Page 14: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/14.jpg)
End transactioncon.commit();con.rollback();
Release resources con.close();
![Page 15: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/15.jpg)
DriverManager Connection Statement ResultSet
Driver
Database
Creates Creates Creates
SQL
Result(tuples)
EstablishLink to DB
![Page 16: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/16.jpg)
Java Application talks directly to the database
Accomplished through the JDBC driver which sends commands directly to the database
Results sent back directly to the application
Application Space
Java Application
JDBC Driver
Database
SQLCommand
ResultSet
![Page 17: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/17.jpg)
JDBC driver sends commands to a middle tier, which in turn sends commands to database.
Results are sent back to the middle tier, which communicates them back to the application
Application Space
Java Application
JDBC Driver
Database
SQLCommand
ResultSet
Application Server(middle-tier)
ProprietaryProtocol
![Page 18: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/18.jpg)
The JDBC type 1 driver which is also known as a JDBC-ODBC Bridge is a convert JDBC methods into ODBC function calls.
Sun provides a JDBC-ODBC Bridge driver by "sun.jdbc.odbc.JdbcOdbcDriver".
![Page 19: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/19.jpg)
The driver is a platform dependent because it uses ODBC which is depends on native libraries of the operating system and also the driver needs otherinstallation for example, ODBC must be installed on the computer and the database must support ODBC Driver
![Page 20: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/20.jpg)
Type 1 is the simplest compare to all other driver but it's a platform specific i.e. only on Microsoft platform.
The JDBC-ODBC Bridge is use only when there is no PURE-JAVA driver available for a particular database.
![Page 21: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/21.jpg)
![Page 22: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/22.jpg)
Process:Java Application -> JDBC APIs JDBCDriver Manager —» Type 1 Driver —» ODBC Driver —> Database library APIs —> Database
Advantage:(1) Connect to almost any database on any system, for which ODBC driver is installed.(2) It's an easy for installation as well aseasy(simplest) to use as compare the all other driver.
![Page 23: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/23.jpg)
Disadvantage:(1) The ODBC Driver needs to be installed on the client machine.
(2) It's a not a purely platform independentbecause its use ODBC which is depends on native libraries of the operating system on client machine.
(3) Not suitable for applets because the ODBC driver needs to be installed on the client machine.
![Page 24: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/24.jpg)
JDBC:ODBC ( mainly for Desktop Applications)Use bridging technologyRequires installation/configuration on client machinesNot good for Web
![Page 25: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/25.jpg)
The JDBC type 2 driver is uses the libraries of the database which is available at client side and this driver converts the JDBC method calls into native calls of the database so this driver is also known as aNative-API driver.
![Page 26: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/26.jpg)
![Page 27: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/27.jpg)
Process:Java Application -> JDBC APIs JDBCDriver Manager —» Type 2 Driver —» VendorClient Database library APIs —> Database
Advantage:(1) There is no implantation of JDBC-ODBC Bridge so it's faster than a type 1 driver; hence the performance is better as compare the type 1 driver (JDBC-ODBC Bridge).
![Page 28: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/28.jpg)
Disadvantage(1) On the client machine require the extrainstallation because this driver uses the vendor client libraries.(2) The Client side software needed so cannot use such type of driver in the web-based application.(3) Not all databases have the client sidelibrary.(4) This driver supports all JAVA applications
eXCept applets.
![Page 29: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/29.jpg)
Native API Drivers (Vendor Specific drivers)Requires installation/configuration on client machinesUsed to leverage existing CLI librariesUsually not thread-safeMostly obsolete now
![Page 30: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/30.jpg)
The JDBC type 3 driver uses the middletier(application server) between the calling program and the database and this middle tier converts JDBC method calls into the vendor specific database protocol and the same driver can be used for multipledatabases also so it's also known as a Network-Protocol driver as well as a JAVA driver for database middleware.
![Page 31: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/31.jpg)
![Page 32: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/32.jpg)
ProcessJava Application —> JDBC APIs -> JDBCDriver Manager —> Type 3 Driver —> Middleware(Server)—> any Database
Advantage:(1) There is no need for the vendor database library on the client machine because the middleware is database independent and it communicates withclient.
![Page 33: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/33.jpg)
(2) Type 3 driver can be used in any webapplication as well as on internet also because there is no anv software require at client side.
(3) A single driver can handle any database at client side so there is no need a Separate driver for each database.(4) The middleware server can also provide the typical services such as connections, auditing, load balancing, logging etc.
![Page 34: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/34.jpg)
Disadvantage:
(1) An Extra layer added, may be timeconsuming.
(2) At the middleware develop the databasespecific coding, may be increase complexity.
![Page 35: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/35.jpg)
Network APICalls middleware server, usually on database hostVery flexible & allows access to multiple databases using one driverOnly need to download one driverBut it's another server application to install and maintain.
![Page 36: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/36.jpg)
The JDBC type 4 driver converts JDBC method calls directly into the vendor specific database protocol and in between do not need to be converted any other formatted system so this is the fastest way to communicate quires to DBMS and it is completely written in JAVA because of that this is also known as the "direct to database Pure JAVA driver".
![Page 37: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/37.jpg)
![Page 38: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/38.jpg)
Disadvantage:(1) There is a separate driver needed for each database at the client side.(2) Drivers are Database dependent, as different database vendors use different network protocols.
![Page 39: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/39.jpg)
Network Protocol Driver (used for Network based Applications)Pure Java DriversUse Java networking libraries to talk directly to database engines need to download a new driver for each database engine.
![Page 40: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/40.jpg)
Alex Chaffee
JDBC
Type I“Bridge”
Type II“Native”
Type III“Middleware”
Type IV“Pure”
ODBCODBCDriver
CLI (.lib)
MiddlewareServer
![Page 41: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/41.jpg)
Copyright © 1997 Alex Chaffee
DriverManager
Driver
Connection
Statement
ResultSet
![Page 42: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/42.jpg)
Copyright © 1997 Alex Chaffee
jdbc:subprotocol:source each driver has its own subprotocol each subprotocol has its own syntax
for the sourcejdbc:odbc:DataSource
• e.g. jdbc:odbc:Northwindjdbc:msql://host[:port]/database
• e.g. jdbc:msql://foo.nowhere.com:4333/accounting
![Page 43: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/43.jpg)
Copyright © 1997 Alex Chaffee
Loads database drivers, and manages the connection between the application and 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
![Page 44: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/44.jpg)
Copyright © 1997 Alex Chaffee
Translates API calls into operations for a specific data source
![Page 45: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/45.jpg)
A Connection represents a session with a specific database or a session between an application and a database
Within the context of a Connection, SQL statements are executed and results are returned.
Can have multiple connections to a database Also provides “metadata” -- information about
the database, tables, and fields Also methods to deal with transactions
![Page 46: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/46.jpg)
Copyright © 1997 Alex Chaffee
String url = "jdbc:odbc:Northwind";try {Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection(url);
}catch (ClassNotFoundException e) { e.printStackTrace(); }
catch (SQLException e){ e.printStackTrace(); }
![Page 47: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/47.jpg)
Copyright © 1997 Alex Chaffee
Statement createStatement()• returns a new Statement object
PreparedStatement prepareStatement(String sql)• returns a new PreparedStatement object
CallableStatement prepareCall(String sql)• returns a new CallableStatement object
Why all these different kinds of statements? Optimization.
![Page 48: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/48.jpg)
Copyright © 1997 Alex Chaffee
A Statement object is used for executing a static SQL statement and obtaining the results produced by it.
An SQL Statement to perform a query or update operation.
![Page 49: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/49.jpg)
Copyright © 1997 Alex Chaffee
ResultSet executeQuery(String) • Execute a SQL statement that returns a single
ResultSet. int executeUpdate(String)
• Execute a SQL INSERT, UPDATE or DELETE statement. Returns the number of rows changed.
boolean execute(String) • Execute a SQL statement that may return
multiple results. Why all these different kinds of queries?
Optimization.
![Page 50: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/50.jpg)
A ResultSet provides access to a table of data generated by executing a Statement.
Logical set of columns and rows returned by executing an SQL 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
![Page 51: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/51.jpg)
Copyright © 1997 Alex Chaffee
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• allows you to re-use the Statement that
created it• automatically called by most Statement
methods
![Page 52: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/52.jpg)
Copyright © 1997 Alex Chaffee
Type getType(int columnIndex)• returns the given field as the given type• fields indexed starting at 1 (not 0)
Type getType(String columnName)• same, but uses name of field• less efficient
int findColumn(String columnName)• looks up column index given column name
![Page 53: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/53.jpg)
Copyright © 1997 Alex Chaffee
String getString(int columnIndex) boolean getBoolean(int columnIndex) byte getByte(int columnIndex) short getShort(int columnIndex) int getInt(int columnIndex) long getLong(int columnIndex) float getFloat(int columnIndex) double getDouble(int columnIndex) Date getDate(int columnIndex) Time getTime(int columnIndex) Timestamp getTimestamp(int columnIndex)
![Page 54: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/54.jpg)
Copyright © 1997 Alex Chaffee
String getString(String columnName) boolean getBoolean(String columnName) byte getByte(String columnName) short getShort(String columnName) int getInt(String columnName) long getLong(String columnName) float getFloat(String columnName) double getDouble(String columnName) Date getDate(String columnName) Time getTime(String columnName) Timestamp getTimestamp(String columnName)
![Page 55: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/55.jpg)
Copyright © 1997 Alex Chaffee
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)
![Page 56: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/56.jpg)
Copyright © 1997 Alex Chaffee
Employee ID Last Name First Name1 Davolio Nancy2 Fuller Andrew3 Leverling Janet4 Peacock Margaret5 Buchanan Steven
![Page 57: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/57.jpg)
Copyright © 1997 Alex Chaffee
Connection con = DriverManager.getConnection(url, "alex", "8675309");
Statement st = con.createStatement();ResultSet results = st.executeQuery("SELECT EmployeeID, LastName, FirstName FROM Employees");
![Page 58: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/58.jpg)
Copyright © 1997 Alex Chaffee
while (results.next()) {int id = results.getInt(1);String last = results.getString(2);String first = results.getString(3);System.out.println("" + id + ": " + first + " " + last);
}st.close();con.close();
![Page 59: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/59.jpg)
Copyright © 1997 Alex Chaffee
SQL type Java TypeCHAR, VARCHAR, LONGVARCHAR StringNUMERIC, DECIMAL java.math.BigDecimalBIT booleanTINYINT byteSMALLINT shortINTEGER intBIGINT longREAL floatFLOAT, DOUBLE doubleBINARY, VARBINARY, LONGVARBINARY byte[]DATE java.sql.DateTIME java.sql.TimeTIMESTAMP java.sql.Timestamp
![Page 60: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/60.jpg)
Copyright © 1997 Alex Chaffee
Times in SQL are notoriously unstandard 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
![Page 61: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/61.jpg)
Copyright © 1997 Alex Chaffee
use executeUpdate if the SQL contains “INSERT” or “UPDATE”
Why isn’t it smart enough to parse the SQL? Optimization.
executeUpdate returns the number of rows modified
executeUpdate also used for “CREATE TABLE” etc. (DDL)
![Page 62: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/62.jpg)
Copyright © 1997 Alex Chaffee
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
![Page 63: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/63.jpg)
Copyright © 1997 Alex Chaffee
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()
![Page 64: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/64.jpg)
Copyright © 1997 Alex Chaffee
Hint: 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
![Page 65: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/65.jpg)
Copyright © 1997 Alex Chaffee
Prepared Statements• SQL calls 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• accesed with Connection.prepareCall()
![Page 66: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/66.jpg)
![Page 67: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/67.jpg)
Examples
![Page 68: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/68.jpg)
![Page 69: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/69.jpg)
![Page 70: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/70.jpg)
![Page 71: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/71.jpg)
![Page 72: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/72.jpg)
Copyright © 1997 Alex Chaffee
Connection:• DatabaseMetaData getMetaData()
ResultSet:• ResultSetMetaData getMetaData()
![Page 73: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/73.jpg)
Copyright © 1997 Alex Chaffee
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?
![Page 74: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/74.jpg)
Copyright © 1997 Alex Chaffee
Does a column's case matter? Is the column a cash value? Will a write on the column definitely succeed? Can you put a NULL in this column? Is a column definitely not writable? Can the column be used in a where clause? Is the column a signed number? Is it possible for a write on the column to
succeed? and so on...
![Page 75: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/75.jpg)
Copyright © 1997 Alex Chaffee
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, are they restricted to be different from the names of the tables?
and so on…
![Page 76: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/76.jpg)
Scrollable result set Batch updates Advanced data types
• Blobs, objects, structured types Rowsets
• Persistent JavaBeans JNDI Connection Pooling Distributed transactions via JTS
![Page 77: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/77.jpg)
In JDBC1.0, result sets could be navigated in only one direction (forward) and starting at only one point (first row)
Since JDBC 2.0, the cursor can be manipulated as if it were a array index
Methods exist for reading both forward and backward, for starting from any row, and for testing the current cursor location.
![Page 78: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/78.jpg)
boolean next ( ) Advances the cursor to the next row.
boolean previous ( ) Moves the cursor back one row.boolean first ( ) Moves the cursor to the first row.boolean last ( ) Moves the cursor to the last row. void beforeFirst ( ) Moves the cursor before the first row, usually in anticipation of calling next ( )void afterLast ( ) Moves the cursor after the last row, usually in anticipation of calling previous ( )boolean Moves the cursor to the specifiedabsolute (int row) row. Specifying a negative number moves the cursor relative to the end of the result set;
![Page 79: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/79.jpg)
boolean Moves the cursor forward orrelative (int row) backward the number of rows specified.
boolean True if the cursor is before the isBeforeFirst ( ) first row.
boolean True if the cursor is after theisAfterLast ( ) last row.
boolean isFirst ( ) True if the cursor is positioned on the first row.
boolean isLast ( ) True if the cursor is positioned on the last row.
![Page 80: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/80.jpg)
Statement object created with parameters to indicate specific capabilities
Connection.createStatement() method can have up to three parameters:• resultSetType – type of scrolling to be used• resultSetConcurrency – indicates whether the result set
can be updated• resultSetHoldability – specifies whether to close cursors
when a commit is done Example
• stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
![Page 81: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/81.jpg)
Cursor Related Constants• TYPE_FORWARD_ONLY
JDBC 1.0-style navigation in which the cursor starts at the first row and can only move forward.
• TYPE_SCROLL_INSENSITIVE All cursor positioning methods are enabled;
the result set doesn’t reflect changes made by others in the underlying table.
• TYPE_SCROLL_SENSITIVE All cursor positioning methods are enabled
the result set reflects changes made by others in the underlying table.
![Page 82: Jdbc](https://reader036.fdocuments.us/reader036/viewer/2022070316/5561053ed8b42a0e408b59dc/html5/thumbnails/82.jpg)
Updating Record Sets• CONCUR_READ_ONLY
The results set won’t be updatable• CONCUR_UPDATABLE
Rows can be added and deleted, and columns can be updated.
Closing Cursors• HOLD_CURSORS_OVER_COMMIT
Do not close cursors after a commit is done.
• CLOSE_COURSORS_AT_COMMIT Close cursors when a commit is done.