oracle database applications
DESCRIPTION
Oracle Database Applications. Database Connectivity. Outline. Motivation Architecture 7 steps Sample program Metadata. Motivation. Most popular form of database system is the relational database system. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/1.jpg)
1
Oracle Database Applications
Database Connectivity
![Page 2: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/2.jpg)
2
Outline• Motivation• Architecture• 7 steps• Sample program• Metadata
![Page 3: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/3.jpg)
3
Motivation• Most popular form of database
system is the relational database system.
• Structured Query Language (SQL) is used among relational databases to construct queries.
• Applications need to query databases
![Page 4: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/4.jpg)
4
Simple Database Application
APPLICATION
DBMS DB
Oracle
![Page 5: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/5.jpg)
5
Multi-DatabasesAPPLICATION
DBMS 1
DBMS 2
DBMS 3
DB
DB
DB
![Page 6: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/6.jpg)
6
Standard Access to DBAPPLICATION
DRIVER
MGR
DBMSDriver 1
DBMSDriver 2
DBMSDriver 3
DBMS 1
DBMS 2
DBMS 3
DB
DB
DB
![Page 7: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/7.jpg)
7
ODBC ArchitectureApplication
Class1 Class2
Driver Manager
DriverType1 DriverType2 DriverType3
DataSource2DataSource1 DataSource3
ODBC
![Page 8: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/8.jpg)
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 (Oracle)
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.
![Page 9: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/9.jpg)
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
![Page 10: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/10.jpg)
10
An Example
Application DriverManager
Oracle Driver DB2 driver SQLServer driver
odbc standard
API
![Page 11: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/11.jpg)
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.
![Page 12: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/12.jpg)
12
Application in Java
Application inJava
DriverManagerodbc standard
API
jdbc API
Oracle Driver DB2 driver SQLServer driver
![Page 13: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/13.jpg)
13
Application in Java
Application inJava
Oracle DriverJdbc API
![Page 14: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/14.jpg)
14
Java Support for SQL• Java supports embedded SQL.
– Embedded SQL in Java (SQLJ is one version of it) provides a standardized way for Java programs to interact with multiple databases, but at a higher level than the existing JDBCAPI.
– Embedded SQL allows connecting to a database by including 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 direct connection to the DBMS via JDBC.
• java.sql package and an extensive exception hierarchy.
![Page 15: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/15.jpg)
15
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
For oracle: http://jdbc.oracle.org/
![Page 16: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/16.jpg)
16
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.
![Page 17: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/17.jpg)
17
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
![Page 18: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/18.jpg)
18
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
![Page 19: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/19.jpg)
19
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
![Page 20: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/20.jpg)
20
Loading the Driver• Registering the driver directly
automatically:Class.forName(“org.oracle.Driver");
• Calling Class.forName, which automatically – creates an instance of the driver– registers the driver with the
DriverManager
![Page 21: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/21.jpg)
21
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:oracle://foo.itu.edu/mydatabasejdbc:oracle://localhost/testdb
![Page 22: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/22.jpg)
22
Another Option• Create an instance of the driver and
register it with the Driver Manager:
Driver driver = (Driver) Class.forName("org.oracle.Driver").newInstance();
DriverManager.registerDriver(driver);
![Page 23: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/23.jpg)
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
![Page 24: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/24.jpg)
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
![Page 25: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/25.jpg)
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
![Page 26: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/26.jpg)
26
Creating a ConnectionConnection connection =
DriverManager.getConnection("jdbc:oracle://localhost/moviedb", "testuser", "mypassword");
![Page 27: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/27.jpg)
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
![Page 28: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/28.jpg)
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
![Page 29: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/29.jpg)
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
![Page 30: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/30.jpg)
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?
![Page 31: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/31.jpg)
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
![Page 32: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/32.jpg)
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
![Page 33: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/33.jpg)
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
![Page 34: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/34.jpg)
34
• Type getType(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 getType(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
![Page 35: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/35.jpg)
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)
![Page 36: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/36.jpg)
36
Mapping Java Types to SQL TypesSQL 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 37: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/37.jpg)
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
![Page 38: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/38.jpg)
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()
![Page 39: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/39.jpg)
39
Prepared Statement Example
PreparedStatement updateSales; String updateString = "update COFFEES " +
"set SALES = ? where COF_NAME like ?";updateSales = con.prepareStatement(updateString); int [] salesForWeek = {175, 150, 60, 155, 90}; String [] coffees = {"Colombian", "French_Roast",
"Espresso","Colombian_Decaf","French_Roast_Decaf"};
int len = coffees.length;for(int i = 0; i < len; i++) {
updateSales.setInt(1, salesForWeek[i]); updateSales.setString(2, coffees[i]); updateSales.executeUpdate();
}
![Page 40: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/40.jpg)
40
JDBC Class Diagram
![Page 41: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/41.jpg)
41
Metadata• Connection:
– DatabaseMetaData getMetaData()• ResultSet:
– ResultSetMetaData getMetaData()
![Page 42: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/42.jpg)
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...
![Page 43: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/43.jpg)
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…
![Page 44: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/44.jpg)
44
Useful Methods of Metadata• getColumnCount• getColumnDisplaySize• getColumnName• getColumnType• isNullabale
Imagine the case where you want to print the result
![Page 45: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/45.jpg)
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
![Page 46: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/46.jpg)
46
AutoCommitConnection.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 47: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/47.jpg)
47
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
![Page 48: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/48.jpg)
48
More info• Go through the tutorial at:
http://developer.java.sun.com/developer/onlineTraining/Database/JDBC20Intro/
• http://java.sun.com/products/jdbc/learning.html
![Page 49: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/49.jpg)
49
Optimizing JDBC
![Page 50: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/50.jpg)
50
Goal–Illustrate techniques for optimizing JDBC API-based calls from the Java platform –Design better JDBC implementations–Recognize potential performance bottlenecks
![Page 51: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/51.jpg)
51
Outline1) Why optimize?2) Basic API techniques.3) Design Strategies.4) Advanced Driver Tuning methods.
![Page 52: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/52.jpg)
52
Why Optimize?• On average, a web request
performs 4 database queries.• Experience has shown that
database calls are typical performance bottleneck.
• Bad JDBC can overwhelm the database.
![Page 53: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/53.jpg)
53
JDBC API
• SQL: “SELECT * FROM TABLE”• java.sql.PreparedStatement• java.sql.CallableStatement• Cache data on client.
Most Versatile
Most Optimized
![Page 54: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/54.jpg)
54
JDBC APISQL Statements
• Most flexible• Least reliable• Must be recompiled in database for
each use
![Page 55: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/55.jpg)
55
JDBC APIPreparedStatement
•Represents a precompiled SQL statement
•Can be used to efficiently execute statement multiple times
•Somewhat flexible – can create new ones as needed
![Page 56: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/56.jpg)
56
JDBC APIPreparedStatement pstmt =
con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00);pstmt.setInt(2, 110592);pstmt.execute();
![Page 57: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/57.jpg)
57
JDBC APIjava.sql.CallableStatement
•Used to execute SQL stored procedures.
•Same syntax as PreparedStatement.•Least flexible.•Most optimized DB call.
![Page 58: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/58.jpg)
58
JDBC APICache
• Keep data within client to reduce the number of round-trips to the database.
• Lesson: The less JDBC the better.
![Page 59: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/59.jpg)
59
Basic Design TechniquesUse Database Connection Pool
• Don’t use DriverManager.getConnection() often. JDBC connections can take 0.5 to 2 seconds to create.
• Create Pool of Connections and reuse them.
• Necessity for any production system.
![Page 60: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/60.jpg)
60
Basic Design TechniquesUse multi-threading with Connection Pooling to address network latency:
•Threads can issue queries over separate database connections.
•This improves performance to a point.
![Page 61: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/61.jpg)
61
Basic Design TechniquesSingle-batch Transactions
Collect set of operations and submit transaction in one statement:
BEGIN TRANSACTIONUPDATE TABLE1... INSERT INTO TABLE2…DELETE TABLE3
COMMIT
![Page 62: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/62.jpg)
62
Basic Design TechniquesSingle-batch Transactions
• DB obtains necessary locks on rows and tables, uses and releases them in one step
• Depending on transaction type, separate statements and commits can result in more DB calls and hold DB locks longer
![Page 63: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/63.jpg)
63
Basic Design TechniquesDon’t have transaction span user input
• Application sends BEGIN TRAN and SQL, locking rows or tables for update
• Application waits for user to press key before committing transaction
![Page 64: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/64.jpg)
64
Basic Design TechniquesSmart Queries
• Make queries as specific as possible• Put more logic into SQL statements• DB are designed to use SQL efficiently• Proper use of SQL can avoid
performance problems
![Page 65: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/65.jpg)
65
Basic Design TechniquesSmart Query Ex: get employees in ENG deptInstead of: SELECT * FROM employees;SELECT * FROM dept;(and joining on Java application side)
Use database join:SELECT employees.* FROM employees E, dept D WHERE E.DEPTNO = D.DEPTNO AND D.DEPTTYPE = ‘ENG’;
![Page 66: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/66.jpg)
66
Basic Design TechniquesSmart Queries
• Minimize ResultSet before crossing network
• Many performance problems come from moving raw data around needlessly
![Page 67: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/67.jpg)
67
Basic Design TechniquesSmart Query Guidelines
• Use DB for filtering• Use Java for business logic• DB does filtering very well• DB business logic is poor
– At least very inconsistent between database vendors.
![Page 68: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/68.jpg)
68
Basic Design TechniquesKeep operational data set small as possible • Move non-current data to other
tables and do joins for rarer historical queries
• Otherwise, index and cluster so frequently used data is logically and physically localized
![Page 69: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/69.jpg)
69
Advanced Driver Tuning•Special options for each JDBC driver•No common standard•Improve performance by reducing round trips to the database.
•Example: Oracle driver performance extensions
![Page 70: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/70.jpg)
70
Advanced Driver TuningOracle Performance Extensions
1) Row Prefetch2) Batch Updates
![Page 71: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/71.jpg)
71
Advanced Driver Tuning1. Row Prefetch
•Use client-side buffers•Replace round trips by local manipulation of rows returned by query
•Use OracleStatement.setRowPrefetch()
![Page 72: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/72.jpg)
72
Advanced Driver Tuning2. Batch Updates
•Reverse Prefetch•Does for data going to DB what prefetch does for data coming from it
•OraclePreparedStatement.setExecuteBatch
![Page 73: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/73.jpg)
73
Advanced Driver Tuning2. Batch Updates
• Standard JDBC makes a trip to DB for each PreparedStatement.executeUpdate
• Batching: When number of queued requests reaches batch size, sends them to DB
![Page 74: Oracle Database Applications](https://reader036.vdocuments.site/reader036/viewer/2022081503/56816388550346895dd4788a/html5/thumbnails/74.jpg)
74
SummaryOptimization Stages
1) Leverage the strengths of the DB2) Use the full range of java.sql API3) Design for Performance – Connection
Pools, Multi-Threading, etc.4) Implement driver performance
extensions