47
242-301 Adv. CoE Lab: JDBC Advanced Computer Engineering Lab Objective to give some background on JDBC to help with the lab exercises 242-301, Semester 1, 2014-2015 Introduction to J ava Database Conn ectivity (JDBC)

242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

Embed Size (px)

Citation preview

Page 1: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 1

Advanced Computer Engineering Lab

• Objective– to give some background on JDBC to help wi

th the lab exercises

242-301, Semester 1, 2014-2015

Introduction to Java Database Connectivity (JDBC)

Page 2: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 2

Overview

1. What is JDBC?

2. The JDBC-ODBC Bridge

3. Four Types of JDBC Drivers

4. JDBC Pseudocode

5. SimpleJDBC.java

Continued

Page 3: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 3

6. Meta Data

7. Using MS Access

8. Books.accdb as an ODBC Data Source

9. Data Source Problems

10. More Information

Page 4: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 4

1. What is JDBC?

• JDBC is an interface which allows Java code to execute SQL statements inside relational databases– the databases must follow the ANSI SQL-2 stan

dard

Page 5: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 5

JDBC in Use

Java program

connectivity

data processingutilities

JDBCdriver

for Oracle

driverfor Sybase

jdbc-odbcbridge

odbcdriver

Green means"Java code"

Page 6: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 6

2. The JDBC-ODBC Bridge

• ODBC (Open Database Connectivity) is a Microsoft standard from the mid 1990’s.

• It is an API that allows C/C++ programs to execute SQL inside databases

• ODBC is supported by many products.

Continued

Page 7: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 7

• The JDBC-ODBC bridge allows Java code to use the C/C++ interface of ODBC– it means that JDBC can access many different d

atabase products

• The layers of translation (Java --> C --> SQL) can slow down execution.

Continued

Page 8: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 8

• The JDBC-ODBC bridge comes free with the JDK:– called sun.jdbc.odbc.JdbcOdbcDriver

• The ODBC driver for Microsoft Access comes with MS Office– so it is easy to connect Java and Access

Page 9: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 9

3. Four Types of JDBC Driver

• 1. JDBC-ODBC Bridge (type 1)– translate Java to the ODBC API– used by many Windows-based databases, e.g.

MS-Access

• 2. Database Protocol Driver (type 4)– Independent from the OS/hardware because the

driver is in Java.

Continued

Page 10: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 10

• 3. Native API Connection Driver (type 2)– connected by a OS native module, dependent on the

OS or hardware (e.g. DLLs on Windows)

• 4. Net Connection Driver (type 3)– use Java to access the database via networking mid

dleware (usually TCP/IP)

– required for networked applications

Page 11: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 11

JDBC Drivers

• A very long list of drivers (freeware, shareware, and commercial) can be found at:

http://www.oracle.com/technetwork/java/ index-136695.html

Page 12: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 12

4. JDBC as a Diagram

DriveManager Connection Statement ResultSetcreates creates creates

Driver

SQL

SQL

data

data

make linkto driverGreen means

"Java code"

Page 13: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 13

DriveManager

• It is responsible for establishing the connection to the database through the driver.

• e.g.Class.forName(

"sun.jdbc.odbc.JdbcOdbcDriver");Connection conn = DriveManager.getConnection(url);

name of the database

Page 14: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 14

Name the Database

• The name and location of the database is given as a URL– the details of the URL vary depending on the ty

pe of database that is being used

Page 15: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 15

ODBC Database URL

jdbc:odbc: //host.domain.com: 2048 /data/file

The commsprotocol

The machineholding the database.

The portused for the connection.

The path tothe databaseon the machine

e.g. jdbc:odbc:Books

Page 16: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 16

Statement Object

• The Statement object provides a ‘workspace’ where SQL queries can be created, executed, and results collected.

• e.g.Statement st =

conn.createStatement():ResultSet rs = st.executeQuery(

“ select * from Authors” );:

st.close();

Page 17: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 17

ResultSet Object

• Stores the results of a SQL query.

• A ResultSet object is similar to a ‘table’ of answers, which can be examined by moving a ‘pointer’ (cursor).

Continued

Page 18: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 18

• Cursor operations:– first(), last(), next(), previous(), etc.

• Typical code:while( rs.next() ) { // process the row;}

23

5

17

98

John

Mark

Paul

Peter

cursor

Page 19: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 19

5. SimpleJDBC.java// SimpleJDBC.java// Displays the firstnames and lastnames// of the Authors table in the Books db.

import java.sql.*;

public class SimpleJDBC {

public static void main(String[] args) { // The URL for the Books database.

// ’Protected' by a login and password. String url = "jdbc:odbc:Books"; String username = "anonymous"; String password = "guest";

:

Page 20: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 20

try { // load the JDBC-ODBC Bridge driver

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

// connect to db using DriverManager Connection conn =

DriverManager.getConnection( url, username, password );

// Create a statement object Statement statement = conn.createStatement();

// Execute the SQL query

ResultSet rs = statement.executeQuery( "SELECT lastName, firstName FROM Authors" );

:

Page 21: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 21

// Print the result set while( rs.next() )

System.out.println(

rs.getString("lastName") + ", " + rs.getString("firstName") );

// Close down statement.close(); conn.close(); }

:

Page 22: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 22

catch ( ClassNotFoundException cnfex ) { System.err.println( "Failed to load JDBC/ODBC driver." ); cnfex.printStackTrace(); System.exit( 1 ); // terminate program }

catch ( SQLException sqlex ) { System.err.println( sqlex ); sqlex.printStackTrace(); }

} // end of main()

} // end of SimpleJDBC class

Page 23: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 23

Section 8not done.

Section 8now done.

Output

Page 24: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 24

• If you've done section 8, but still getting If you've done section 8, but still getting error messages, then check out section 9.error messages, then check out section 9.

• If you're still having problems, please come If you're still having problems, please come to see Aj. Andrew.to see Aj. Andrew.

Page 25: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 25

5.1. Username & Password

• The database’s link to the outside (e.g. its ODBC interface) must be configured to have a login and password– details for ODBC are given later

Page 26: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 26

5.2. Accessing a ResultSet

• The ResultSet class contains many methods for accessing the value of a column of the current row– can use the column name or position– e.g. get the value in the lastName column:

rs.getString("lastName")

Continued

Page 27: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 27

• The ‘tricky’ aspect is that the values are SQL data, and so must be converted to Java types/objects.

• There are many methods for accessing/converting the data, e.g.– getString(), getDate(), getInt(), getFloat(), getObject()

Page 28: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 28

6. Meta Data

• Meta data is the information about the database:– e.g. the number of columns, the types of the col

umns– meta data is the schema information

ID Name Course Mark

007 James Bond Shooting 99

008 Aj. Andrew Kung Fu 1

meta data

Page 29: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 29

• One important use for metadata is for One important use for metadata is for formatting result set dataformatting result set data– e.g. instead of displaying the results as text, e.g. instead of displaying the results as text,

display them in a Java table with headers, rows, display them in a Java table with headers, rows, columnscolumns• see TableDisplay.java in the Exercisessee TableDisplay.java in the Exercises

Page 30: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 30

6.1. Accessing Meta Data

• The getMetaData() method can be used on a ResultSet object to create its meta data object.

• e.g.ResultSetMetaData md =

rs.getMetaData();

Page 31: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 31

6.2. Using Meta Data

int numCols = md.getColumnCount();

for (int i = 0; i <= numCols; i++) { if (md.getColumnType(i) ==

Types.CHAR) System.out.println(

md.getColumnName(i) )}

Page 32: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 32

6.3. More Meta Data Methods

• getTableName()• getPrecision()

– number of decimal digits in the column• isSigned()

– returns true if column has signed numbers• isCurrency()

• etc.

Page 33: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 33

7. Using MS Access7. Using MS Access

• MS Access changed its file formats when MS Access changed its file formats when Access 2007 was released:Access 2007 was released:– for Access 2003 (and earlier) you should use for Access 2003 (and earlier) you should use

Books.Books.mdbmdb– for Access 2007 or 2010, you should use for Access 2007 or 2010, you should use

Books.Books.accdbaccdb– both versions are in the lab's website.both versions are in the lab's website.

Page 34: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 34

Access and SQLAccess and SQL• How to use SQL in Access is described at:How to use SQL in Access is described at:

– http://www.jaffainc.com/SQLStatementsInAccess.htmhttp://www.jaffainc.com/SQLStatementsInAccess.htm

And on the website, in sqlAccess2007.txt and sql_intr.pdf

And on the website, in sqlAccess2007.txt and sql_intr.pdf

Page 35: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 35

TableRelationships in Books.accdb(and Books.mdb)

Under Database Tools > Relationships

Page 36: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 36

8. Books.accdb as an ODBC Data Source

• 1. Click on“Data Sources (ODBC)” in “Administrative Tools” folder in the ControlPanel.

Page 37: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 37

• Select the MS Access Data Source. Select the MS Access Data Source. Press “Add’ to add a data source.

If you don't findMS Access here,then go to Section 9.

Page 38: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 38

• Select the English Microsoft Access Driver (*.mdb,*.accdb). Press “Finish”.

Page 39: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 39

• 3. Type in the "Books"

source name, any description, and press “Select” to browse to set the path to the Books.accdb or Books.mdb file.

Click on “Advanced”.

Page 40: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 40

• 4. Type in a username and password (guest).

Click “Ok” repeatedlyuntil all the dialog boxes are gone.

Page 41: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 41

9. Data Source Problems9. Data Source Problems• Two problems may occur when using JDBC with Two problems may occur when using JDBC with

the data source set up in Section 8:the data source set up in Section 8:– "No suitable driver found for jdbc: odbc: driver={Microsoft "No suitable driver found for jdbc: odbc: driver={Microsoft

Access Driver (*.mdb)};...Access Driver (*.mdb)};...

– "The specified DSN contains an architecture mismatch "The specified DSN contains an architecture mismatch between the Driver and Application"between the Driver and Application"

• These problems are usually due to you using the These problems are usually due to you using the 64-bit version of Windows 7.64-bit version of Windows 7.

Page 42: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 42

• Check your version of Windows by Check your version of Windows by following the steps listed at:following the steps listed at:– http://support.microsoft.com/kb/827218http://support.microsoft.com/kb/827218

means32-bit

Page 43: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 43

Which Version of Access?Which Version of Access?

• Check whether you are using the 32-bit or Check whether you are using the 32-bit or 64-bit version of Access:64-bit version of Access:– look at the "Help" dialoglook at the "Help" dialog

Page 44: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 44

Win7 64-bit & Access 64-bitWin7 64-bit & Access 64-bit

• You may need to download the 64-bit You may need to download the 64-bit Access drivers from:Access drivers from:– http://www.microsoft.com/http://www.microsoft.com/ en-us/download/details.aspx?id=13255 en-us/download/details.aspx?id=13255

– execute execute AccessDatabaseEngine_x64.exe

• You should also be using the You should also be using the 64-bit64-bit version version of Java for Windows. get it from:of Java for Windows. get it from:– http://www.java.com/en/download/http://www.java.com/en/download/

Page 45: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 45

Win 7 64-bit & Access Win 7 64-bit & Access 32-bit32-bit

• Set up the data source using the 32-bit Set up the data source using the 32-bit ODBC control panel at:ODBC control panel at:– c:\windows\sysWOW64\odbcad32.exec:\windows\sysWOW64\odbcad32.exe

• You should also be using the You should also be using the 32-bit32-bit version version of Java for Windows. Get it from:of Java for Windows. Get it from:– http://www.java.com/en/download/http://www.java.com/en/download/

Page 46: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 46

10. More Information

• Ivor Horton’s Beginning Java 2, JDK 5 Edition, Wiley Publishing, 2005Chapters 24 and 25 (starts on p.1306)

• Advanced Java 2 Platform: How to Program Deitel & Deitel, Prentice-Hall, 2001Chapter 8

http://java.coe.psu.ac.th/ForMember/

Continued

Page 47: 242-301 Adv. CoE Lab: JDBC 1 Advanced Computer Engineering Lab Objective – –to give some background on JDBC to help with the lab exercises 242-301, Semester

242-301 Adv. CoE Lab: JDBC 47

• JDBC Wikipaedia page:• http://en.wikipedia.org/wiki/JDBC_driver

• The Java Documentation and tutorial– http://docs.oracle.com/javase/tutorial/

– the JDBC Database Access ‘trail’ is very good– http://docs.oracle.com/javase/tutorial/ jdbc/index.html