sql Update vagy Insert

0 értékelés
93 megtekintés
Gergely1987 (40 pont) kérdezte Feb 7.

heyho! ismét egy kis sql problémám akadt... ellenőrizni akarom SQL-ből hogy az adott elem létezik-e, ha igen akkor update-ot hívok rá, ha nem létezik akkor insertálom mint új elemet a listába, fél napja ülök rajta, de neten se találtam hozzá megoldást... valami deliméteres dologról is olvastam amit nem értek itt az sql amit írtam: 

"IF EXISTS (SELECT * FROM wineStock WHERE name ="+"'"+wine.getName()+"') "+
        "begin "+
        "update wineStock set piece=piece+"+"'"+wine.getPiece()+"' "+
        "end "+
        "else"+
        "begin"+
        "else insert into wineStock (name,type,years,piece,price,shopID) values(?,?,?,?,?,?)"+
        "end";
ezt a hibaüzenetet kapom amikor futtatom a lekérdezést: java.sql.SQLSyntaxErrorException: Szintaktikai hiba: Encountered "IF" at line 1, column 1.
Gergely1987 (40 pont) szólt hozzá Feb 8.
jahm és JDBC kapcsolattal csinálom..

2 Válasz

0 értékelés
Gergely1987 (40 pont) válaszolta meg Feb 15.
Gergely1987 kiválasztva Feb 19.
 
Legjobb válasz

a megoldásom:

Controller:
List<Wine> wineDBStock = dbWineStock.checkIfExist(wine1);
            if (wineDBStock.isEmpty()) {
                dbWineStock.addNewWine(wine1);
            } else {
                dbWineStock.updateWine(wine1);
            }

DB:
 String sql = "select * from wineStock where name=" + "'" + wine.getName() + "' " + "and type=" + "'" + wine.getType() + "' " + "and years=" +
                "'" + wine.getYear() + "' " + " and price=" + wine.getPrice() +
                " and shopID=" + "'" + wine.getShopID() + "'";

public void addNewWine(Wine wine) {
        String sql = "insert into wineStock (name,type,years,piece,price,shopID) values(?,?,?,?,?,?)";

public void updateWine(Wine wine) {
        String sql = "update wineStock set piece=piece+" + Integer.parseInt(wine.getPiece()) + " where name=" + "'" + wine.getName() + "'"
                + " and type=" + "'" + wine.getType() + "'" + " and years=" + "'" + wine.getYear() + "'" + " and price=" + Integer.parseInt(wine.getPrice()) + " and shopID=" + "'" + wine.getShopID() + "'";

0 értékelés
balazs79 Szakértő (400 pont) válaszolta meg Feb 11.
balazs79 szerkesztett Feb 11.

Milyen adatbazist használsz? MySQL?
Pontosan, hogy néz ki a táblád és mit akarsz rajta végrehajtani.

Lehet tárolt eljárással, ami az adatbáziskezelő rendszer saját programnyelve vagy te írod meg.

A legegyszerűbb működő megoldás:

Végrehajtasz egy UPDATE utasítást, ha nem létezik az elem akkor nem csinál semmit.

Ezután futtathatod az insert-tet egy kicsit átalakítva.

INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;

Gergely1987 (40 pont) szólt hozzá Feb 12.
hali!
derby-n keresztül csináltam
én úgy csináltam meg végül, hogy lekérdeztem először, hogy létezik-e, és annak az eredményének a függvényében hívtam meg az update vagy insert utasítást.

  List<Wine> wineDBStock = dbWineStock.checkIfExist(wine1);
            if (wineDBStock.isEmpty()) {
                dbWineStock.addNewWine(wine1);
            } else {
                dbWineStock.updateWine(wine1);
            }

köszi!
Krisz Guru (1,960 pont) szólt hozzá Feb 12.
Kerlek ird ki a valaszt, hogy el lehessen fogadni. Koszi!
Gergely1987 (40 pont) szólt hozzá Feb 13.
Gergely1987 szerkesztett Feb 14.
a megoldásom:

Controller:
List<Wine> wineDBStock = dbWineStock.checkIfExist(wine1);
            if (wineDBStock.isEmpty()) {
                dbWineStock.addNewWine(wine1);
            } else {
                dbWineStock.updateWine(wine1);
            }

DB:
 String sql = "select * from wineStock where name=" + "'" + wine.getName() + "' " + "and type=" + "'" + wine.getType() + "' " + "and years=" +
                "'" + wine.getYear() + "' " + " and price=" + wine.getPrice() +
                " and shopID=" + "'" + wine.getShopID() + "'";

public void addNewWine(Wine wine) {
        String sql = "insert into wineStock (name,type,years,piece,price,shopID) values(?,?,?,?,?,?)";

public void updateWine(Wine wine) {
        String sql = "update wineStock set piece=piece+" + Integer.parseInt(wine.getPiece()) + " where name=" + "'" + wine.getName() + "'"
                + " and type=" + "'" + wine.getType() + "'" + " and years=" + "'" + wine.getYear() + "'" + " and price=" + Integer.parseInt(wine.getPrice()) + " and shopID=" + "'" + wine.getShopID() + "'";
...