Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
7 views

Lecture 25 Java Database Connectivity (JDBC)

Uploaded by

Abcd Efgh
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Lecture 25 Java Database Connectivity (JDBC)

Uploaded by

Abcd Efgh
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 89

Java Database

Connectivity (JDBC)
UNIT IV
Introduction

• Structured Query Language


• Queries relational databases
• Can write Java programs to use SQL queries
• Host Language, combination of
• Data definition language (DDL) - defines database objects
• Data manipulation language (DML) - specifies processing
• SQL has DDL and DML
• Relational Database Model
• Logical representation of data
• Consider relationships between data
• Not concerned with implementation
Relational Database Model

• Relational database
• Composed of tables
• Rows called records
• Columns are fields (attributes)
• First field usually primary key
• Unique for each record
• Primary key not required
Relational Database Model
Relational Database Structure
Table: Employee
Number Name DepartmentSalary Location
2360 JONES, A. 413 1100 NEW JERSEY
3
2456 KERWIN, R. 413 2000 NEW JERSEY
A record 8
34589 LARSON, P. 642 1800 LOS ANGELES
35761 MYERS, B. 611 1400 ORLANDO
47132 NEUMANN, C. 413 9000 NEW JERSEY
7832 STEPHENS, T. 611 8000 ORLANDO
1

Primary A
Key column
Relational Database Model

• Operations
• Projection
• Taking a subset of a table
• Join
• Combining tables to form a larger one
Relational Database Model

Table: Employee
Number Name Department Salary Location
2360 JONES, A. 413 1100 NEW JERSEY
3
24568 KERWIN, R. 413 2000 NEW JERSEY
34589 LARSON, P. 642 1800 LOS ANGELES
35761 MYERS, B. 611 1400 ORLANDO
47132 NEUMANN, C. 413 9000 NEW JERSEY
7832 STEPHENS, T. 611 8000 ORLANDO
1
Projection (subset)

Department Location
413 NEW JERSEY
611 ORLANDO
642 LOS ANGELES
Relational Database Model

• Advantages of relational databases


• Tables easy to use, understand, and implement
• Easy to convert other database structures into relational scheme
• Universal
• Projection and join operations easy to implement
• Easy to modify - very flexible
• Greater clarity and visibility than other models
• OODBs
Relational Database Overview: The Books.mdb
Database

• Overview tables in Books.mdb database


• Used to introduce database concepts
• Consists of four tables
• Authors
• Publishers
• AuthorISBN
• Titles
Relational Database Overview: The Books.mdb
Database

• Authors table
• Four fields
• AuthorID - ID number
• FirstName
• LastName
• YearBorn
AuthorID FirstName LastName YearBorn
1 Harvey Deitel 1946
2 Paul Deitel 1968
3 Tem Nieto 1969
Relational Database Overview: The Books.mdb
Database

• Publishers table
• Two fields
• PublisherID - ID number
• PublisherName - abbreviated name of publisher
PublisherID PublisherName
1 Prentice Hall
2 Prentice Hall PTR
Relational Database Overview: The Books.mdb
Database

• AuthorISBN table
• Two fields
• ISBN - ISBN number of book
• AuthorID - ID number of author
• Helps link author with title of book
• Table on next slide
Relational Database Overview: The Books.mdb
Database
ISBN AuthorID ISBN AuthorID ISBN AuthorID
0-13-010671-2 1 (continued from bottom of (continued from bottom of
previous row) previous row)
0-13-010671-2 2 0-13-271974-6 1 0-13-904947-9 1
0-13-020522-2 1 0-13-271974-6 2 0-13-904947-9 2
0-13-020522-2 2 0-13-456955-5 1 0-13-904947-9 3
0-13-082925-0 2 0-13-456955-5 2 0-13-013249-7 1
0-13-082927-7 1 0-13-456955-5 3 0-13-013249-7 2
0-13-082927-7 2 0-13-528910-6 1 0-13-085609-6 1
0-13-082928-5 1 0-13-528910-6 2 0-13-085609-6 2
0-13-082928-5 2 0-13-565912-4 1 0-13-085609-6 3
0-13-082928-5 3 0-13-226119-7 2 0-13-016143-8 1
0-13-083054-2 1 0-13-020522-2 3 0-13-016143-8 2
0-13-083054-2 2 0-13-082714-2 1 0-13-016143-8 3
0-13-083055-0 1 0-13-082714-2 2 0-13-015870-4 1
0-13-083055-0 2 0-13-082925-0 1 0-13-015870-4 2
0-13-118043-6 1 0-13-565912-4 2 0-13-015870-4 3
0-13-118043-6 2 0-13-565912-4 3 0-13-012507-5 1
0-13-226119-7 1 0-13-899394-7 1 0-13-012507-5 2
0-13-226119-7 2 0-13-899394-7 2 0-13-085248-1 1
(continued on top of next row) (continued on top of next row) 0-13-085248-1 2
Relational Database Overview: The Books.mdb
Database

• Titles table
• Six fields
• ISBN
• Title - title of book
• EditionNumber
• YearPublished
• Description
• PublisherID
• Table on next slide
• Description field not shown
Relational Database Overview: The Books.mdb
Database Edition Year- Publisher
ISBN Title Number Publish ID
ed
0-13-226119-7 C How to Program 2 1994 1
0-13-528910-6 C++ How to Program 2 1997 1
0-13-899394-7 Java How to Program 2 1997 1
0-13-012507-5 Java How to Program 3 1999 1
0-13-456955-5 Visual Basic 6 How to Program 1 1998 1
0-13-016143-8 Internet and World Wide Web How to Program 1 1999 1
0-13-013249-7 Getting Started with Visual C++ 6 with an Introduction to MFC 1 1999 1
0-13-565912-4 C++ How to Program Instructor's Manual with Solutions Disk 2 1998 1
0-13-904947-9 Java How to Program Instructor's Manual with Solution Disk 2 1997 1
0-13-020522-2 Visual Basic 6 How to Program Instructor's Manual with Solution Disk 1 1999 1
0-13-015870-4 Internet and World Wide Web How to Program Instructor's Manual with Solutions Disk 1 1999 1
0-13-082925-0 The Complete C++ Training Course 2 1998 2
0-13-082927-7 The Complete Java Training Course 2 1997 2
0-13-082928-5 The Complete Visual Basic 6 Training Course 1 1999 2
0-13-085248-1 The Complete Java Training Course 3 1999 2
0-13-085609-6 The Internet and World Wide Web How to Program Complete Training Course 1 1999 2
0-13-082714-2 C++ How to Program 2/e and Getting Started with Visual C++ 5.0 Tutorial 2 1998 1
0-13-010671-2 Java How to Program 2/e and Getting Started with Visual J++ 1.1 Tutorial 2 1998 1
0-13-083054-2 The Complete C++ Training Course 2/e and Getting Started with Visual C++ 5.0 Tutorial 2 1998 1
0-13-083055-0 The Complete Java Training Course 2/e and Getting Started with Visual J++ 1.1 Tutorial 2 1998 1
0-13-118043-6 C How to Program 1 1992 1
0-13-271974-6 Java Multimedia Cyber Classroom 1 1996 2
Relational Database Overview: The Books.mdb
Database

• Relationship between tables

• Primary key in bold


• Rule of Entity Integrity
• Every record has unique entry in primary key field
Relational Database Overview: The Books.mdb
Database
• Lines represent relationship
• Line between Publishers and Titles
• One to many relationship
• Every PublisherID can appear many times in Titles
table
• Foreign key
• Field in table that is primary field of another table
• Maintains Rule of Referential Integrity
• Used to join tables
• One to many relationship between primary key and
corresponding foreign key
• PublisherID is foreign key in Titles table
Relational Database Overview: The Books.mdb
Database

• Other relationships

• One AuthorID can appear many times in AuthorISBN table


• Author wrote many books
• One ISBN can appear many times in AuthorISBN
• Book had multiple authors
Structured Query Language

• Overview of SQL
• SQL keywords discussed in context of complete queries
• Some keywords beyond scope of text
• Used to
• Query a database
• Insert records into a database
• Update existing records in a database
• SQL keywords
• SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
Basic SELECT Query
• SELECT Query
• Selects information from one more tables
• Format
SELECT * FROM TableName
• Asterisk * - select all
• SELECT * FROM Authors
• Selects entire Authors table
• Selecting specific fields
• Replace asterisk (*) with comma separated list
• SELECT AuthorID, LastName FROM Authors
• Ordered left to right
AuthorID LastName
1 Deitel
2 Deitel
3 Nieto
WHERE Clause

• Selection with criteria


• Only select data that meets requirement
• SELECT * FROM TableName WHERE criteria
• Example
SELECT * FROM Authors WHERE YearBorn > 1960
AuthorID FirstName LastName YearBorn

2 Paul Deitel 1968


3 Tem Nieto 1969
WHERE Clause

• Conditions
• Can use <, >, <=, >=, =, <> and LIKE
• LIKE - used for pattern matching
• Search for similar strings
• Wildcard characters * and ?
• * - Any number of consecutive characters at asterisk's
location

SELECT * FROM Authors WHERE LastName LIKE 'd*'


AuthorID FirstName LastName YearBorn
1 Harvey Deitel 1946
2 Paul Deitel 1968

LastName starts with 'd' followed by any number of characters


WHERE Clause

• Conditions
• ? - any single character at location
SELECT * FROM AuthorsFirstName
AuthorID WHERE LastName LIKE '?i*'
LastName YearBorn
3 Tem Nieto 1969

• LastName begins with any character, 'i' for second character, followed by
any number of characters
WHERE Clause

• Conditions
• Range of characters
• [startValue-endValue]

SELECT * FROM Authors WHERE LastName LIKE '?[a-i]*'


AuthorID FirstName LastName YearBorn
1 Harvey Deitel 1946
2 Paul Deitel 1968
3 Tem Nieto 1969

• Start with any letter, second letter between a and i, followed by any number of
characters
• All authors fit range
ORDER BY Clause

• Arrange results in order


SELECT * FROM TableName ORDER BY field ASC
SELECT * FROM TableName ORDER BY field DESC
• field - field used to order
• ASC/DESC - ascending/descending sort
• ASC default

SELECT * FROMAuthorID
AuthorsFirstName
ORDER BY LastName
LastName ASC
YearBorn
2 Paul Deitel 1968
1 Harvey Deitel 1946
3 Tem Nieto 1969
ORDER BY Clause
• Multiple fields
ORDER BY field1 SortingOrder, field2
SortingOrder, ...
• SortingOrder does not have to be same
• If field1 identical for two records, sorts by field2 in
order specified

• SELECT * FROM Authors ORDER BY LastName,


FirstName

AuthorID FirstName LastName YearBorn


1 Harvey Deitel 1946
2 Paul Deitel 1968
3 Tem Nieto 1969
ORDER BY Clause

• Combining clauses
• SELECT * FROM Titles
WHERE Title LIKE '*How to Program'
ORDER BY Title ASC
• Multiple lines for readability Edition Year Publisher
ISBN Title Number Published ID
0-13-118043-6 C How to Program 1 1992 1
0-13-226119-7 C How to Program 2 1994 1
0-13-528910-6 C++ How to Program 2 1997 1
0-13-016143-8 Internet and World Wide Web How 1 1999 1
to Program
0-13-012507-5 Java How to Program 3 1999 1
0-13-899394-7 Java How to Program 2 1997 1
0-13-456955-5 Visual Basic 6 How to Program 1 1998 1
Using INNER JOIN to Merge Data from Multiple
Tables

• Merging data
• Combine multiple tables (join) by merging records
• SELECT * FROM Table1 INNER JOIN Table2 ON Table1.field =
Table2.field
• ON - "on condition that"
• Specifies fields to be compared for records to be merged
• Syntax
• If two tables have same field, use TableName.fieldName
• Can be used in any query to distinguish fields
• SELECT FirstName, LastName, ISBN
FROM Authors INNER JOIN AuthorISBN
ON Authors.AuthorID = AuthorISBN.AuthorID
ORDER BY LastName, FirstName
Using INNER JOIN to Merge Data from Multiple
Tables
Portion of returned
table
FirstName LastName ISBN
Harvey Deitel 0-13-013249-7
Harvey Deitel 0-13-271974-6
Harvey Deitel 0-13-528910-6
Harvey Deitel 0-13-083055-0
Harvey Deitel 0-13-565912-4
Paul Deitel 0-13-010671-2
Paul Deitel 0-13-083055-0
Paul Deitel 0-13-082927-7
Paul Deitel 0-13-083054-2
Tem Nieto 0-13-082928-5
Tem Nieto 0-13-565912-4
Tem Nieto 0-13-456955-5
Query Example
• Query Example
• --
• Returns table with book title, ISBN, first name, last name, year published, publisher's name

1 SELECT Titles.Title, Titles.ISBN, Authors.FirstName,


2 Authors.LastName, Titles.YearPublished,
3 Publishers.PublisherName
4 FROM
5 (Publishers INNER JOIN Titles
6 ON Publishers.PublisherID = Titles.PublisherID)
7 INNER JOIN
8 (Authors INNER JOIN AuthorISBN ON
9 Authors.AuthorID = AuthorISBN.AuthorID)
10 ON Titles.ISBN = AuthorISBN.ISBN
11 ORDER BY Titles.Title

• Indentation for readability


• Go through step by step
Query Example
1 SELECT Titles.Title, Titles.ISBN, Authors.FirstName,
2 Authors.LastName, Titles.YearPublished,
3 Publishers.PublisherName

• Specify order of fields to be returned


4 FROM
5 (Publishers INNER JOIN Titles
6 ON Publishers.PublisherID = Titles.PublisherID)

• Publishers and Titles tables joined ON condition that PublisherID


matches
• Table returned, will be INNER JOINed with another
Query Example
8 (Authors INNER JOIN AuthorISBN ON
9 Authors.AuthorID = AuthorISBN.AuthorID)

• INNER JOIN Authors and AuthorsISBN if AuthorID's match


• Remember, each AuthorISBN can have multiple authors
• Returns table
4 FROM
5 (Publishers INNER JOIN Titles
6 ON Publishers.PublisherID = Titles.PublisherID)
7 INNER JOIN
8 (Authors INNER JOIN AuthorISBN ON
9 Authors.AuthorID = AuthorISBN.AuthorID)
10 ON Titles.ISBN = AuthorISBN.ISBN
11 ORDER BY Titles.Title

• INNER JOIN two returned tables, ON condition that ISBN fields match
• Ascending order (default) by Title
TitleAuthor Query from Books.mdb
Title ISBN First Last Year Publisher
Name Name Published Name
C How to Program 0-13-226119-7 Paul Deitel 1994 Prentice Hall
C How to Program 0-13-118043-6 Paul Deitel 1992 Prentice Hall
C How to Program 0-13-118043-6 Harvey Deitel 1992 Prentice Hall
C How to Program 0-13-226119-7 Harvey Deitel 1994 Prentice Hall
C++ How to Program 0-13-528910-6 Harvey Deitel 1997 Prentice Hall
C++ How to Program 0-13-528910-6 Paul Deitel 1997 Prentice Hall

Internet and World Wide Web 0-13-016143-8 Paul Deitel 1999 Prentice Hall
How to Program
Internet and World Wide Web 0-13-016143-8 Harvey Deitel 1999 Prentice Hall
How to Program
Internet and World Wide Web 0-13-016143-8 Tem Nieto 1999 Prentice Hall
How to Program

Java How to Program 0-13-012507-5 Harvey Deitel 1999 Prentice Hall


Java How to Program 0-13-899394-7 Paul Deitel 1997 Prentice Hall
Java How to Program 0-13-899394-7 Harvey Deitel 1997 Prentice Hall
Java How to Program 0-13-012507-5 Paul Deitel 1999 Prentice Hall

Visual Basic 6 How to Program 0-13-456955-5 Harvey Deitel 1998 Prentice Hall
Visual Basic 6 How to Program 0-13-456955-5 Paul Deitel 1998 Prentice Hall
Visual Basic 6 How to Program 0-13-456955-5 Tem Nieto 1998 Prentice Hall
A First Example

• Perform query on Books.mdb database


• Connect to database
• Query
• Display results
4 import java.sql.*;

• Has classes and interfaces for using relational databases


11 private Connection connection;

• Declares Connection reference


• Implements interface Connection
• Manages connection between database and program
A First Example
19 String url = "jdbc:odbc:Books";
20 String username = "anonymous";
21 String password = "guest";

• Database URL (location), username to log in, password


• URL
• Protocol for communication (jdbc)
• Subprotocol (odbc) - indicates Microsoft ODBC data source
• ODBC allows generic access to database systems
• Driver allowing Java to access any ODBC source:
sun.jdbc.odbc.JdbcOdbcDriver
• Database name (Books)
A First Example

25 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );

• static method forName (class Class)


• Load class definition for database driver (complete package name)
• Throws ClassNotFoundException
27 connection = DriverManager.getConnection(
28 url, username, password );

• static method getConnection (class DriverManager)


• Attempt connection to database
• Name and password required (set up that way in 18.6.1)
A First Example
49 Statement statement;
55 statement = connection.createStatement();

• Statement object (implements interface Statement)


• Submits query to database
• Method createStatement (of Connection)
50 ResultSet resultSet;
53 String query = "SELECT * FROM Authors";
56 resultSet = statement.executeQuery( query );

• Method executeQuery (of Statement)


• Returns ResultSet object containing results
58 statement.close();

• statement closed when done


A First Example
• In method displayResultSet
69 boolean moreRecords = rs.next();

• Method next (of ResultSet)


• Positions to the next record
• Initially starts before first record
• Returns true if positioned to next record
81 Vector columnHeads = new Vector();
82 Vector rows = new Vector();

• Create Vectors to store column names and rows


• Vector - array like class, can dynamically grow and shrink
• Method addElement( element )
• Used to initialize JTable (later)
A First Example

86 ResultSetMetaData rsmd = rs.getMetaData();

• Gets meta data


• Class ResultSetMetaData
• Describes contents of a ResultSet
• Gets names of column heads
• Process ResultSet dynamically

88 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )


89 columnHeads.addElement( rsmd.getColumnName( i ) );

• Methods getColumnCount, getColumnName


• Class ResultSetMetaData
• Returns number and name of columns in ResultSet
A First Example
92 do {
93 rows.addElement( getNextRow( rs, rsmd ) );
94 } while ( rs.next() );

• Call utility method getNextRow


• Returns a Vector containing data for one row
• rs.next
• Moves cursor (current record)
• When no more, returns false (ends loop)
97 table = new JTable( rows, columnHeads );

• JTable GUI component


• Constructor - takes Vector of Vectors (like a double scripted array) for row data,
another Vector for column heads
A First Example
108 private Vector getNextRow( ResultSet rs,
109 ResultSetMetaData rsmd )
110 throws SQLException
111 {
112 Vector currentRow = new Vector();

• Utility method getNextRow


• Returns Vector containing data for one row
A First Example

114 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )


115 switch( rsmd.getColumnType( i ) ) {
116 case Types.VARCHAR:
117 currentRow.addElement( rs.getString( i ) );
119 case Types.INTEGER:
120 currentRow.addElement(
121 new Long( rs.getLong( i ) ) );

• Method getColumnType (of ResultSetMetaData)


• Returns constant integer (of class Types)
• Types.VARCHAR - strings
• Types.INTEGER - long integers
• Method getString( i ), getLong( i )
• Class ResultSet
• Returns contents of column i
134 connection.close();

• Terminates connection
1 // Fig. 18.24: TableDisplay.java
2 // This program displays the contents of the Authors table
3 // in the Books database.
4 import java.sql.*; Import the sql package.
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.*;
8 import java.util.*;
9
10 public class TableDisplay extends JFrame {
11 private Connection connection;
Specify url, username, and
12 private JTable table; password. The database has
13 password protection (next
14 public TableDisplay() section).
15 {
16 // The URL specifying the Books database
1. import to which

17 // this program connects using JDBC to connect to a


1.1 Declarations
18 // Microsoft ODBC database.
1.2 Constructor
19 String url = "jdbc:odbc:Books";
20
Load class definition for database
String username = "anonymous"; 1.3 url, username, password
21 String password = "guest"; 1.4 forName driver (static method
22 1.5. getConnection Class.forName).

23 // Load the driver to allow connection to the database Attempt to connect to


24 try {
25 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
database. Use static
26 method getConnection, of
27 connection = DriverManager.getConnection( class DriverManager
28 url, username, password ); (java.sql).
29 }
30 catch ( ClassNotFoundException cnfex ) {
31 System.err.println(
32 "Failed to load JDBC/ODBC driver." );
33 cnfex.printStackTrace();
34 System.exit( 1 ); // terminate program
35 }
36 catch ( SQLException sqlex ) {
37 System.err.println( "Unable to connect" );
38 sqlex.printStackTrace();
39 }
40
41 getTable();
42
43 setSize( 450, 150 );
44 show();
45 } 2. Method getTable
46
47 private void getTable()
48 {
2.1 createStatement
49 Statement statement;
50 ResultSet resultSet; Create a Statement object
2.2 executeQuery
51 that will query the database.
52 try {
53 String query = "SELECT * FROM Authors";
54 Returns a ResultSet
55 statement = connection.createStatement(); object containing results.
56 resultSet = statement.executeQuery( query );
57 displayResultSet( resultSet );
58 statement.close(); statement closed
59 } when not needed.
60 catch ( SQLException sqlex ) {
61 sqlex.printStackTrace();
62 }
63 }
64
65 private void displayResultSet( ResultSet rs )
66 throws SQLException
67 {
68 // position to first record Positions to first record in
69 boolean moreRecords = rs.next(); ResultSet (initially before first
70 record).
71 // If there are no records, display a message
72 if ( ! moreRecords ) {
73 JOptionPane.showMessageDialog( this, 2.3 close
74 "ResultSet contained no records" );
75 3. Method displayResultSet
setTitle( "No records to display" ); Create new Vectors, similar
76 return; 3.1 next to dynamic arrays.
77 }
78 3.2 Vector

79 setTitle( "Authors table from Books" );


3.3 getMetaData
80
81 Vector columnHeads = new Vector(); Get meta data, which
82 Vector rows = new Vector(); describes contents of
83
84 try {
ResultSet.
85 // get column heads
86 ResultSetMetaData rsmd = rs.getMetaData();
87
88 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
89 columnHeads.addElement( rsmd.getColumnName( i ) );
90
91 // get row data
Get names of column
92 do { heads, add to Vector.
93 rows.addElement( getNextRow( rs, rsmd ) );
94 } while ( rs.next() );
Utility method
95
96 // display table with ResultSet contents
getNextRow returns a
97 table = new JTable( rows, columnHeads ); Vector with row data.
98 JScrollPane scroller = new JScrollPane( table ); Creates a Vector of
99 getContentPane().add( Vectors (like double
100 scroller, BorderLayout.CENTER ); scripted array).
Create a JTable, takes
101 validate();
102 } 3.4 getColumnCount Vector of Vectors
103 catch ( SQLException sqlex ) { 3.5 getColumnName
and Vector of column
104 sqlex.printStackTrace(); heads.
3.6 getNextRow
105 }
106 } 3.7 JTable

107 4. getNextRow
108 private Vector getNextRow( ResultSet rs,
109 ResultSetMetaData rsmd )
110 throws SQLException
111 {
Create Vector to hold one row of
112 Vector currentRow = new Vector(); data.
113
114 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
115 switch( rsmd.getColumnType( i ) ) {
116 case Types.VARCHAR:
117 currentRow.addElement( rs.getString( i ) );
118 break;
119 case Types.INTEGER:
120 currentRow.addElement( Test for column type, add
121 new Long( rs.getLong( i ) ) );
122 break;
appropriate type of element to
123 default: Vector.
124 System.out.println( "Type was: " +
125 rsmd.getColumnTypeName( i ) );
126 }
127
128 return currentRow;
129 } 4.1 getColumnType
130
4.2 getString
131 public void shutDown()
132 { 4.3 getLong
133 try {
5. Method shutDown
134 connection.close();
135 } 5. close
136 catch ( SQLException sqlex ) {
137 System.err.println( "Unable to disconnect" );
138 sqlex.printStackTrace();
139 }
140 }
141
142 public static void main( String args[] )
143 {
144 final TableDisplay app = new TableDisplay();
145
146 app.addWindowListener(
147 new WindowAdapter() {
148 public void windowClosing( WindowEvent e )
149 {
150 app.shutDown();
151 System.exit( 0 );
152 }
153 }
154 );
6. main
155 }
156 }

Program Output
Registering Books.mdb as an ODBC Data Source

• Preceding example
• Assumes Books.mdb already registered as ODBC data source
• Need Microsoft Access installed
• Animated walkthrough of setup
Registering Books.mdb as an ODBC Data Source
Setup dialog appears. Enter name used to reference
database
ODBC Data and description
Source(optional).
Use Select... to choose
Administrator now database
The data
has sourcefile.
Books. must be registered with
This
Use allows
nowusaccess
We Advanced...
can to register our
to create
system.
ODBC asource
Go
data username
to Control (anonymous)
Panel -> and
password
User (guest).
Data
using JDBC When
driver.done,
Source
to ODBC ODBC DataclickSource
OK
Name. Administrator.
Go to the User DSN tab
and click Add...
We are using Access, so select
Microsoft Access
Driver, then Finish
Querying the Books.mdb Database

• Enhance previous program


• Allow user to enter any query into program
• Utility method getTable gets text from JTextArea
• Creates Statement, executes query as before
1 // Fig. 18.29: DisplayQueryResults.java
2 // This program displays the ResultSet returned by a
3 // query on the Books database.
4 import java.sql.*;
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.*;
8 import java.util.*;
9
10 public class DisplayQueryResults extends JFrame {
11 // java.sql types needed for database processing
12 private Connection connection;
13 private Statement statement;
14 private ResultSet resultSet;
15
16 private ResultSetMetaData rsMetaData;
17 1. import
18 // javax.swing types needed for GUI
19 private JTable table;
1.1 Declarations
20 private JTextArea inputQuery;
21 private JButton submitQuery;
22 1.2 Constructor
23 public DisplayQueryResults()
24 {
25 super( "Enter Query. Click Submit to See Results." );
26
27 // The URL specifying the Books database to which
28 // this program connects using JDBC to connect to a
29 // Microsoft ODBC database.
30 String url = "jdbc:odbc:Books";
31 String username = "anonymous";
32 String password = "guest";
33
34 // Load the driver to allow connection to the database
35 try { 2. Connect to database
36 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
37
38 connection = DriverManager.getConnection(
39 url, username, password ); 2.1 GUI
40 }
41 catch ( ClassNotFoundException cnfex ) {
42 System.err.println(
43 "Failed to load JDBC/ODBC driver." );
44 cnfex.printStackTrace();
45 System.exit( 1 ); // terminate program
46 }
47 catch ( SQLException sqlex ) {
48 System.err.println( "Unable to connect" );
49 sqlex.printStackTrace();
50 System.exit( 1 ); // terminate program Create JTextArea for user
51 }
52
to enter query.
53 // If connected to database, set up GUI
54 inputQuery =
55 new JTextArea( "SELECT * FROM Authors", 4, 30 );
56 submitQuery = new JButton( "Submit query" );
57 submitQuery.addActionListener(
58 new ActionListener() {
59 public void actionPerformed( ActionEvent e )
60 { 2.2 Event handler
61
62
if ( e.getSource() == submitQuery )
getTable(); (call getTable)
63 }
64 }
65 );
66 2.3 GUI
67 JPanel topPanel = new JPanel();
68 topPanel.setLayout( new BorderLayout() );
69

70 topPanel.add( new JScrollPane( inputQuery),


71 BorderLayout.CENTER );
72 topPanel.add( submitQuery, BorderLayout.SOUTH );
73
74 table = new JTable( 4, 4 );
75
76 Container c = getContentPane();
77 c.setLayout( new BorderLayout() );
78 c.add( topPanel, BorderLayout.NORTH );
79 c.add( table, BorderLayout.CENTER );
80
81 getTable();
82
83 setSize( 500, 500 );
84 show();
85 }
86
87 private void getTable()
88 {
89
90
try {
String query = inputQuery.getText();
3. Methods getTable and
91 displayResultSet as
92 statement = connection.createStatement(); before
93 resultSet = statement.executeQuery( query );
94 displayResultSet( resultSet );
95 }
96 catch ( SQLException sqlex ) {
97 sqlex.printStackTrace();
98 }
99 }
100
101 private void displayResultSet( ResultSet rs )
102 throws SQLException
103 {
104 // position to first record
105 boolean moreRecords = rs.next();
106
107 // If there are no records, display a message
108 if ( ! moreRecords ) {
109 JOptionPane.showMessageDialog( this,
110 "ResultSet contained no records" );
111 setTitle( "No records to display" );
112 return;
113 }
114
115 Vector columnHeads = new Vector();
116 Vector rows = new Vector();
117
118 try {
119 // get column heads
120 ResultSetMetaData rsmd = rs.getMetaData();
121
122

123 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )


124 columnHeads.addElement( rsmd.getColumnName( i ) );
125
126 // get row data
127 do {
128 rows.addElement( getNextRow( rs, rsmd ) );
129 } while ( rs.next() );
130
131 // display table with ResultSet contents
132 table = new JTable( rows, columnHeads );
133 JScrollPane scroller = new JScrollPane( table );
134 Container c = getContentPane();
135 c.remove( 1 );
136 c.add( scroller, BorderLayout.CENTER );
137 c.validate();
138 }
139 catch ( SQLException sqlex ) {
140 sqlex.printStackTrace();
141 }
142 }
143
144 private Vector getNextRow( ResultSet rs,
145 ResultSetMetaData rsmd )
146 throws SQLException
147 { 4. Methods getNextRow
148
149
Vector currentRow = new Vector();
and Shutdown as before
150 for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
151 switch( rsmd.getColumnType( i ) ) {
152 case Types.VARCHAR:
153 case Types.LONGVARCHAR:
154 currentRow.addElement( rs.getString( i ) );
155 break;
156 case Types.INTEGER:
157 currentRow.addElement(
158 new Long( rs.getLong( i ) ) );
159 break;
160 default:
161 System.out.println( "Type was: " +
162 rsmd.getColumnTypeName( i ) );
163 }
164
165 return currentRow;
166 }
167
168 public void shutDown()
169 {
170 try {
171 connection.close();
172 }
173 catch ( SQLException sqlex ) {
174 System.err.println( "Unable to disconnect" );
175
176 sqlex.printStackTrace();
5. main
177 }
178 }
179
180 public static void main( String args[] )
181 {
182 final DisplayQueryResults app =
183 new DisplayQueryResults();
184
185 app.addWindowListener(
186 new WindowAdapter() {
187 public void windowClosing( WindowEvent e )
188 {
189 app.shutDown();
190 System.exit( 0 );
191 }
192 }
193 );
194 }
195 }
196
Program Output
Reading, Inserting, and Updating a Microsoft
Access database

• Upcoming example
• Manipulates a simple address book
• AddressBook database has one table with 11 columns
• ID, FirstName, LastName, Address, City, StateOrProvince,
PostalCode, Country, EmailAddress, HomePhone and FaxNumber
• All strings except ID, a long integer
• Create database as an ODBC data source, access using JDBC to ODBC bridge
database driver
Reading, Inserting, and Updating a Microsoft
Access database

• Classes
• AddressBook
• Driver, sets up GUI, contains main
• Event handling classes:
• AddRecord - Add button
• FindRecord - Find button
• UpdateRecord - Update button
• Help - Help button
• ClearFields - Clear button
• ScrollingPanel
• Contains JTextFields for making queries
• ControlPanel
• Creates buttons and registers event handlers
Reading, Inserting, and Updating a Microsoft
Access database
• Class AddressBook
23 scrollArea = new ScrollingPanel();

26 c.add( new JScrollPane( scrollArea ),


27 BorderLayout.CENTER );
28 textpane = new JScrollPane( output );

29
59 c.add( textpane,
controls = BorderLayout.SOUTH );

60 new ControlPanel( connect, scrollArea, output);


61 c.add( controls, BorderLayout.NORTH );

• Adds ControlPanel and ScrollingPanel objects to content pane


• Add JTextArea for status window
• Connects to database using previous techniques
1 // Fig. 18.30: AddressBook.java
2 // Inserting into, updating and searching through a database
3 import java.sql.*;
4 import java.awt.*;
1. import
5 import java.awt.event.*;
6 import javax.swing.*; 1.1 Declarations
7
8 public class AddressBook extends JFrame { 2. Constructor
9 private ControlPanel controls; 2.1 GUI components
10 private ScrollingPanel scrollArea;
11 private JTextArea output;
12 private String url;
13 private Connection connect;
14 private JScrollPane textpane;
15
16 public AddressBook()
17 {
18 super( "Address Book Database Application" );
19
20 Container c = getContentPane();
21
22 // Start screen layout
23 scrollArea = new ScrollingPanel();
24 output = new JTextArea( 6, 30 );
25 c.setLayout( new BorderLayout() );
26 c.add( new JScrollPane( scrollArea ),
27 BorderLayout.CENTER );
28 textpane = new JScrollPane( output );
29 c.add( textpane, BorderLayout.SOUTH );
30
31 // Set up database connection
32 try {
33 url = "jdbc:odbc:AddressBook"; 2.2 Connect to
34 database
35 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
36 connect = DriverManager.getConnection( url );
37 output.append( "Connection successful\n" );
38 }
39 catch ( ClassNotFoundException cnfex ) {
40 // process ClassNotFoundExceptions here
41 cnfex.printStackTrace();
42 output.append( "Connection unsuccessful\n" +
43 cnfex.toString() );
44 }
45
46 catch ( SQLException sqlex ) {
47 // process SQLExceptions here
48 sqlex.printStackTrace();
49 output.append( "Connection unsuccessful\n" +
50 sqlex.toString() );
51 }
52 catch ( Exception ex ) {
53 // process remaining Exceptions here
54 ex.printStackTrace();
55 output.append( ex.toString() );
56 }
57
58 // Complete screen layout
59 controls =
60 new ControlPanel( connect, scrollArea, output);
61 c.add( controls, BorderLayout.NORTH ); 3. main
62
63 setSize( 500, 500 );
64 show();
65 }
66
67 public static void main( String args[] )
68 {
69 AddressBook app = new AddressBook();
70
71 app.addWindowListener(
72 new WindowAdapter() {
73 public void windowClosing( WindowEvent e )
74 {
75 System.exit( 0 );
76 }
77 }
78 );
79 }
80 }
81
Reading, Inserting, and Updating a Microsoft
Access database
• Class AddRecord
• Event handling class for Add button
• Constructor
94 public AddRecord( Connection c, ScrollingPanel f,
95 JTextArea o )

• Connection - creates Statement for manipulating


database
• ScrollingPanel - has JTextFields
• JTextArea - output area for messages

105 Statement statement = connection.createStatement();

• Create Statement
Reading, Inserting, and Updating a Microsoft
Access database

• SQL statement for inserting data


INSERT INTO tableName ( columnName1, columnName2,... )
VALUES ( 'value1', 'value2', ... )

• Columns to be updated in comma-separated list


• Value for columns specified comma-separated list after VALUES

109 String query = "INSERT INTO addresses (" +


110 "firstname, lastname, address, city, " +

• Create INSERT INTO statement using JTextFields


Reading, Inserting, and Updating a Microsoft
Access database

127 int result = statement.executeUpdate( query );


129 if ( result == 1 )
130 output.append( "\nInsertion successful\n" );

• Method executeUpdate
• Updates database
• Returns 1 if successful
• Clear fields if unsuccessful
82 // Fig. 18.30: AddRecord.java
83 // Class AddRecord definition
84 import java.awt.*;
85 import java.awt.event.*;
1. import
86 import java.sql.*; 1.1 Declarations
87 import javax.swing.*;
88 1.2 Constructor
89 public class AddRecord implements ActionListener { 2. actionPerformed
90 private ScrollingPanel fields;
91 private JTextArea output; 2.1 createStatement
92 private Connection connection;
2.2 INSERT INTO
93
94 public AddRecord( Connection c, ScrollingPanel f,
95 JTextArea o )
96 {
97 connection = c;
98 fields = f;
99 output = o;
100 }
101 Use the column names for the
102 public void actionPerformed( ActionEvent e ) INSERT INTO statement.
103 {
104 try {
105 Statement statement = connection.createStatement();
106
107 if ( !fields.last.getText().equals( "" ) &&
108 !fields.first.getText().equals( "" ) ) {
109 String query = "INSERT INTO addresses (" +
110 "firstname, lastname, address, city, " +
111 "stateorprovince, postalcode, country, " +
112 "emailaddress, homephone, faxnumber" +
113
114
") VALUES ('" +
fields.first.getText() + "', '" +
2.3 getText
115 fields.last.getText() + "', '" +
116 fields.address.getText() + "', '" +
117 fields.city.getText() + "', '" +
Access JTextArea 2.4 executeUpdate
118 fields.state.getText() + "', '" +
119 fields.zip.getText() + "', '" + instance variables of
120 fields.country.getText() + "', '" + fields (a
121 fields.email.getText() + "', '" + ScrollingPanel
122 fields.home.getText() + "', '" +
123 fields.fax.getText() + "')";
object).
124 output.append( "\nSending query: " + Use text in VALUES.
125 connection.nativeSQL( query )
126 + "\n" );
127 int result = statement.executeUpdate( query );
128
129 if ( result == 1 )
130 output.append( "\nInsertion successful\n" Attempt
); to update the
131 else {
132 output.append( "\nInsertion failed\n" );
database
133 fields.first.setText( "" );
134 fields.last.setText( "" );
135 fields.address.setText( "" );
136 fields.city.setText( "" );
137 fields.state.setText( "" );
138 fields.zip.setText( "" );
139 fields.country.setText( "" );
140 fields.email.setText( "" );
141 fields.home.setText( "" );
142 fields.fax.setText( "" );
143 }
144 }
145
146 else
147 output.append( "\nEnter at least first and " +
148 "last name then press Add\n" );
149
150 statement.close();
151 }
152 catch ( SQLException sqlex ) {
153 sqlex.printStackTrace();
154 output.append( sqlex.toString() );
155 }
156 }
157 }
158
Reading, Inserting, and Updating a Microsoft
Access database

• Class FindRecord
• Event handler for Find button
• Searches AddressBook database using last name
• Creates Statement from connection
• Use query:
SELECT * FROM addresses
WHERE lastname = 'Name entered by user'
190 ResultSet rs = statement.executeQuery( query );

• Submits query, returns ResultSet


191 display( rs );

• Call utility method


Reading, Inserting, and Updating a Microsoft
Access database
207 public void display( ResultSet rs )
208 {
210 rs.next();
212 int recordNumber = rs.getInt( 1 );
214 if ( recordNumber != 0 ) {
215
fields.id.setText(
216 String.valueOf( recordNumber));
fields.first.setText( rs.getString( 2 ) );

• next
• Move to first record
• getInt - get ID number
• getString - get other fields
• Arguments refer to column numbers
159 // Fig. 18.30: FindRecord.java
160 // Class FindRecord defintion
161 import java.awt.*;
162 import java.awt.event.*; 1. import
163 import java.sql.*;
164 import javax.swing.*;
165
1.1 Declarations
166 public class FindRecord implements ActionListener {
167 private ScrollingPanel fields;
168 private JTextArea output;
169 private Connection connection; 1.2 Constructor
170
171 public FindRecord( Connection c, ScrollingPanel f,
172 JTextArea o ) 2. Event handler
173 {
174 connection = c;
175 fields = f;
176 output = o;
2.1 createStatement
177 }
178
179 public void actionPerformed( ActionEvent e ) 2.2 query
180 {
181 try {
182 if ( !fields.last.getText().equals( "" ) ) {
183 Statement statement =connection.createStatement();
184 String query = "SELECT * FROM addresses " +
185 "WHERE lastname = '" +
186 fields.last.getText() + "'";
187 output.append( "\nSending query: " +
188 connection.nativeSQL( query )
189 + "\n" );
190 ResultSet rs = statement.executeQuery( query );
191 display( rs );
192 output.append( "\nQuery successful\n" ); 2.3 executeQuery
193 statement.close();
194 }
195 2.3 display
196 else
197 fields.last.setText(
198 "Enter last name here then press Find" );
199 }
2.5 Method display
200 catch ( SQLException sqlex ) {
201 sqlex.printStackTrace();
202 output.append( sqlex.toString() ); 2.6 getInt
203 }
204 }
205 2.7 getString
206 // Display results of query. If rs is null
207 public void display( ResultSet rs )
208 {
209 try {
210 rs.next();
211
212 int recordNumber = rs.getInt( 1 );
213
214 if ( recordNumber != 0 ) {
215 fields.id.setText( String.valueOf( recordNumber));
216 fields.first.setText( rs.getString( 2 ) );
217 fields.last.setText( rs.getString( 3 ) );
218 fields.address.setText( rs.getString( 4 ) );
219 fields.city.setText( rs.getString( 5 ) );
220 fields.state.setText( rs.getString( 6 ) );
221 fields.zip.setText( rs.getString( 7 ) );
222 fields.country.setText( rs.getString( 8 ) );
223 fields.email.setText( rs.getString( 9 ) );
224 fields.home.setText( rs.getString( 10 ) );
225 fields.fax.setText( rs.getString( 11 ) );
226 }
227 else
228 output.append( "\nNo record found\n" );
229 }
230 catch ( SQLException sqlex ) {
231 sqlex.printStackTrace();
232 output.append( sqlex.toString() );
233 }
234 }
235 }
236
Reading, Inserting, and Updating a Microsoft
Access database
• Class UpdateRecord
• Event handler for Update button
• UPDATE SQL statement
UPDATE tableName SET columnName1 = 'value1', columnName2 = 'value2', ...
WHERE criteria
264 String query = "UPDATE addresses SET " +
265 "firstname='" + fields.first.getText() +
266 "', lastname='" + fields.last.getText() +
267 "', address='" + fields.address.getText()
+

• Use ID as criteria
• Use method executeUpdate to update
237 // Fig. 18.30: UpdateRecord.java
238 // Class UpdateRecord definition
239 import java.awt.*; 1. import
240 import java.awt.event.*;
241 import java.sql.*;
242 import javax.swing.*;
243
1.1 Declarations
244 public class UpdateRecord implements ActionListener {
245 private ScrollingPanel fields;
246 1.2 Constructor
247 private JTextArea output;
248 private Connection connection;
249 2. Event handler
250 public UpdateRecord( Connection c, ScrollingPanel f,
251 JTextArea o )
252 {
253 connection = c;
2.1 UPDATE
254 fields = f;
255 output = o;
256 }
Use an SQL UPDATE
257 statement as the query string.
258 public void actionPerformed( ActionEvent e )
259 {
260 try {
261 Statement statement = connection.createStatement();
262
263 if ( ! fields.id.getText().equals( "" ) ) {
264 String query = "UPDATE addresses SET " +
265 "firstname='" + fields.first.getText() +
266 "', lastname='" + fields.last.getText() +
267 "', address='" + fields.address.getText() +
268 "', city='" + fields.city.getText() +
269 "', stateorprovince='" +
270 fields.state.getText() +
271
272
"', postalcode='" + fields.zip.getText() +
"', country='" + fields.country.getText() +
2.2 executeUpdate
273 "', emailaddress='" +
274 fields.email.getText() +
275 "', homephone='" + fields.home.getText() +
276 "', faxnumber='" + fields.fax.getText() +
277 "' WHERE id=" + fields.id.getText();
278 output.append( "\nSending query: " +
279 connection.nativeSQL( query ) + "\n" );
280
281 int result = statement.executeUpdate( query );
282
283 if ( result == 1 )
284 output.append( "\nUpdate successful\n" );
285 else {
286 output.append( "\nUpdate failed\n" );
287 fields.first.setText( "" );
288 fields.last.setText( "" );
289 fields.address.setText( "" );
290 fields.city.setText( "" );
291 fields.state.setText( "" );
292 fields.zip.setText( "" );
293 fields.country.setText( "" );
294 fields.email.setText( "" );
295 fields.home.setText( "" );
296 fields.fax.setText( "" );
297 }
298
299 statement.close();
300 }
301 else
302 output.append( "\nYou may only update an " +
303 "existing record. Use Find to " +
304 "locate the record, then " +
305 "modify the information and " +
306 "press Update.\n" );
307 }
308 catch ( SQLException sqlex ) {
309 sqlex.printStackTrace();
310 output.append( sqlex.toString() );
311 }
312 }
313 }
314
Reading, Inserting, and Updating a Microsoft
Access database

• Class Help
• Event handler for Help button
• Adds text to message area
• Class ControlPanel
• Extends JPanel
• Adds buttons and registers event handlers
315 // Fig. 18.30: Help.java
316 // Class Help definition
317 import java.awt.*;
318 import java.awt.event.*;
1. import
319 import javax.swing.*;
320
321 public class Help implements ActionListener {
1.1 Event handler
322 private JTextArea output;
323
324 public Help( JTextArea o )
325 {
----------------
326 output = o;
327 }
328 1. import
329 public void actionPerformed( ActionEvent e )
330 {
331 output.append( "\nClick Find to locate a record.\n" +
332 "Click Add to insert a new record.\n" +
333 "Click Update to update " +
334 "the information in a record.\n" +
335 "Click Clear to empty" +
336 " the textfields.\n" );
337 }
338 }
339
340 // Fig. 18.30: ControlPanel.java
341 // Class ControlPanel definition
342 import java.awt.*;
343 import java.awt.event.*;
344 import java.sql.*;
345 import javax.swing.*;
1.1 Constructor
346

347 public class ControlPanel extends JPanel { 1.2 JButtons


348 private JButton findName, addName,
349 updateName, clear, help; 1.3 Event
350 handlers
351 public ControlPanel( Connection c, ScrollingPanel s,
352 JTextArea t )
353 {
354 setLayout( new GridLayout( 1, 5 ) );
355
356 findName = new JButton( "Find" );
357 findName.addActionListener( new FindRecord( c, s, t ) );
358 add( findName );
359
360 addName = new JButton( "Add" );
361
Create buttons and register event
addName.addActionListener( new AddRecord( c, s, t ) );
362 add( addName ); handlers using event handling
363 classes.
364 updateName = new JButton( "Update" );
365 updateName.addActionListener(
366 new UpdateRecord( c, s, t ) );
367 add( updateName );
368
369 clear = new JButton( "Clear" );
370 clear.addActionListener( new ClearFields( s ) );
371 add( clear );
372
373 help = new JButton( "Help" );
374 help.addActionListener( new Help( t ) );
375 add( help );
376 }
377 }
378
Reading, Inserting, and Updating a Microsoft
Access database

• Class ScrollingPanel
• Has JLabels and JTextFields for ID, name, address, etc.
• Class ClearFields
• Event handler for Clear button
• Clears all fields (empty string)
379 // Fig. 18.30: ScrollingPanel.java
380 // Class ScrollingPanel
381 import java.awt.*; 1. import
382 import java.awt.event.*;
383 import javax.swing.*;
384
1.1 Declarations
385 public class ScrollingPanel extends JPanel {
386 private JPanel labelPanel, fieldsPanel;
1.2 labels[]
387 private String labels[] =
388 { "ID number:", "First name:", "Last name:",
389 "Address:", "City:", "State/Province:",
1.3 Constructor
390 "PostalCode:", "Country:", "Email:",
391 "Home phone:", "Fax Number:" };
392 JTextField id, first, last, address, // package access 1.4 Loop and create
393 city, state, zip, JLabels
394 country, email, home, fax; Declare JTextFields and
395
396 public ScrollingPanel()
array to hold titles of JLabels.
397 {
398 // Label panel
399 labelPanel = new JPanel();
400 labelPanel.setLayout(
401 new GridLayout( labels.length, 1 ) );
402
403 ImageIcon ii = new ImageIcon( "images/icon.jpg" );
404
405 for ( int i = 0; i < labels.length; i++ )
406 labelPanel.add( new JLabel( labels[ i ], ii, 0) );
407
408 // TextField panel
409 fieldsPanel = new JPanel();
410 fieldsPanel.setLayout(
411 new GridLayout( labels.length, 1 ) ); 1.5 Create
412 id = new JTextField( 20 );
413 id.setEditable( false );
JTextFields
414 fieldsPanel.add( id );
415 first = new JTextField( 20 );
416 fieldsPanel.add( first ); Create a JTextField for each column
417 last = new JTextField( 20 ); in AddressBook database.
418 fieldsPanel.add( last );
419 address = new JTextField( 20 );
420 fieldsPanel.add( address );
421 city = new JTextField( 20 );
422 fieldsPanel.add( city );
423 state = new JTextField( 20 );
424 fieldsPanel.add( state );
425 zip = new JTextField( 20 );
426 fieldsPanel.add( zip );
427 country = new JTextField( 20 );
428 fieldsPanel.add( country );
429 email = new JTextField( 20 );
430 fieldsPanel.add( email );
431 home = new JTextField( 20 );
432 fieldsPanel.add( home );
433 fax = new JTextField( 20 );
434 fieldsPanel.add( fax );
435
436 setLayout( new GridLayout( 1, 2 ) );
437 add( labelPanel );
438 add( fieldsPanel );
439 }
440 } 1. import
441
442 // Fig. 18.30: ClearFields.java
443 // Class ClearFields definition
1.1 Event handler
444 import java.awt.*;
445 import java.awt.event.*;
446
447 public class ClearFields implements ActionListener {
1.2 setText
448 private ScrollingPanel fields;
449
450 public ClearFields( ScrollingPanel f )
451 {
452 fields = f;
453 }
454
455 public void actionPerformed( ActionEvent e )
456 {
457 fields.id.setText( "" );
458 fields.first.setText( "" );
459 fields.last.setText( "" );
460 fields.address.setText( "" );
461 fields.city.setText( "" );
462 fields.state.setText( "" );
463 fields.zip.setText( "" );
464 fields.country.setText( "" );
465 fields.email.setText( "" );
466 fields.home.setText( "" );
467 fields.fax.setText( "" );
468 }
469 }

Program Output
Transaction Processing

• Transaction processing
• Changes can be undone
• Interface Connection
• Method setAutoCommit
• true - each SQL statements performed individually
• false - several statements grouped as a transaction
• Terminating Statement that executes SQL statements
• Method commit - commit changes to database
• Method rollback - return database to previous state
• Method getAutoCommit
• Returns auto commit state

You might also like