JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu...

23
Java lietojuma programmu izmantošanas varianti 1. Java lietojumprogramma. SQL 2. Java lietojumprogramma izsauc DB servera PL/SQL programmu. Call 3. Java lietojumprogramma izsauc DB servera Java programmu. Call Lietojums (Java un JDBC) Datu bāzes sistēma Lietojums (Java un JDBC) Dati Datu bāzes sistēma Dat Lietojums (Java un JDBC) PL/SQL programma Datu bāzes sistēma Dat PL/SQL programma Java programm 1

Transcript of JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu...

Page 1: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

Java lietojuma programmu izmantošanas varianti

1. Java lietojumprogramma.

SQL

2. Java lietojumprogramma izsauc DB servera PL/SQL programmu.

Call

3. Java lietojumprogramma izsauc DB servera Java programmu.

Call

Lietojums (Java un JDBC)

Datu bāzes sistēma

Dati

Lietojums (Java un JDBC)

Datu bāzes sistēma

DatiPL/SQL programma

Lietojums (Java un JDBC) Datu bāzes sistēma

Dati

PL/SQL programma

Java programma

1

Page 2: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC draivera programmas glabāšanas vietas norāde

2

Page 3: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC draivera versijas pārbaude.OracleDataSource klases izmantošana savienojuma veidošanai

import java.sql.*; // Javas valodas JDBC bibliotēka.import oracle.jdbc.*; // Oracle DBS JDBC bibliotēka.import oracle.jdbc.pool.OracleDataSource;

class JDBCVersija{public static void main (String args[]) throws SQLException{// Datu avota objekta izveidošana. OracleDataSource datuAvots = new OracleDataSource();// Datu bāzes savienojuma informācijas ievade. datuAvots.setURL("jdbc:oracle:thin:system/janis@localhost:1521:BAZE");// Savienojuma objekta izveidošana. // Savienojuma izveidošanaar getConnection() metodi.Connection savienojums= datuAvots.getConnection();// Metadatu tipa (DatabaseMetaData) objekta izveidošana.// Metadatu iegūšana ar metodi getMetaData().DatabaseMetaData meta = savienojums.getMetaData();// Draivera versijas izvade no metadatu objekta.System.out.println("JDBC draivera versija: " + meta.getDriverVersion());}}

Visu pieejamo JDBC draiveru nosaukumu izvade

3

Page 4: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

import java.util.*;import java.io.*;import java.sql.*;

public class DriverManagerTool {public static String getLoadedDrivers() {// Draiveru (elementu) kopas izveidošana.java.util.Enumeration e = java.sql.DriverManager.getDrivers();// Simbolu rindas tipa bufera izveidošana XML dokumentam.StringBuffer sb = new StringBuffer("<?xml versija='1.0'>");// XML dokumenta saknes elementa sākuma iezīmes ievade buferī.sb.append("<pieejamie_draiveri>");// Cikls pa visiem draiveriem.while (e.hasMoreElements()) {Object driver = e.nextElement();// XML elementa ievade buferī.// <draiveris>draivera nosaukums</draiveris>appendXMLTag(sb, "draiveris", driver.toString());}// XML dokumenta saknes elementa beigas ievade buferī.sb.append("</pieejamie_draiveri>");// Bufera satura nodošana.return sb.toString();}

private static void appendXMLTag(StringBuffer buffer,String tagName, String value){// XML elementa sākuma iezīmes, vērtības un beigu iezīmes // ierakstīšana buferī.

buffer.append("<");buffer.append(tagName);buffer.append(">");buffer.append(value);buffer.append("</");buffer.append(tagName);buffer.append(">"); }

4

Page 5: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

// Draiveru nosaukumu izvade.public static void main(String[] args) throws Exception {try {// Draivera ielāde operatīvajā atmiņā.Class.forName("oracle.jdbc.driver.OracleDriver");// Ielādēto draiveru nosaukumu izvade XML dokumenta formā.System.out.println(getLoadedDrivers());}// Izņēmuma situāciju apstrāde.catch(Exception e) {e.printStackTrace();} }}

5

Page 6: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC interfeisa izmantošanas piemērs.OracleDataSource klases izmantošana savienojuma veidošanai

import java.sql.*;import oracle.jdbc.*;import oracle.jdbc.pool.OracleDataSource;

public class JDBCtests{public static void main (String args []) throws SQLException {String teksts = null;Connection savienojums = null;Statement komanda = null;OracleDataSource datuAvots = new OracleDataSource();// URL norādīšanaString url = "jdbc:oracle:thin:system/Janis1946@//localhost:1521/BAZE";datuAvots.setURL(url);// Savienojuma izveidošanasavienojums = datuAvots.getConnection();// Izpildāmās komandas objekta izveidošana.komanda = savienojums.createStatement();// Execute SQL statement and retrieve result sets.ResultSet rezultats = komanda.executeQuery ("select F_NOS from FIRMAS where F_NUM =1");// Rezultāta izvadewhile (rezultats.next()) {teksts = rezultats.getString("F_NOS");}System.out.println ("1. firmas nosaukums : " + teksts);// Objektu aizvēršanarezultats.close();komanda.close();savienojums.close(); } }

6

Page 7: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

Savienojuma izveidošana ar Oracle datu bāzes sistēmuKlases Class.forName izmantošana

import java.sql.*; public class SavienojumsArOracleDB {public static void main(String[] args) {try {// Programmas bloks ar pārbaudiConnection savienojums = null;// Datu bāzes Oracle11c JDBC draivera ielāde no paketes // oracle.jdbc.driver. Jābūt pieejai failam ojdbc6.jar no // F:\app\Janis\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar// Pieeja tiek norādīta izmantojot vides mainīgo (environmental variable // CLASSPATH).String driverName = "oracle.jdbc.driver.OracleDriver";Class.forName(driverName);// Savienojuma ar DBS izveidošana.String serveris = "localhost";String ports = "1521";String sid = "BAZE1";String url = "jdbc:oracle:thin:@" + serveris + ":" +ports + ":" + sid;String lietotajs = "system";String parole = "Janis1946";savienojums = DriverManager.getConnection(url, lietotajs, parole);System.out.println("Savienojums ar DB.");// Vaicājuma izveidošana un izpilde.// Datu bāzē ir tabula FIRMAS ar kolonām F_NUM un F_NOS.Statement vaicajums = savienojums.createStatement();ResultSet rezultats = vaicajums.executeQuery("select F_NOS from FIRMAS");rezultats.next();String s = rezultats.getString(1);System.out.println("Firmas nosaukums = " + s);vaicajums.close();savienojums.close(); }// Īpašās sistuācijas apstrāde.catch (Exception e) {System.out.println("Ir problema:" + e); } } }

7

Page 8: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

8

Page 9: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

Savienojuma izveidošana ar Oracle datu bāzes sistēmuMetodes registerDriver izmantošana

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;// Varēja arī rakstīt: import java.sql.*;

public class SavienojumsArOracleDB{public static void main(String[] args) {try {// Oracle JDBC draivera ielādeDriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());System.out.println("Oracle DBS draiveris noteikts.");// Savienojuma izveidošanaConnection savienojums= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:BAZE1", "system", "Janis1946");System.out.println("Savienojums ar DB.");// Vaicājuma realizēšanaStatement vaicajums =savienojums.createStatement();ResultSet rezultats = vaicajums.executeQuery("select F_NOS from FIRMAS");rezultats.next();String s = rezultats.getString(1);System.out.println("Firmas nosaukums = " + s);vaicajums.close();savienojums.close(); } catch (Exception e) {// Ir īpašā situācijaSystem.out.println("Ir problema:" + e); } } }

9

Page 10: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

Ja norādām nepareizu datu bāzes tabulas nosaukumu, piemēram, FIRMASS:

10

Page 11: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC izmantošanas testsimport java.sql.*;import oracle.jdbc.*;import oracle.jdbc.pool.OracleDataSource; // java.io – lai varētu nolasīt no // komandu rindasimport java.io.*;public class JDBCParbaude{public static void main(String args[ ]) throws SQLException, IOException {// Savienojuma informācijas pieprasīšanaSystem.out.println("Ievadiet savienojuma ar DB parametru vertibas!");String user;String password;String database;user = readEntry("lietotajs: ");int slash_index = user.indexOf('/');if (slash_index != -1) { password = user.substring(slash_index + 1); user = user.substring(0, slash_index); }elsepassword = readEntry("parole: ");database = readEntry("datubazes nosaukums: ");System.out.print("Savienojuma veidosana.");System.out.flush();System.out.println("Savienojums ...");// OracleDataSource atvēršana un savienojuma izveidošanaOracleDataSource ods = new OracleDataSource();ods.setURL("jdbc:oracle:thin:system/Janis1946@localhost:1521:BAZE1");ods.setUser(user);ods.setPassword(password);Connection conn = ods.getConnection();System.out.println("ir izveidots.");// Create a statementStatement stmt = conn.createStatement();ResultSet rset = stmt.executeQuery("select 'Nolasijums no DB ir veikts!' from dual");while (rset.next()) System.out.println(rset.getString(1));rset.close();stmt.close();conn.close();System.out.println("JDBC draiveris darbojas."); }// Rindas nolasīšana no standarta ievadespublic static String readEntry(String prompt) { try {StringBuffer buffer = new StringBuffer();System.out.print(prompt);System.out.flush(); // attīra buferiint c = System.in.read();while (c != '\n') {buffer.append((char) c); c = System.in.read(); }return buffer.toString().trim(); }catch(IOException e){return "Problēmas!"; } } }

11

Page 12: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC interfeisa izmantošanas piemērs

import java.sql.*;import oracle.jdbc.*;import oracle.jdbc.pool.OracleDataSource;public class JDBCtests{public static void main (String args []) throws SQLException {String teksts = null;Connection savienojums = null;Statement komanda = null;OracleDataSource datuAvots = new OracleDataSource();// URL norādīšanaString url = "jdbc:oracle:thin:system/Janis1946@//localhost:1521/BAZE1";datuAvots.setURL(url);// Savienojuma izveidošanasavienojums = datuAvots.getConnection();// Izpildāmās komandas norādekomanda = savienojums.createStatement();// Execute SQL statement and retrieve result setsResultSet rezultats = komanda.executeQuery ("select F_NOS from FIRMAS where F_NUM =1");// Rezultāta izvadewhile (rezultats.next()) {teksts = rezultats.getString("F_NOS");}System.out.println ("1. firmas nosaukums : " + teksts);// Objektu aizvēršanarezultats.close();komanda.close();savienojums.close(); } }

12

Page 13: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC interfeisa izmantošanas piemērs

import java.sql.*;import java.util.*;/*** This class provides three basic methods:* 1) how to create a connection for a given (url, username, password)* 2) how to create a connection for a given (url, databaseProperties)* 3) how to load a driver*/public class BasicConnectionManager {public static final String DATABASE_USER = "user";public static final String DATABASE_PASSWORD = "password";/*** Load the JDBC driver.* @param driverName the driver name.* @throws ClassNotFoundException Failed to load the driver.*/public static void loadDriver(String driverName)throws ClassNotFoundException {java.lang.Class.forName(driverName);}/*** Get the connection from a given (url, user, password).* @param url database URL.* @param username database user.* @param user's password.* @return Connection object.* @throws SQLException Failed to create a Connection object.*/public static Connection getConnection(String url, String username, String password)throws SQLException{return DriverManager.getConnection(url, username, password);}/*** Get the connection from a given (url, user, password).* @param url database URL.* @param dbProperties database properties (database username, password, and other attributes).* @return Connection object.* @throws SQLException Failed to create a Connection object.*/public static Connection getConnection(String url, Properties dbProperties)throws SQLException {return DriverManager.getConnection(url, dbProperties); } }

13

Page 14: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC interfeisa izmantošanas piemērs (turpinājums)import java.sql.*;import java.util.*;public class TestOracleConnectionManager {// Client program to create two connections.public static void main(String[] args) {try {// Oracle JDBC draivera ielāde (piesaiste)String driverName = "oracle.jdbc.driver.OracleDriver";BasicConnectionManager.loadDriver(driverName);}// Could not find the database driver; when you are here,// it means that your .jar file (which contains// the Driver class) has not been added to the CLASSPATH// properly; you have to fix this problem before you// can establish a connection to an Oracle database.catch (ClassNotFoundException e) {e.printStackTrace();}

Connection conn1 = null;Connection conn2 = null;String serverName = "localhost";String portNumber = "1521";String sid = "BAZE1";String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;String username = "system";String password = "Janis1946";try {// Step 2: Create a connection to the databaseconn1 = BasicConnectionManager.getConnection(url, username, password);System.out.println("conn1="+conn1);System.out.println("-----------------------");// Step 3: Create another connection to the databaseconn2 = BasicConnectionManager.getConnection(url, username, password);System.out.println("conn2="+conn2);System.out.println("-----------------------");}// Could not connect to the database. Either database server is down or one/more of// your parameters is/are not specified correctly.catch (SQLException e){System.out.println("Problema ar savienojumu!");}finally {System.out.println("Nestrada savienojumu aizversana!");//conn1.close();//conn2.close();//BasicConnectionManager.close(conn1);//BasicConnectionManager.close(conn2);}}}

public static void main (String[] args){try {...}catch (ClassNotFoundException e) {e.printStackTrace();}…try {…}catch (SQLException e) {e.printStackTrace();}finally { … } }

14

Page 15: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

JDBC savienojuma parametru vērtību nolase no faila

import java.sql.*;import java.util.*;import java.io.*;public class TestOracleConnectionManager {public static void main(String[] args) {// Parametru vērtību nolasīšana no failaProperties ipasibas = new Properties();try {FileInputStream in = new FileInputStream("datubaze.properties");// Parametru vērtību ielāde no failaipasibas.load(in);in.close();// Oracle JDBC draivera ielāde (piesaiste)// Draiveris - oracle.jdbc.driver.OracleDriverString draiveris = ipasibas.getProperty("jdbc.drivers");BasicConnectionManager.loadDriver(draiveris);String url = ipasibas.getProperty("jdbc.url");String username = ipasibas.getProperty("jdbc.username");String password = ipasibas.getProperty("jdbc.password");Connection conn1 = null;conn1 = BasicConnectionManager.getConnection(url, username, password);// conn1 = DriverManager.getConnection(url, username, password);System.out.println("conn1="+conn1);System.out.println("-----------------------");conn1.close();}catch (FileNotFoundException e){System.out.println("Nav faila!");}catch (IOException e){System.out.println("Nevar ieladet datus!");}catch (ClassNotFoundException e) {System.out.println("Nav draivera!");}catch (SQLException e){System.out.println("Problema ar savienojumu!");}}}

Fails datubaze.properties:

jdbc.drivers=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@localhost:1521:BAZEjdbc.username=systemjdbc.password=janis

15

Page 16: JDBC izmantošanas tests Web view · 2016-11-23Java lietojuma programmu izmantošanas varianti. 1. ... JDBC draivera programmas glabāšanas vietas norāde. ... JDBC int erfeisa izmantošanas

Oracle JDBC OCI (Oracle Call Interface) draivera izmantošana

1. You must use a JDBC OCI driver appropriate to your Oracle client installation. 2. The OCI driver works through SQL*Net. 3. The JDBC OCI drivers allow you to call the OCI directly from Java, thereby providing a high degree of compatibility with a specific version of Oracle. 4. Because they use native methods, they are platform specific.

import java.sql.*;class dbAccess {public static void main (String args []) throws Exception {Class.forName ("oracle.jdbc.OracleDriver");Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@BAZE", "system", "janis");// or oci7 @TNSNames_Entry, userid, passwordStatement stmt = conn.createStatement();ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION");while (rset.next())System.out.println (rset.getString(1)); // 1. kolonas izvade}}

16