Új hozzászólás Aktív témák

  • td

    senior tag

    Sziasztok!

    NetBeans/Java adatbáziskezelésben otthon van valaki közületek? Az IDE-hez adott Derby-t használnám az egyszerűség kedvéért, de - alapvetően két okból kifolyólag - nem boldogulok vele.

    Egyszerű csatlakozás és lekérdezés/adatmódosítás lenne a programban, konkrétan redelések rögzítése (ill. egy limitellenőrzés is).

    A DBConnect kapcsolódik az adb-hez, a másik kettő metódus egy-egy webszolgáltatást valósít meg. Ami nem megy, és mindig kivételt dob, az a két következő fajta hívás:

    rs.first()
    rs.getInt() / ill. rs.getString()

    Valami nagyon nem stimmel nálam ezzel a ResultSet objektummal... :F

    A másik gondot az SQL-utasítások okozzák. Arra már rájöttem, hogy valami oknál fogva nem elég a táblanevet megadni, hanem minősíteni kell a user nevével, amire létrehoztam még az IDE-ben, és idézőjelek közé kell írni. Tehát pl. Stock helyett "WHUSER"."Stock". Ezt onnan szedtem, hogyha a Databases alatt nyomok a táblán egy View Data-t, akkor a NetBeans is ilyen formában adja meg.

    Viszont ettől még a SELECT * FROM ... jellegű lekérdezéseknél bonyolultabbak nem mennek, ott is reklamál, itt például:

    int rows2 = stmt.executeUpdate("UPDATE \"WHUSER\".\"Orders\" SET OrderedByCustomer=" + orderedByCustomer + " WHERE ArticleID='" + articleID + "'");

    ...ez a gondja: org.apache.derby.client.am.SqlException: 'OrderedByCustomer' is not a column in table or VTI 'WHUSER.Orders'.

    A táblanév az már jól van hivatkozva, de a mezőnév nem tetszik neki, és a táblához hasonló hivatkozással sem megy (WHUSER.Orders.OrderedByCustomer, persze idézőjelekkel).
    Nem tudom, milyen SQL-t használ ez a rendszer, de elég fura dolgai vannak.

    Hálás lennék, ha valaki tudna ebben segíteni!

    (MOD: ja, és még egy dolog. Azért jó lenne, ha valami rs.next() jellegű lépegetést is meg tudnék oldani, mert egy JSP-ben meg az árucikkeket szereném kiválaszthatóvá tenni egy legördülő listával.)

    Idemásolom a kódot, vannak kommentek is. ;)

    package com.sun.customerorderhandler;

    import javax.ejb.Stateless;
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebService;

    import java.sql.*;
    import javax.xml.ws.WebServiceRef;


    @Stateless()
    @WebService()
    public class CustomerOrderHandler {

    @WebServiceRef(wsdlLocation = "http://localhost:8080/AmountPriceQueryService/AmountPriceQuery?wsdl")
    private com.sun.customerorderhandler.AmountPriceQueryService service;

    static long CUSTOMERLIMIT = 60000;

    public Connection DBConnect() throws java.sql.SQLException {

    return DriverManager.getConnection("jdbc:derby://localhost:1527/FurnitureWarehouse","whuser","whpass");

    }

    /**
    * Web service operation
    */
    @WebMethod
    public long checkCustomerLimit(@WebParam(name = "customerID") String customerID, @WebParam(name = "totalCost") long totalCost) {
    // TODO implement operation

    Connection conn;

    try {

    conn = DBConnect();

    Statement stmt = conn.createStatement();

    ResultSet rs = stmt.executeQuery("SELECT SUM(TotalCost) FROM Orders WHERE CustomerID=" + customerID + " AND Paid=0");

    rs.first();

    long owsTotal = rs.getInt(1); // egyetlen oszlop van

    conn.close();

    return (owsTotal + totalCost) - CUSTOMERLIMIT; // ha a limit fole megy, pozitiv lesz

    }
    catch (Exception e) {

    return 9999999; // mintha a limit fole ment volna

    }

    }

    /**
    * Web service operation
    */
    @WebMethod
    public long placeOrder(@WebParam(name = "articleID") String articleID, @WebParam(name = "quantity") int quantity, @WebParam(name = "customerID") String customerID) {
    // TODO implement operation

    Connection conn;

    try {

    conn = DBConnect();

    Statement stmt = conn.createStatement();

    ResultSet rs = stmt.executeQuery("SELECT * FROM Stock WHERE ArticleID=" + articleID);

    rs.first();

    int price = rs.getInt("Price");
    int orderedByCustomer = rs.getInt("OrderedByCustomer");

    long totalCost = quantity * price; // a rendeles teljes ara

    orderedByCustomer++; // vevok altal rendelt, kiszallitatlan mennyiseg

    long trackID = Math.round(Math.random()*1000000000); // 10.000.000

    int rows1 = stmt.executeUpdate("INSERT INTO Orders VALUES ('" + articleID + "', " + quantity + ", '" + customerID + "', " + totalCost + ", 0, 0, " + trackID + ")");

    int rows2 = stmt.executeUpdate("UPDATE Orders SET OrderedByCustomer=" + orderedByCustomer + " WHERE ArticleID='" + articleID + "')");

    conn.close();

    if (rows1 == 0) return 0; // ha nem tudta rogziteni a rendelest

    return trackID; // egyebkent a nyomonkovetesi azonosito visszaadasa

    }

    catch (Exception e) {

    return 0; // ha sikertelen volt a muvelet

    }

    }

    }

Új hozzászólás Aktív témák

Hirdetés