Avatar billede zamiel Nybegynder
06. oktober 2007 - 19:04 Der er 4 kommentarer og
1 løsning

spørgsmål angående oracles brug af float i forhold til java

Jeg sidder og udvikler en applikation hvor at man skal trække en float ud af en oracle database. I den forbindelse får jeg følgende meddelelse..

Could not invoke method "product_SelectAll" on the object named "database" because: java.sql.SQLException: java.lang.NumberFormatException - '3,35'

Problemet ser ud til at være at oracle gemmer floats med komma mens java forventer punktum for at definere floating points.

Nu sidder jeg og udvikler i BEA weblogic hvor database kald foregår gennem en java kontrol klasse. Dette betyder at jeg ikke har mulighed for at manipulere dataen som bliver trukket ud af DB inden det præsenteres for bruger.

Ee der nogen som har en ide til hvor jeg kommer uden om dette problem?
Avatar billede arne_v Ekspert
06. oktober 2007 - 19:12 #1
Både Oracle og Java gemmer floats binært uden hverken komma eller punktum. Det er
kun relevant for tekst repræsentationer.

Hvordan ser den kode du har kontrol over ud ?
Avatar billede zamiel Nybegynder
06. oktober 2007 - 21:50 #2
Det skal siges at der ikke er problemer når jeg gemmer en værdi uden floating points, men så snart der er nogle så får jeg den tidligere nævnte fejl.

her er koden som JSP filen indeholder.

<netui:form action="OrderStepOne">
       
        <netui-data:callControl resultId="SelectAllProductsResult" controlId="database" method="product_SelectAll"></netui-data:callControl>
        <netui-data:repeater dataSource="{pageContext.SelectAllProductsResult}">
            <netui-data:repeaterHeader>
                <table class="tablebody" border="1"> </netui-data:repeaterHeader>
            <netui-data:repeaterItem>
                <tr>
                    <td>
                        id:<netui:label value="{container.item.id}" ></netui:label></td>
                    <td>
                        Code:<netui:label value="{container.item.product_code}" ></netui:label>
                       
                    </td>
                    <td>
                        Name:<netui:label value="{container.item.product_name}" ></netui:label>
                       
                    </td>
                    <td>
                        Price:<netui:label value="{container.item.price}" ></netui:label>
                       
                    </td>
                    <td>
                        Amount:<netui:textBox dataSource="{actionForm.quantity}" defaultValue="0"/></td>
                    <td>
                        Max:<netui:label value="{container.item.max}" ></netui:label></td>
                </tr>
            </netui-data:repeaterItem>
            <netui-data:repeaterFooter></table></netui-data:repeaterFooter>
        </netui-data:repeater>
       
        <netui:button value="OrderStepOne" type="submit"/>
        </netui:form>

SQL kaldet ser således ud:

/**
    * @jc:sql statement="SELECT id,product_code,product_name,max,sortvalue,price FROM products ORDER BY sortvalue ASC"
    */
    javax.sql.RowSet product_SelectAll();
Avatar billede Slettet bruger
07. oktober 2007 - 10:13 #3
Hvis du havde kunnet styre sessionen var det noget med

ALTER SESSION SET NLS_NUMERIC_CHARACTERS=",.";

for at få komma som decimalseparator og punktum som gruppe-separator ved tusind.

Men ellers må du konvertere data på vej ind og ud af databasen:

Ud  af databasen: trim(translate(TO_CHAR(...), ',.', '.,'))
Ind  i databasen: to_number(..., '9999999D9999', ' NLS_NUMERIC_CHARACTERS = '',.'''))
Avatar billede zamiel Nybegynder
08. oktober 2007 - 09:44 #4
@joern

Det virker :)

pointene er dine
Avatar billede Slettet bruger
08. oktober 2007 - 13:13 #5
Det var dejligt!
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
Computerworld tilbyder specialiserede kurser i database-management

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