jdbc j ava d ata b ase c onnecti vity n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
JDBC = J ava D ata B ase C onnecti vity PowerPoint Presentation
Download Presentation
JDBC = J ava D ata B ase C onnecti vity

Loading in 2 Seconds...

play fullscreen
1 / 27

JDBC = J ava D ata B ase C onnecti vity - PowerPoint PPT Presentation


  • 135 Views
  • Uploaded on

JDBC = J ava D ata B ase C onnecti vity. Java neobsahuje žádné databáze - jen prostředky pro spojení s těmi, které splňují specifikaci JDBC. Ta má verze ( 1.0 ... 4 .0 pro Java SE 1.6 ) pro stále důmyslnější operace.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'JDBC = J ava D ata B ase C onnecti vity' - dora-nunez


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
jdbc j ava d ata b ase c onnecti vity
JDBC = Java Data Base Connectivity

Java neobsahuje žádné databáze - jen prostředky pro spojení stěmi,

které splňují specifikaci JDBC. Ta má verze ( 1.0 ...4.0 pro Java SE 1.6 )

pro stále důmyslnější operace.

Databázíse rozumí jednak vlastní data s jejich strukturou a jednak řídící

software pro ukládání, vyhledávání a údržbu dat – tzv. DBMS ( Data Base

Management System ). DBMS jsou velmi rozsáhlé softwarové systémy

produkované specializovanými výrobci - např.: MySQL, Derby, Oracle,

PointBase, Cloudscape, Sybase, IBM DB2... - jsou svolné ( compliant )

s normou JDBC některé verze – jejich vylepšování pokračuje.

Soudobé DB jsou vesměs relační, ovládané standardním jazykem SQL

( Structured Query Language ) - ten využívají javské aplikace pro styk s DB.

Výrobci dodávají ke svým DBMS drivery – tj.software splňující alespoň

ANSI SQL-92 pro přístup DB z javských programů.

Drivery lze vesměs zdarma stáhnout z Internetu - viz www.mysql.com ,

www.oracle.com atp. anebo jsou přikloženy např. k Netbeans s Derby.

PJV13

slide2
JDBC

JDBC umí pracovat nejen s SQL3 a SQLJ, ale i se soubory obsahujícími

tabulková data. JDBC překonává funkcionalitu MS UDA ( zahrnující OLE

DB, ADO, RDS a ODBC ).

Podporuje dvou- i třívrstvé modely přístupu k DB.

Pro JDBC 3.0 jsou relevantní balíčky java.sql a javax.sql

J2SE 1.5 přidala balíčky javax.sql.rowset, ~.serial, ~.spi

J2SE 1.6 přidala interfejsy pro JDBC 4.0

PJV13

slide3
JDBC

Pro navázání spojení jsou třeba tyto informace:

  • class name JDBC driveru
  • URL určující datatabázi
    • jdbc:subprotocol: [//hostname:port/] subname
    • jdbc:namingService:DataSourceName [;attrName=attrValue]*
  • user name
  • password

Tyto hodnoty lze získat ze:

  • souboru property:

Properties p=new Properties(); p.load(...); String s=p.getProperty(...);

  • příkazové řádky
  • -Dname=value ... a v metodě: String s=System.getProperty(“name”);
  • JDBC driverů dle pořadí pomocí -Djdbc.drivers=... : ...

třída DriverManager natáhne udané drivery při své inicializaci

  • GUI

PJV13

typy d river
Typy driverů

Driver category

Java pure are preferred

JDBC-NET

JDBC Middleware

( Connector )

Java application

using JDBC API

URL

Native

Protocol

URL

JDBC

driver manager

URL

Native API

based

proprietary DB protocols

( Direct )

library

URL

JDBC-ODBC

bridge

ODBC

PJV13

kategorie driver
Kategorie driverů

Preferované a Java-pure:

  • JDBC-NET – Komunikuje s mezivrstvou vhodným síťovým

protokolem.

  • Native protocol – Překládá JDBC volání přímo do síťového protokolu

DBMS, což umožňuje klientovi přímé volání DB.

Pro dočasná řešení:

  • Native API based – Nástavba na klientské knihovně, překládá JDBC

volání do volání té knihovny.

  • JDBC-ODBC Bridge – Připouští ODBC drivery jako JDBC drivery.

Urychluje. Musí být instalován na každém klientovi.

Nerobustní.

PJV13

slide6
Flow

DriverManager

Driver

Driver

Connection

Connection

Connection

Statement

Statement

DatabaseMetaData

Statement

ResultSet

ResultSet

ResultSet

PJV13

slide7

java.sql

Driver

Driver

Manager

Connection

Wrapper

ResultSet

Statement

javax.sql

javax.sql.rowset

Driver

PropertyInfo

RowSet

JdbcRowSet

PreparedStatement

javax.sql.rowset.spi

Types

SyncResolver

CallableStatement

javax.sql.rowset

javax.sql.rowset

CachedRowSet

Joinable

ParamaterMetaData

javax.sql.rowset

WebRowSet

DatabaseMetaData

FilteredRowSet

ResultSetMetaData

JoinRowSet

javax.sql.rowset

javax.sql

RowSetMeta

DataImpl

SavePoint

RowSetMetaData

PJV13

java sql

java.lang

java.util

java.sql

Date

Exception

JDBC 2.0

Implementace viz javax.sql.rowset.serial

SQL

Warning

Date

SQL

Exception

Ref

SQLData

Time

SQLOutput

Array

Data

Truncation

SQLInput

Blob

Timestamp

Clob

Struct

BatchUpdate

Exception

JDBC 4.0

java.security

Permission

Serial

Exception

RowId

NClob

java.security

SQLXML

Basic

Permission

SyncFactory

Exception

enum

SyncProvider

Exception

SQLPermission

ClienInfo

Status

RowId

Lifetime

PJV13

java sql1
java.sql

CommonDataSource

RowSetInternal

PooledConnection

java.util

EventObject

ConnectionPool

DataSource

RowSetReader

XAConnection

XADataSource

Connection

Event

javax.sql.rowset.spi

XMLReader

DataSource

RowSet

Event

RowSetWriter

firemní

Derby

javax.sql.rowset.spi

EventListener

Client

DataSource

XMLWriter

javax.sql.rowset.spi

TransactionalWriter

Mysql

DataSource

Connection

EventListener

RowSetListener

Oracle

DataSource

PJV13

t da drivermanager
Třída DriverManager

Nemá dostupný konstruktor, všechny metody jsou statické.

Při své inicializaci se snaží natáhnout třídy zadané property jdbc.drivers=

a pak kdykoli dynamicky - např.:

Class.forName("oracle.jdbc.driver.OracleDriver");

Driver drv = new oracle.jdbc.driver.OracleDriver( );

jdbc.drivers = oracle.jdbc.driver.OracleDriver : abc.xzy.Driver

Property se definuje pomocí –D option nebo v souboru.

Při volání getConnection( ... ) hledá vhodný driver pro požadované

připojení k DB.

Důležité metody:

  • Connection getConnection( String url, String user, String password )
  • Enumeration getDrivers( ) – pro výčet zaregistrovaných driverů
  • Driver getDriver( String url ) – pro přístup k driveru
  • void registerDriver( Driver driver ) - registrace
  • void deregisterDriver( Driver driver ) - uvolnění
  • void setLoginTimeout( int seconds ) – nastavení vyčkávacího času

PJV13

interfejs driver
Interfejs Driver

Má tyto metody:

boolean acceptsURL( String url ) – předběžný test zda je spojení možné

boolean jdbcCompliant( ) – test na svolnost

DriverPropertyInfo[]getPropertyInfo(String url, Properties info)

Connection connect( String url, Properties info ) – pokus o připojení -

vrací null je-li driver nevhodný pro uvedené url.

String getDatabaseProductName( )

int getMajorVersion( ) - vrací >= 1

int getMinorVersion( ) - vrací >= 0

PJV13

interfejs connection
Interfejs Connection

Připojení k DB provádějí přetížené metodygetConnection( String url, ... ),

třídy DriverManager která volají metodu connect( ... ) interfejsu Driver.

Odpoví-li kladně, DriverManager vytvoří spojení, jinak vrátí null a vyzkouší

se další driver.

Nepodaří-li sespojení navázat dojde k SQLException.

Drivery se probírají nejdříve podleseznamu property a pak ty v paměti již

natažené.

PJV13

interfejs connection1
Interfejs Connection

Statement createStatement( ... )

PreparedStatement prepareStatement( ... )

CallableStatement prepareCall( ... )

DatabaseMetaData getMetaData( )

String getCatalog( )

SQLWarning getWarnings( )

int getTransactionIsolation( )

void commit( )

void rollback( )

void close( ) - promptní uvolnění objektu

PJV13

interfejs statement
Interfejs Statement

ResultSet executeQuery( String sql )

int executeUpdate( String sql, ... )– přetížené metod

boolean execute( String sql, ... ) – přetížené metody

int[ ] executeBatch( )

void close( ) - promptní uvolnění objektu a i případného ResultSet

void addBatch( String sql )

void clearBatch( )

SQLWarnings getWarnings( )

void clearWarning( )

getry-setry pro:

  • FetchSize
  • FetchDirection
  • MaxRows
  • MaxFieldSize
  • QueryTimeout

PJV13

interfejs resultset
Interfejs ResultSet

boolean next( ), previous( ), first( ), last( ) – pro kursor

boolean absolute( int row ), relative( int rows )

void beforeFirst( ), afterLast( ), moveToCurrentRow( ), moveToInsertRow( )

boolean isFirst( ), isLast( ), isBeforeFirst( ), isAfterLast( )

void deleteRow( ), insertRow( ), updateRow( ), refreshRow( ),

cancelRowUpdates( )

boolean rowDeleted( ), rowInserted( ), rowUpdated( )

xxx getXXX( int colIndex ) / getXXX( String colName )

pro primitivy i objekty

void updateXXX( int colIndex, ... ) /updateXXX( String colName, ... )

ResultSetMetaData getResultSetMetaData( )

int getConcurrency( )

void close( ) - promptní uvolnění objektu ( odlišně pro Blob, Clob, NClob)

PJV13

interfejs resultset metadata
Interfejs ResultSetMetaData

int getColumnCount( )

int getColumnType( int col ), getColumnDisplaySize( int col ),

getScale( int col ),getPrecision( int col )

int isNullable( int col )

boolean isAutoIncrement( int col ), isCaseSensitive( int col ),

isSigned(int col ), isSearchable( int col ), isReadOnly( int col ),

isWritable( int col ), isDefinitelyWritable( int col ),

isCurrency( int col )

String getCatalogueName( int col ), getSchemaName( int col ),

getColumnName( int col ), getColumnClassName( int col ),

getColumnLabel( int col ), getColumnTypeName( int col ),

getTableName( int col )

PJV13

n kt e r p kazy sql
Některé příkazy SQL

DROP TABLE t1

CREATE TABLE t2 ( s1 CHAR(15 ), s2 INT );

INSERT INTO t2 VALUES ('abcd', 333 );

DELETE FROM t2 [WHERE s2 != 50 ] ;

SELECT s2, s1, ... FROM t2[WHERE s2 > 123 ][ ORDER BY s1] ;

SELECT * FROM t2[WHERE s2 > 123 ] [ ORDER BY s1 ] ;

UPDATE t2 SET s2 = 666[WHERE s2 > 123 ] ;

Klauzule WHERE může obsahovat AND OR = != < <= > >=

[] – jsou metazávorky

PJV13

sql vs java typy
SQL vs. Java Typy
  • CHAR, VARCHAR, LONGVARCHAR - String
  • NUMERIC, DECIMAL – java.math.BigDecimal
  • BIT – boolean
  • TINYINT – byte
  • SMALLINT – short
  • INTEGER – integer
  • BIGINT – long
  • REAL – float
  • FLOAT, DOUBLE – double
  • BINARY, VARBINARY, LONGVARBINARY – byte[ ]
  • DATE – java.sql.Date
  • TIME – java.sql.Time
  • TIMESTAMP – java.sql.Timestamp

Ve verzi 2.0 jsou již zahrnuty SQL3 typy:

BLOB, CLOB, ARRAY a strukturované typy REF a objekt.

obsluhované metodami getXXX, setXXX a updateXXX.

PJV13

p klad pro derby mysql oracle
Příklad pro Derby / MySQL / Oracle

Před spuštěním je třeba zajistit cestu k driverům, tj.classpath musí vést

ke zkompilovaným třídám driverů, které bývají uloženy v adresářích

souborů typu jar či zip - viz firemní stránky.

  • derbyclient.jar v …\jdk1.6\db\lib\ či...\AppServer\derby\lib\
  • mysql-connector-java-3.1.8a.zip ( http://dev.mysql.com/downloads )
  • classes12.zip ( www.oracle.com/technology/software/index.html )

Class.forName( "org.apache.derby.jdbc.ClientDriver" );

Class.forName( "org.gjt.mm.mysql.Driver" );

Class.forName( "oracle.jdbc.driver.OracleDriver" );

String derby = "jdbc:derby://localhost:1527/samples" ,

mysql = "jdbc:mysql://localhost:3306/Z" ,

oracle = "jdbc:oracle:thin:@cs.felk.cvut.cz:1526:oracle" ;

Connection c1 = DriverManager.getConnection( derby, "app", "app" ),

c2 = DriverManager.getConnection( mysql, "root", "" ),

c3 = DriverManager.getConnection( oracle, "scott", "tiger" );

Statement stmt=c3.createStatement( );

PJV13

p klad pokra ov n
Příklad / pokračování

stmt.executeUpdate( "CREATE TABLE z1 ( ca char(10), cb char(10))");

stmt.executeUpdate( " INSERT INTO z1 ( ca, cb ) VALUES( 'key', 'val' ) ");

ResultSet rs = stmt.executeQuery( "SELECT * FROM z1" );

while( rs.next( ) ) {

System.out.println ( rs.getString( "ca" ) + " " + rs.getString( "cb" ));

}

PJV13

interfejs datasource
Interfejs DataSource

Od JDBC 2.0 se doporučuje místo DriverManageru užívat DataSource,

neb je portabilní s využitím JNDI ( Java Naming and Directory Interface )

import com.mysql.jdbc.jdbc2.optional.*;

import oracle.jdbc.pool.*;

import org.apache.derby.jdbc.*;

// port DB

MysqlDataSource ds1 = new MysqlDataSource( ); // 3306 MySQL

OracleDataSource ds2 =new OracleDataSource( ); // 1526 Oracle

ClientDataSourceds3 = newClientDataSource( );// 1527 Derby

ds3.setDataBaseName( ...);

ds3.setPortNumber( 1527 );

ds3.setUser( ... );

ds3.setPassword( ...);

Connection c = ds3.getConnection( );

PJV13

prepared a callable statement
Prepared a Callable Statement

PreparedStatement ps = con.prepareStatement(

" UPDATE employees SET salary =?WHERE id = ? ");

ps.setBigDecimal(1, 1538.00);

ps.setInt(2, 777 );

CallableStatement cs = conn.prepareCall( "{call getTestData(? , ?)}");

cs.registerOutParameter(1 ,java.sql.Types.TINYINT);

cs.registerOutParameter(2 ,java.sql.types.DECIMAL , 2);

cs.executeUpdate();

byte x = cs.getByte(1);

BigDecimal n = cs.getBigDecimal(2,2);

PJV13

apache derby v netbeans 5 5
Apache Derby v NetBeans 5.5

Je multiuser DB napsaná v Javě jednak embedded, jednak network, která

reflektuje JDBC 4.0, SQL-99, SQL-2003.

DB server musí být instalován např. na: C:\Sun\AppServer .

Ve složce projektu Libraries -> Add JAR/Folder připojit derbyclient.jar .

  • Start DB serveru:

Tools -> Java DB Database -> Start JavaDB Server

Output: Server is ready to accept connection on port 1527

  • Připojení DB:

Runtime: Databases -> jdbc:derby://…/... [...on ...] -> RIGHT BUTTON

Connect app app nebo public public

  • Vytvoření další DB:

Tools->Java DB Database ->Create JavaDB Database ... vyplnit

Connect user password

Podrobně: http://www.netbeans.org/kb/50/derby-demo.html

http://db.apache.org/derby/,http://wiki.netbeans.org/wiki/

PJV13

zalo en db
Založení DB
  • Start Derby Database Server
  • Create Z database using public public

- dále pro Windows:

  • C:\Sun\AppServer\derby>java

-cp lib\derbyclient.jar;lib\derbytools.jar org.apache.derby.tools.ij

ij version 10.1

  • ij> connect'jdbc:derby://localhost:1527/Z;user=public;password=public';
  • ij> run 'C:\...\Person.sql';

- dále pro Solaris:

  • /Sun/AppServer/derby>java

-cp lib/derbyclient.jar:lib/derbytools.jar org.apache.derby.tools.ij

ij version 10.1

  • ij> connect'jdbc:derby://localhost:1527/Z;user=public;password=public';
  • ij> run ‘/.../Person.sql';

PJV13

zalo en db z dky
Založení DB z řádky
  • Start the Derby Database Server
  • Create Z database using public public
  • Populate the databasein terminal window and type:
  • C:\Sun\AppServer\derby>java

-cp lib\derbyclient.jar;lib\derbytools.jar org.apache.derby.tools.ij

ij version 10.1

  • ij> connect'jdbc:derby://localhost:1527/Z;user=public;password=public';
  • ij> run 'C:\...\Person.sql';

-- Database name: Z --- obsah souboru Person.sql

DROP TABLE Person;

CREATE TABLE Person ( jmeno CHAR(15 ), tel INT );

INSERT INTO Person VALUES ( 'Dana', 3333 );

INSERT INTO Person VALUES ( 'Hana', 2222 );

INSERT INTO Person VALUES ( 'Jana', 1111 );

SELECT * FROM Person ORDER BY tel;

PJV13

zalo en db v netbeans 6 0
Založení DBv Netbeans 6.0
  • Tools -> Java DB Database -> Server
  • Windows -> Services
  • Tools -> Java DB Database -> CreateDatabase
  • Z public public somewhere OK
  • Services -> Databases -> jdcb:derby: … /Z Connect
  • Services -> Databases -> jdcb:derby: … /Z Execute Command
  • SQL Command:

-- Database name: Z

DROP TABLE Person;

CREATE TABLE Person ( jmeno CHAR(15 ), tel INT );

INSERT INTO Person VALUES ( 'Dana', 3333 );

INSERT INTO Person VALUES ( 'Hana', 2222 );

INSERT INTO Person VALUES ( 'Jana', 1111 );

SELECT * FROM Person ORDER BY tel;

  • Run SQL ( Ctrl+Shift+E ) ikona se zeleným trojúhelníkem

PJV13