Informācijas sistēmas uzbūves tipiska struktūra · Web viewstatic – elements, kurš pieder...

28
Java klases veidošana datu bāzē ar loadjava programmu Datu bāze Fails ar Java klases CMD vide loadjava programma

Transcript of Informācijas sistēmas uzbūves tipiska struktūra · Web viewstatic – elements, kurš pieder...

Java klases veidošana datu bāzē ar loadjava programmu

Datu bāzeFails ar Java klases definējumu

CMD vide

loadjava programma

Java klašu ielāde datu bāzē no ārējiem failiem1. Katras Java klases definējums (programmas teksts) tiek DB glabāts kā lietotāja shēmas objekts – Java source.

2. loadjava programma ielādē Java klases tekstu (avota (source) objekts) un veic programmas kompilāciju veidojot Java class objektu.

1. To make Java files available to the OracleJVM, you must load them into the Oracle database as schema objects. 2. Each Java class is stored as a schema object. 3. loadjava can invoke the JVM's Java compiler, which compiles source files into standard class files. 4. loadjava can set the values of options stored in a system database table. Among other things, these options affect the processing of Java source files.

2

Java klases ielāde datu bāzē no ārēja faila ar LOADJAVA komandu1. Java klases definējuma ierakstīšana F:\Java_piem\Sveiki.java failā.

public class Sveiki {public static void main (String[ ] args) { System.out.println ("Sveiki. Sāksim apgūt valodu Java."); } }

2. Java klases ielādēšana datu bāzē. Var veikt *.java vai *.class faila ielādi.

3. Run (no OS vides jāpalaiž):F:\oracle\product\10.2.0\db_2\BIN\loadjava.bat –u system/janis@dators:1521:BAZE –v –r –t F:\Java_piem\Sveiki.java

option -v enables verbose (izplūdis) mode;option -r compiles uploaded Java source files and resolves external references in the classes;option -t tells loadjava to connect to the database using the client-side JDBC Thin driver.

3

Iegūtā ielādes rezultāta apskate

Izvades formatēšana (SQL*Plus programmai):col OBJECT_NAME format a30;col OBJECT_TYPE format a15;

select OBJECT_NAME, OBJECT_TYPE, STATUSfrom USER_OBJECTSwhere CREATED >= TO_DATE('19-11-2012', 'DD-MM-YYYY');

OBJECT_NAME OBJECT_TYPE STATUS------------------------------ --------------- -------------------------------------------------CREATE$JAVA$LOB$TABLE TABLE VALIDSYS_C005523 INDEX VALIDSYS_LOB0000053075C00002$$ LOB VALIDJAVA$OPTIONS TABLE VALIDSveiki JAVA CLASS VALIDSveiki JAVA SOURCE VALID

4

DB vārdnīcas skata USER_OBJECTS kolonas

Column Datatype NULL Description

OWNER VARCHAR2(30) NOT NULL

Owner of the object

OBJECT_NAME VARCHAR2(30) NOT NULL

Name of the object

SUBOBJECT_NAME VARCHAR2(30) Name of the subobject (for example, partition)

OBJECT_ID NUMBER NOT NULL

Dictionary object number of the object

DATA_OBJECT_ID NUMBER Dictionary object number of the segment that contains the object

Note: OBJECT_ID and DATA_OBJECT_ID display data dictionary metadata. Do not confuse these numbers with the unique 16-byte object identifier (object ID) that the Oracle Database assigns to row objects in object tables in the system.

OBJECT_TYPE VARCHAR2(19) Type of the object (such as TABLE, INDEX)

CREATED DATE NOT NULL

Timestamp for the creation of the object

LAST_DDL_TIME DATE NOT NULL

Timestamp for the last modification of the object resulting from a DDL statement (including grants and revokes)

TIMESTAMP VARCHAR2(20) Timestamp for the specification of the object (character data)

STATUS VARCHAR2(7) Status of the object (VALID, INVALID, or N/A)

TEMPORARY VARCHAR2(1) Whether the object is temporary (the current session can see only data that it placed in this object itself)

GENERATED VARCHAR2(1) Was the name of this object system generated? (Y|N)

SECONDARY VARCHAR2(1) Whether this is a secondary object created by the ODCIIndexCreate method of the Oracle Data Cartridge (Y | N)

5

DB vārdnīcas skata DBA_JAVA_CLASSES kolonas

Column Datatype NULL Description

OWNER VARCHAR2(30) NOT NULL

Owner of the Java class

NAME VARCHAR2(4000)   Name of the Java class

MAJOR NUMBER   Major version number of the Java class, as defined in the JVM specification

MINOR NUMBER   Minor version number of the Java class, as defined in the JVM specification

KIND VARCHAR2(9)   Indicates whether the stored object is a Java class (CLASS) or a Java interface (INTERFACE)

ACCESSIBILITY VARCHAR2(6)   Accessibility of the Java class

IS_INNER VARCHAR2(3)   Indicates whether this Java class is an inner class (YES) or not (NO)

IS_ABSTRACT VARCHAR2(3)   Indicates whether this Java class is an abstract class (YES) or not (NO)

IS_FINAL VARCHAR2(3)   Indicates whether this Java class is a final class (YES) or not (NO)

IS_DEBUG VARCHAR2(3)   Indicates whether this Java class contains debug information (YES) or not (NO)

SOURCE VARCHAR2(4000)   Source designation of the Java class

SUPER VARCHAR2(4000)   Super class of this Java class

OUTER VARCHAR2(4000)   Outer class of this Java class if this Java class is an inner class

6

Datu vārdnīcas skata kolonu noskaidrošana

describe USER_OBJECTS;

Name Null? Type -------------------------------------------------------------------------- OBJECT_NAME VARCHAR2(128) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED DATE LAST_DDL_TIME DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1)

7

Java klases ielāde no faila izmantojot programmu paketi DBMS_JAVA

Ielādei var arī izmantot programmu paketi DBMS_JAVA.

begin dbms_java.loadjava(' … ');end;

call dbms_java.dropjava('...'); // SQL*Plus vidē

8

Java klases metodes izsaucošās PL/SQL funkcijas izveide un izmantošana

1. Java klase SveikiT : public class SveikiT { public static String Teksts () {return "Sveiki. Sāksim apgūt valodu Java.";}}

2. Java klases ielāde ar LOADJAVA komandu:F:\oracle\product\10.2.0\db_2\BIN\loadjava.bat –u system/janis@dators:1521:BAZE –v –r –t F:\Java_piem\SveikiT.java

3. Iegūto rezultātu apskate:select OBJECT_NAME, OBJECT_TYPE, STATUSfrom USER_OBJECTSwhere CREATED >= TO_DATE('19-11-2012', 'DD-MM-YYYY');

OBJECT_NAME OBJECT_TYPE STATUS------------------------------ --------------- ---------------------------SveikiT JAVA CLASS VALIDSveikiT JAVA SOURCE VALID

4. Java metodi izsaucošās PL/SQL funkcijas izveidošana:create or replace function SVEIKI_TEKSTS return varchar2 as language java name 'SveikiT.Teksts() return java.lang.String';

5. Iegūto rezultātu apskate:select OBJECT_NAME, OBJECT_TYPE, STATUSfrom USER_OBJECTSwhere CREATED >= TO_DATE('19-11-2012', 'DD-MM-YYYY');

OBJECT_NAME OBJECT_TYPE STATUS--------------------------------------------- ----------------------------------SVEIKI_TEKSTS FUNCTION VALIDSveikiT JAVA CLASS VALIDSveikiT JAVA SOURCE VALID

9

6. Datu bāzes un Java buferu inicializācija (SQL*Plus programma):SQL>set serveroutput ON;SQL>call DBMS_JAVA.SET_OUTPUT(2000);

7. Izsaucošās PL\SQL funkcijas aktivēšana ar call izsaukumu:SQL>variable mainigais_1 varchar2(40);SQL> call SVEIKI_TEKSTS() into :mainigais_1;SQL>print mainigais_1;

mainigais_1----------------------------------------------------Sveiki! Sāksim apgūt valodu Java.

8. Izsaucošās PL\SQL funkcijas aktivēšana izmantojot SELECT vaicājumu.

SQL>select SVEIKI_TEKSTS from DUAL;

SVEIKI_TEKSTS----------------------------------------------------Sveiki! Sāksim apgūt valodu Java..

!

10

Ielādētās klases izdzēšana no Datu bāzes ar komandu dropjava

Run (no OS vides jāpalaiž)dropjava -thin -u system/janis@DATORS:1521:BAZE F:\Java_piem\Sveiki.java

Metadatu apskate:

select OBJECT_NAME, OBJECT_TYPE, STATUSfrom USER_OBJECTSwhere CREATED >= TO_DATE('19-11-2012', 'DD-MM-YYYY');

OBJECT_NAME OBJECT_TYPE STATUS-----------------------------------------------------------------SVEIKI_TEKSTS FUNCTION VALID

11

Izmantotās simbolu koda tabulas noteikšana

variable m1 varchar2(50);call DBMS_JAVA.GET_COMPILER_OPTION(NULL, 'encoding') into :m1;print m1;

m1------------------------WINDOWS-1252

12

Java metožu un izsaucošo PL/SQL programmu parametru atbilstībaPiemērs „main” metodes parametru transformācijai

Java main() metodes parametrs String[] var tikt transformēts uz vairākiem CHAR vai VARCHAR2 parametriem.

Faila F:\Atbalss.java saturs:

public class Atbalss { public static void main (String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]); } }

loadjava -u java_liet/janis@DATORS:1521:BAZE –v –r -t F:\Atbalss.java

create or replace procedure ATBALSS ( s1 varchar2, s2 varchar2, s3 varchar2)as language JAVA name 'Atbalss.main(java.lang.String[])';

call ATBALSS('AAA', 'BBB', 'CCC');

Rezultāts:AAABBBCCC

13

1. With Java editor TextPad create file Sveiki.java.

public class Sveiki{public static void Teksts (String[ ] args) { System.out.println ("Sveiki. Sāksim apgūt valodu Java."); } }

2. Store file Sveiki.java in directory E:/Java_files.

3. In SQLDeveloper create Oracle directory JAVADIR (= E/Java_files).

create or replace directory JAVADIR as 'E:/Java_files';

4. Perform Load Java ...

14

5. Create PL/SQL function.

create or replace function SVEIKI return varchar2 as language java name 'Sveiki.main() return java.lang.String';

15

http://www.morganslibrary.org/reference/pkgs/dbms_java.html

dbms_java.loadjava(option IN VARCHAR2) AS LANGUAGE JAVA NAME 'oracle.aurora.server.tools.loadjava.LoadJavaMain.serverMain(java.lang.String)';exec sys.dbms_java.loadjava('-v -r rdbms/jlib/sqljtype.jar');

http://www.slideshare.net/groyce/13-java-in-oracle

call.sys.dbms_java.loadjava('-v –r –grant PUBLIC –synonym HelloWorld.java');

16

Datu ievade tabulā izmantojot Java klasi Firma un metodi FirmaInsert1. Tabulas izveidošanacreate table FIRMAS(F_NUM number Primary key,F_NOS varchar2(30),DIB_DAT varchar2(10));

2. Klases Firma koda ierakstīšana failā O:\Firma.javaimport java.sql.*;import java.io.*;import oracle.jdbc.*;public class Firma{ public static void FirmaInsert (int f_num, String f_nos, String dib_dat) throws SQLException {String sql = "insert into FIRMAS values (?,?,?)"; try {Connection conn = DriverManager.getConnection("jdbc:default:connection:"); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, f_num); pstmt.setString(2, f_nos); pstmt.setString(3, dib_dat); pstmt.executeUpdate(); pstmt.close(); } catch (SQLException e) {System.err.println(e.getMessage());} } }

3. Klases Firma koda ielāde datu bāzē (tiek izmantots CMD)Ielādes komanda:O:\oracle\product\10.1.0\Db_1\bin\loadjava -u system/janis@DATORS:1521:BAZE –v –r -t O:\Firma.java

static – elements, kurš pieder klasei, bet nepieder klases eksemplāriem.void – metodes, kura neatgriež nekādu vērtību, apzīmētājs.throws – ģenerē īpašās situācijas, kuras var izveidoties metodē.try – bloks, kurš piedalās īpašo situāciju pārtveršanā.catch – īpašās situācijas (ja tāda izveidojas blokā, kurš definēts ar throws) apstrāde.

17

4. Programmu paketes PAKETE_F ar PL/SQL procedūru FIRMA_INSERT, kura izsauc klases Firma metodi FirmaInsert, izveide create or replace package PAKETE_F as procedure FIRMA_INSERT (f_num number, f_nos varchar2, dib_dat varchar2);end PAKETE_F;

create or replace package body PAKETE_F as procedure FIRMA_INSERT(f_num number, f_nos varchar2, dib_dat varchar2) as language JAVA name 'Firma.FirmaInsert(int, java.lang.String, java.lang.String)';end PAKETE_F;

5. PL/sql procedūras FIRMA_INSERT izsaukšana

sql>call PAKETE_F.FIRMA_INSERT(1, 'AAA', '21-FEB-01');

6. Datu bāzes tabulas FIRMAS satura apskateselect * from FIRMAS; F_NUM F_NOS DIB_DAT--------------------------------------------------------------- 1 AAA 21-FEB-01

7. Metadatu apskateselect OBJECT_NAME, OBJECT_TYPE, STATUSfrom USER_OBJECTS;OBJECT_NAME OBJECT_TYPE STATUS-------------------------------------------------------------------------Firma JAVA CLASS VALIDFirma JAVA SOURCE VALIDPAKETE_F PACKAGE VALIDPAKETE_F PACKAGE BODY VALID

18

Datu izguve no tabulas FIRMAS izmantojot Java klasi Firma, metodes FirmaSelect un Izvade

1. Iepriekšējā klases definējuma nodzēšanaO:\oracle\product\10.1.0\Db_1\bin\dropjava -thin -u system/janis@DATORS:1521:BAZE O:\Firma.java

2. Klases Firma definējuma ierakstīšana failā FIRMAS.javaimport java.sql.*;import java.io.*;import oracle.jdbc.*;public class Firma{static void Izvade (ResultSet rset) throws SQLException { String buffer = ""; try { ResultSetMetaData meta = rset.getMetaData(); int cols = meta.getColumnCount(), rows = 0; for (int i = 1; i <= cols; i++) {int size = meta.getPrecision(i); String label = meta.getColumnLabel(i); if (label.length() > size) size = label.length(); while (label.length() < size) label += " "; buffer = buffer + label + " "; } buffer = buffer + "\n"; while (rset.next()) { rows++; for (int i = 1; i <= cols; i++) { int size = meta.getPrecision(i); String label = meta.getColumnLabel(i); String value = rset.getString(i); if (label.length() > size) size = label.length(); while (value.length() < size) value += " "; buffer = buffer + value + " "; } buffer = buffer + "\n"; } if (rows == 0) buffer = "No data found!\n"; System.out.println(buffer); } catch (SQLException e) {System.err.println(e.getMessage());} } public static void FirmaSelect (String f_nos) throws SQLException { String sql = "select A.F_NUM, A.F_NOS, A.DIB_DAT " + " from FIRMAS A" + " where A.F_NOS = ?"; try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, f_nos); ResultSet rset = pstmt.executeQuery(); Izvade(rset); rset.close(); pstmt.close(); } catch (SQLException e) {System.err.println(e.getMessage());} } }

19

3. Klases Firma ielāde datu bāzēO:\oracle\product\10.1.0\Db_1\bin\loadjava -u system/janis@DATORS:1521:BAZE –v –r -t O:\Firma.java

4. PL/SQL paketes un izsaucošās procedūras izveidošanacreate or replace package PAKETE_F as procedure FIRMA_INSERT (f_num number, f_nos varchar2, dib_dat varchar2); procedure Firma_SELECT (f_nos varchar2);end PAKETE_F;

create or replace package body PAKETE_F as procedure FIRMA_INSERT(f_num number, f_nos varchar2, dib_dat varchar2) as language JAVA name 'Firma.FirmaInsert(int, java.lang.String, java.lang.String)';

procedure FIRMA_SELECT (f_nos varchar2) as language JAVA name 'Firma.FirmaSelect(java.lang.String)';end PAKETE_F;

5. Metadatu izvade

col OBJECT_NAME format a30;col OBJECT_TYPE format a15;select OBJECT_NAME, OBJECT_TYPE, STATUSfrom USER_OBJECTS;OBJECT_NAME OBJECT_TYPE STATUS------------------------------------------------------------------------------Firma JAVA CLASS VALIDFirma JAVA SOURCE VALIDPAKETE_F PACKAGE VALIDPAKETE_F PACKAGE BODY VALIDFIRMAS TABLE VALID

6. Eksistējošo datu nodzēšana un jauno ievade datu bāzes tabulā FIRMAS

delete FIRMAS;insert into FIRMAS values(1, 'CCC', '21-07-1990');

7. Izsaucošās PL/SQL procedūras FIRMA_SELECT aktivizēšana

SQL> SET SERVEROUTPUT ONSQL> CALL dbms_java.set_output(2000);SQL> CALL PAKETE_F.FIRMA_SELECT('CCC');F_NUM F_NOS DIB_DAT 1 CCC 21-07-1990

20

21