Avatar billede limes_planum Praktikant
13. februar 2013 - 08:38 Der er 22 kommentarer og
1 løsning

Weblogic/Derby - SQL Command line

Jeg har en bog om Java EE, der beskriver følgende omkring at oprette nogle tabeller i enten Weblogic interfacet eller eksternt i en shell jeg ikke ved hvor er?:

Creating tables in the Oracle database

We need to create database tables for database persistence. Create database tables
CATALOG, EDITION, SECTION, and ARTICLE with the following SQL script; the script
can be run from the SQL command line:
CREATE TABLE CATALOG (id INTEGER PRIMARY KEY NOT NULL,
journal VARCHAR(100));
CREATE TABLE EDITION (id INTEGER PRIMARY KEY NOT NULL,
edition VARCHAR(100));
CREATE TABLE SECTION (id VARCHAR(100) PRIMARY KEY NOT NULL,
sectionName VARCHAR(100));
CREATE TABLE ARTICLE(id INTEGER PRIMARY KEY NOT NULL,
title VARCHAR(100));

---

Altså; jeg ved ikke hvor denne 'SQL Command line' kan forefindes i hverken Eclipse (Hibernate), Weblogic interfacet eller eventuelt i en shell af en art der hører til de to foregående interfaces?
Avatar billede arne_v Ekspert
13. februar 2013 - 08:47 #1
CLI er database specifik.

Oracle har en PL/SQL og en mere GUI orienteret SQLPlus.

Derby har:

http://db.apache.org/derby/docs/10.9/tools/index.html
Avatar billede arne_v Ekspert
13. februar 2013 - 08:48 #2
Avatar billede limes_planum Praktikant
13. februar 2013 - 19:50 #3
Fandt frem til at åbne SQL-plus - men blev dog lidt forvirret omkring hvad brugernavn og pswword er da følgende rettelse af login til DB'en via Weblogic ikke virkede som login over i SQL-plus:

http://www.futufi.dk/JavaDia/DIV_Java/

- er der tale om to forskellige logins?
Avatar billede arne_v Ekspert
14. februar 2013 - 11:24 #4
Samme brugernavn/password burde virke.

Men normalt vil man vel logge paa PL/SQL eller SQLPLus med brugernavn system.
Avatar billede limes_planum Praktikant
16. februar 2013 - 11:03 #5
Ok har nu fiflet lidt med brn/psw under weblogic igen uden held.

Finder det lidt sort med PL/SQL - trods en del googling på emnet, har jeg ingen ide om hvor jeg skal finde miljøet til PL/SQL (er det under en terminal eller kan jeg finde et miljø ved Weblogic's admin console?)
Avatar billede arne_v Ekspert
16. februar 2013 - 11:41 #6
PL/SQL installeres med Oracle.
Avatar billede arne_v Ekspert
16. februar 2013 - 11:42 #7
Men hvorfor bruge saa meget tid paa det.

Det vil tage dig 5 minutter at lave et lille standalone Java program som laeser SQL saetninger fra en text fil og fyrer dem af mod databasen.

:-)
Avatar billede limes_planum Praktikant
16. februar 2013 - 20:28 #8
Hmmm ... er usikker på om jeg kan finde tutorials på lige netop den fremgangsmåde. Jeg fandt din build.xml/ant-forklaring i et tidligere spørgsmål ret god, så kan være du kan uddybe?

Bare så jeg i det mindste ikke lyder helt lost; så går jeg udfra at jeg i weblogic's admin consol kan styre navgivning, og har allerede navngivet en/min database via en data-source?

Det standalone java-program du så snakker om kan jeg vel kode i Eclipse på en sådan måde at den dykker ned i DB'en med login (brn/psw)? (er dog lidt puzzled omkring det med en textfil du snakker om - hvordan er dens funktion anderledes end en build.xml-fil, og kan/skal den afvikles fra Eclipse af?)

Men på syntax til det DB-dyk samt syntax til sql-kaldet, er jeg helt blank, så om du evt. kan komme med et funktionelt eksempel på ovenstående, som så selvf. har noget <pseudo-kode> på de steder hvor login'et udføres, ville det være helt perfekt - pft...
Avatar billede arne_v Ekspert
17. februar 2013 - 19:03 #9
Der er slet ingen ben i det.

Put alle dine CREATE TABLE statements i en fil (en per linie).

Og koer noget helt simpelt kode som:

    public static void load(String sqlfnm, String driver, String conurl, String un, String pw) throws ClassNotFoundException, SQLException, IOException {
        BufferedReader br = new BufferedReader(new FileReader(sqlfnm));
        Class.forName(driver);
        Connection con = DriverManager.getConnection(conurl,  un,  pw);
        Statement stmt = con.createStatement();
        String line;
        while((line = br.readLine()) != null) {
            stmt.executeUpdate(line);
        }
        con.close();
        br.close();
    }
Avatar billede limes_planum Praktikant
25. marts 2013 - 15:34 #10
[Kom omsider tilbage til det/den her problem/udfordring i min tidsplan...]

Så for at forstå struktur-grebet...

1) Har nu tilpasset din Eclipse-kode-del i en klasse, så den er parat til at conn-strenge mm. (altså; conurl,  un,  pw).

1A) Har dertil også klargjort en tekstfil (kaldet; sqlfnm.txt) der kan afvikle de create-table-statements jeg måtte finde nødvendige. Denne fil ligger nu i ProjektNavn/src/(default package) i Eclipse (... og går ud fra det her svarer lidt til at accesse en txt-stream med FileReader?).

2) Er så inde og se på WebLogic Servers; 'Administration Console' med standard-loginet; brn: 'Weblogic' og psw: 'welcome1'.

Herinde har jeg fundet frem til at der under; Settings for examplesServer/Services/JDBC, står:


In WebLogic Server, you configure database connectivity through data sources and multi data sources. A data source is an object bound to the JNDI tree that includes a pool of JDBC connections. Applications can look up a data source on the JNDI tree and then reserve a database connection from the data source. A multi data source is an abstraction around a group of data sources that provides load balancing and failover between data sources.

The following JDBC data sources have been explicitly targeted to this server:

(efterfulgt af)

'Customize this table' -> Data Sources (herunder 4 tabeller; examples-demo og 3 andre)

Er det så herunder at jeg kan create flere tables om jeg ønsker,  ved at (i Eclipse) tildele 'un'-varen : brugernavn/brn (weblogic) samt 'pw'-varen : password/psw?

Og til slut; Hvordan finder jeg ud af hvad 'conurl' er? (altså hvor examples-server, med dets tabeller ligger?)

NB! Ved godt, at jeg selvfølgelig herefter, selv skal oprette en server med nyt login med mere i Weblogic af egenstyringsmæssige - sikkerhedsmæssige årsager.
Avatar billede arne_v Ekspert
25. marts 2013 - 17:55 #11
WebLogic bruger en connection pool, fordi det er noedvendigt for hoej performance.

Din loader er ikke performance krtisk saa du kan godt undvaere connection pool og bruge DriverManager getConnection.

Du kan slaa JDBC connection URL syntax op i JDBC driverens dokumentation eller paa www.connectionstrings.com !
Avatar billede limes_planum Praktikant
26. marts 2013 - 08:08 #12
Ok - har læst lidt op connection pools ... holder mig fra det pt. i den her problemstilling.

Vil i stedet dykke ned i den Oracle XE installation jeg har. Derunder ligger PDF-dokumentation (kunne ikke rigtig finde ud af hvad jeg skulle vælge under connections.com, i forhold til hvad jeg havde installeret).

PDF-dokumentation skriver på side 37-38: http://docs.oracle.com/cd/E17781_01/appdev.112/e18805.pdf
- om 'Declaring Connection-Related Variables' og af dette er jeg kommet frem til:

import java.beans.Statement;
import java.sql.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class DB_start {

    /**
    * @param args
    */


          public static void load(String sqlfnm, String driver, String conurl, String un, String pw) throws ClassNotFoundException, SQLException, IOException {
                BufferedReader br = new BufferedReader(new FileReader(sqlfnm));
                Class.forName(driver);
                conurl = "jdbc:oracle:thin:@localhost:1521:XE";
                un = "hr";
                pw = "hr";
                Connection con = DriverManager.getConnection(conurl,  un,  pw);
                java.sql.Statement stmt = con.createStatement();
                String line;
                while((line = br.readLine()) != null) {
                    stmt.executeUpdate(line);
                }
                con.close();
                br.close();
            }
}

Har ikke mere tid her til morgen til at teste det, men giver det mening, at køre denne kode herover mod min statement-txtfil?
Avatar billede limes_planum Praktikant
26. marts 2013 - 16:59 #13
Har svært ved at styre/forstå driver, så har lavet følgende (misk-mask :-// ):

public class DB_start {

    /**
    * @param args
    * @throws IOException
    * @throws SQLException
    * @throws ClassNotFoundException
    */
    public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
String sqlfnm = "C:/Users/TD_DS_IS/workspace/ArneV_DB_dyk_01/src/sqlfnm4.txt";
String conurl = "jdbc:oracle:thin:@localhost:1521:XE";
String un = "hr";
String pw = "hr";
String driver =  "Class.forName(driver);";
          load(sqlfnm, driver, conurl,  un,  pw);
    }
    public static void load(String sqlfnm, String driver, String conurl, String un, String pw) throws ClassNotFoundException, SQLException, IOException {
        BufferedReader br = new BufferedReader(new FileReader(sqlfnm));
        Class.forName(driver);
     
        Connection con = DriverManager.getConnection(conurl,  un,  pw);
        java.sql.Statement stmt = con.createStatement();
        String line;
        while((line = br.readLine()) != null) {
            stmt.executeUpdate(line);
        }
        con.close();
        br.close();
    }

}

[Giver fejlmeddelelsen:  ]

Exception in thread "main" java.lang.ClassNotFoundException: Class/forName(driver);
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at DB_start.load(DB_start.java:29)
    at DB_start.main(DB_start.java:25)

[Så hvordan skal jeg forholde mig til 'driver'?]
Avatar billede arne_v Ekspert
27. marts 2013 - 00:17 #14
Proev:

String driver = "oracle.jdbc.OracleDriver";
Avatar billede limes_planum Praktikant
27. marts 2013 - 07:55 #15
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:XE
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at DB_start.load(DB_start.java:32)
    at DB_start.main(DB_start.java:25)


[Googlede/debuggede derefter end del på; "No suitable driver found for jdbc:oracle:thin:@localhost:1521:XE" uden held]
Avatar billede arne_v Ekspert
27. marts 2013 - 13:57 #16
Har du tilfoejet Oracle's jar file til classpath?
Avatar billede limes_planum Praktikant
27. marts 2013 - 18:16 #17
(Har i baghovedet at du hjalp mig til at gøre Eclipse aktiv, classpath-wise) ... Googlede 'Oracles jar file classpath' lidt >> Mener du den her fremgangsmåde: http://publib.boulder.ibm.com/infocenter/cmgmt/v8r3m0/index.jsp?topic=%2Fcom.ibm.cmgmtreadmefp.doc%2Fd99719.htm
?

- fik ikke den forklaring til at virke.

Prøvede så også: http://docs.oracle.com/cd/E17781_01/appdev.112/e18805.pdf
- på side 24.

Af det blev jeg nød til at se hvilken JDK version jeg havde her:
http://stackoverflow.com/questions/4681090/how-to-find-where-is-jdk-installed-on-my-windows-machine

- hvilket jeg ikke kunne får til at virke ->> men gættede på at jeg havde JDK6, og smed:

C:/oracle/jdbc/lib/ojdbc5.jar;
C:/oracle/jlib/ora18n.jar

- under brugervariabler.

-> men får dog stadig fejlmedd:
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:XE
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at DB_start.load(DB_start.java:32)
    at DB_start.main(DB_start.java:25)
Avatar billede arne_v Ekspert
27. marts 2013 - 18:27 #18
ojdbc5.jar lyder rigtig.

Den skal nok tilfoejes til classpath inde i din IDE.
Avatar billede limes_planum Praktikant
28. marts 2013 - 08:01 #19
Kan de ligge begge steder? Hvad sker der hvis man har ubrugte miljø-var i System, avanceret i Windows?

(kan nemlig ikke få det til at virke :-/ ...

- lader det nok ligge en uge, hvorefter jeg sikkert prøver lidt tube-tuts igennem ->> hvis det til den tid viser sig at jeg er heldig og dine anvisninger har hjulpet x procent - får du x procent af 200 point :-) ... værdsætter i hvert fald altid din vedholdenhed, og ville nogle gange håbe min karriere havde indeholdt nogle/lidt flere betalte Java-kurser, så jeg havde en bedre struktur-forståelse af eksempelvis Eclipse..)

Mit allersidste forsøg i denne omgang hed en googling af; "eclipse classpath" oracle XE jdbc
- der ikke gav noget brugbart resultat.
Avatar billede arne_v Ekspert
01. april 2013 - 21:14 #20
Den gamle CLASSPATH emv variabel kan ikke bruges til noget.

I Eclipse skal den tilfoejes tiL Eclipse's classpath.

I WebLogic skal den anbringes i enten web app eller server lib.
Avatar billede limes_planum Praktikant
14. april 2013 - 00:52 #21
Fandt en ret god serie på Youtube, der kombinerer brugen af JDBC, PostgresSQL og Eclipse. Har således opnået at kommunikere med en lokal (ikke-MySQL) java-database, hvilket var målet og er nu kommet til 3. tut. i serien.
(...vil gerne linke til den men kan ikke lige overskue om det er imod forum-regler?)

Dine indlæg (specifikt nr. 1,2,9,11 og 16 (til dels også 18 og 20)) alle hjalp mig til at blive sporet ind på, hvad jeg skulle samt ikke skulle gøre, og/eller stemte helt over ens med nogle af de ting youtube-seriens instruktør gør.
Derfor synes jeg det vil være passende at tildele 70 point. Skriv et svar :-)
Avatar billede arne_v Ekspert
14. april 2013 - 02:42 #22
svar
Avatar billede limes_planum Praktikant
14. april 2013 - 11:37 #23
ok, pointdeling ser ud til at være afskaffet ... men så længe du fik point :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester