Avatar billede bagnavnet Nybegynder
13. december 2004 - 15:14 Der er 16 kommentarer og
1 løsning

Hente én værdi fra DB

Hej, jeg har problemer med at hente en værdi op fra min DB (Oracle).
Forsøger mig med følgende kodestykke:
---------------------------
public Integer getNextOrderNr() throws SQLException, RemoteException {
   
    // TODO Auto-generated method stub
    Statement stmt = conn.createStatement();
    Integer i = stmt.executeQuery("select MAX(ordernr) from ORDRELISTE");
    return i;
------------------------
Jeg får denne fejl:
............
cannot cast from resultset to integer.
...............
(Jeg kører programmet som rmi)

Jeg har lidt svært ved at overskue hvad jeg gør forkert?
Avatar billede mikkelbm Nybegynder
13. december 2004 - 15:18 #1
Integer i = stmt.executeQuery("select MAX(ordernr) from ORDRELISTE");

ResultSet set = stmt.executeQuery("select MAX(ordernr) from ORDRELISTE");
Avatar billede mikkelbm Nybegynder
13. december 2004 - 15:19 #2
Og jeg plejer at gøre følgende:

ResultSet set = stmt.executeQuery("select MAX(ordernr) AS MAKS from ORDRELISTE");

int i = set.getInt("MAKS");
Avatar billede mikkelbm Nybegynder
13. december 2004 - 15:20 #3
Problemet i din kode ligger i at executeQuery returnerer et ResultSet - og det kan ikke castes til en Integer.
Avatar billede bagnavnet Nybegynder
13. december 2004 - 16:33 #4
hvis jeg bruger denne:
-------
ResultSet set = stmt.executeQuery("select MAX(ordernr) AS MAKS from ORDRELISTE");

int i = set.getInt("MAKS");
-----------------
hvad er "MAKS" så? Jeg skal bruge værdien da den senere skal smides tilbage ned i databasen. Jeg får en fejl i min kode når jeg forsøger fra klienten at benytte d.getNextOrderNr.
Avatar billede mikkelbm Nybegynder
13. december 2004 - 16:38 #5
MAKS er det alias jeg har givet højeste ordrenummer.

Du bliver nødt til at skrive hvad fejl du får, for at vi kan hjælpe :)
Avatar billede bagnavnet Nybegynder
13. december 2004 - 16:43 #6
Jeg får denne fejl:
-----------
her er ordren:  [Mel: 10.0 kr., Mel: 10.0 kr.]
java.lang.AbstractMethodError: DbServerImpl_Stub.getNextOrderNr()I
    at GUI.order(GUI.java:110)
    at GUI.access$2(GUI.java:103)
    at GUI$3.actionPerformed(GUI.java:86)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Avatar billede mikkelbm Nybegynder
13. december 2004 - 16:45 #7
Jeg ved ikke om det er fejlen, men har du husket at compile dine rmi-klasser med rmi-compileren efter du har ændret i dem?
Avatar billede mikkelbm Nybegynder
13. december 2004 - 16:53 #8
Og hvad sker der i din GUI-klasse omkring linje 110 ?
Avatar billede bagnavnet Nybegynder
13. december 2004 - 16:59 #9
jeg har compilet mine klasser og ligeledes kørt rmic efterfølgende. Her er linie 110 metoden:
---------------
private void order() {

        System.out.println("her er ordren:  " + buyModel);
       
        Enumeration varer = buyModel.elements();
        //int ordernr = 10000020;
        try {
        int ordernr = d.getNextOrderNr();
        while (varer.hasMoreElements()) {
            Vare vare = (Vare) varer.nextElement();
            d.indsaetOrdreliste(new Integer(ordernr), new Integer(vare.vare_id),  "123");
            System.out.println("Ordrelisten: " + ordernr+"  ID: "+vare.vare_id);
           
        }
        } catch (Exception e) {
            System.err.println("argh: "+e.getMessage());
            e.printStackTrace();
            System.exit(0);
        }
}
Avatar billede bagnavnet Nybegynder
13. december 2004 - 17:02 #10
hvis jeg kører den med fast ordernr så virker det. Det er kun når jeg forsøger at hente d.getNextOrderNr den fejler. Jeg har andre metoder i GUI klassen der har samspil med DB.
Avatar billede mikkelbm Nybegynder
13. december 2004 - 17:11 #11
Jeg må melde pas til den sidste fejl. Hvis du siger at den kan køre din d.indsaetOrdrelist(...) men ikke getNextOrderNr(), så ved jeg desværre ikke hvad der er galt.
Avatar billede bagnavnet Nybegynder
13. december 2004 - 17:48 #12
Jeg har lige forsøgt at køre den igen fra dos promten og får denne fejl. Kan den bruges til noget? For mig virker det somom at det går galt idet at værdierne indsættes i selve DB??
-------------------
C:\j2sdk1.4.2\bin>java -classpath d:\oracle\ora90\jdbc\lib\classes12.zip;. GUI
her er ordren:  [Mel: 10.0 kr.]
argh: ORA-00904: ugyldigt kolonnenavn

java.sql.SQLException: ORA-00904: ugyldigt kolonnenavn

        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
        at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
        at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
        at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
        at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:
651)
        at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.jav
a:2117)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStateme
nt.java:2331)
        at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:
634)
        at DbServerImpl.getNextOrderNr(DbServerImpl.java:116)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
        at sun.rmi.transport.Transport$1.run(Transport.java:148)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:4
60)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport
.java:701)
        at java.lang.Thread.run(Thread.java:534)
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Stream
RemoteCall.java:247)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:
223)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133)
        at DbServerImpl_Stub.getNextOrderNr(Unknown Source)
        at GUI.order(GUI.java:110)
        at GUI.access$2(GUI.java:103)
        at GUI$3.actionPerformed(GUI.java:86)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:17
86)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Abstra
ctButton.java:1839)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258
)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:245)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483
)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

C:\j2sdk1.4.2\bin>
Avatar billede bagnavnet Nybegynder
13. december 2004 - 18:39 #13
NU får jeg denne fejl:
------------------
argh: ResultSet.next blev ikke kaldt
java.sql.SQLException: ResultSet.next blev ikke kaldt
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:285)
        at oracle.jdbc.driver.OracleStatement.prepare_for_new_get(OracleStatemen
t.java:2798)
        at oracle.jdbc.driver.OracleStatement.getIntValue(OracleStatement.java:3....osv osv
----------------
Hvad er det for en next der ikke bliver kaldt???

Hjælp
Avatar billede mikkelbm Nybegynder
13. december 2004 - 18:42 #14
Det er fordi du her:

ResultSet set = stmt.executeQuery("select MAX(ordernr) AS MAKS from ORDRELISTE");

// lige skal kalde den her
set.next();

int i = set.getInt("MAKS");


Så henter du nemlig de første værdier i resultset'et.
Avatar billede mikkelbm Nybegynder
13. december 2004 - 18:43 #15
En god ide er at spørge på next() :

ResultSet set = stmt.executeQuery("select MAX(ordernr) AS MAKS from ORDRELISTE");

if (set.next())
  int i = set.getInt("MAKS");


For så får du ikke fejl, hvis resultset'et ikke indeholder nogle data.
Avatar billede bagnavnet Nybegynder
13. december 2004 - 19:31 #16
det er fremragende nu virker det sgu!!;-)
Tusind tak for hjælpen, smid et svar....
Avatar billede mikkelbm Nybegynder
13. december 2004 - 19:32 #17
Det var godt :)
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
Kategori
Kurser inden for grundlæggende programmering

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