Avatar billede shemeri Praktikant
02. maj 2003 - 23:03 Der er 42 kommentarer og
1 løsning

locking i mysql i jsp

hej,

  String AddLocks      = "LOCK TABLE Book READ";

  String Booking        = "INSERT INTO Book SET Booking_ID='"+WeekNr+Year+Customer_ID+"', Cottage_ID='"+CottageID+"', Cust_ID='"+Customer_ID+"', WeekNr='"+WeekNr+Year+"', DateOfBooking= CURDATE()";

    String RemovesLocks  = "UNLOCK TABLE";

    /* Add Lock to Book table */
    Connection2.MakeQuery(AddLocks);

    /*Make query using Bean */
    Connection.MakeQuery(Booking);

    /* Remove Lock to Book table */
    Connection2.MakeQuery(RemovesLocks);

jeg har proevet med "lock" men problemet er at den ik virker? Hvordan kan jeg ellers goer det ;)
Avatar billede disky Nybegynder
02. maj 2003 - 23:07 #1
hvad sker der når du prøver ?

p.s. Man plejer at give metoder navne lille startbogstav.
Avatar billede shemeri Praktikant
02. maj 2003 - 23:10 #2
der sker ingenting, men jeg bliver ved med at vente og der sker ingenting..
Avatar billede disky Nybegynder
02. maj 2003 - 23:14 #3
Så der bliver slet ikke smidt noget i din tabel ?

Hvad hvis du ikke kalder de lock/unlock queries ?

Er du sikker på du har en forbindelse til basen ?
Avatar billede shemeri Praktikant
02. maj 2003 - 23:16 #4
der bliver slet ik smidt noget i tabellen men lige snart jeg ik kalder de lock/unlock queries, sa virker det fint og tabellen bliver opdateret med de nye vaedier... sa jeg ved at der noget med lock/unlock queries.
Avatar billede arne_v Ekspert
02. maj 2003 - 23:22 #5
Hedder det ikke LOCK TABLES og UNLOCK TABLES (altså med S til sidste) ?
Avatar billede shemeri Praktikant
02. maj 2003 - 23:23 #6
det har jeg ogsa proevet ;)
Avatar billede disky Nybegynder
02. maj 2003 - 23:23 #7
som arne hentyder, mangler du et 's' kig på
http://www.mysql.com/doc/en/LOCK_TABLES.html

Hvor syntaxen er beskrevet.
Avatar billede arne_v Ekspert
02. maj 2003 - 23:26 #8
Det virker heller ikke med S.

:-(

Næste spørgsmål: hvad er problemet egentligt ?

"der bliver slet ik smidt noget i tabellen men lige snart jeg ik kalder de lock/unlock queries, sa virker det fint og tabellen bliver opdateret med de nye vaedier..."

Når du laver LOCK READ så kan du ikke lave INSERT !
Avatar billede arne_v Ekspert
02. maj 2003 - 23:27 #9
Fra MySQL docs (min gamle  version):

If a thread obtains a READ lock on a table, that thread (and all other threads) can only read from the table.
Avatar billede shemeri Praktikant
02. maj 2003 - 23:27 #10
Disky, jeg har proevet med LOCK TABLES, men stadig har problemer... :(
Avatar billede arne_v Ekspert
02. maj 2003 - 23:29 #11
Så umiddelbart er det vel dokumenteret opførsel at du ikke kAN ISNERT med LOCK READ
men godt uden.

Eller har jeg misforstået dig ?
Avatar billede disky Nybegynder
02. maj 2003 - 23:32 #12
ret
String AddLocks      = "LOCK TABLE Book READ";

til
String AddLocks      = "LOCK TABLES Book WRITE";
Avatar billede shemeri Praktikant
02. maj 2003 - 23:32 #13
Hvad sa hvis jeg har en LOCK WRITE? Altsa det virker heller ik.
Det jeg vil have er, at ingen kan opdatere tabellen mens den er i brug (INSERT), er der andre muligheder man kan goer det paa?
Avatar billede arne_v Ekspert
02. maj 2003 - 23:34 #14
LOCK TABLES Book WRITE

bør tillade din INSERT statement.

If a thread obtains a WRITE lock on a table, then only the thread holding the lock can READ from or WRITE to the table. Other threads are blocked.
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 23:35 #15
Hvilken version af mysql bruger du, hvor kører din server (webhotel, hos
dig selv), og hvilke rettigheder har du - hvis du ellers ved det?
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 23:36 #16
Og: fanger du selv dine exceptions for SQL, så du kan se hvad der går galt?
Avatar billede shemeri Praktikant
02. maj 2003 - 23:36 #17
arne_v: ja det forstaar jeg, men den virker stadig ik selvom jeg har en WRITE lock :(
Jeg har Mysql v. 3.23.49
Avatar billede arne_v Ekspert
02. maj 2003 - 23:38 #18
Hvilken SQLException får du på hvilken SQL sætning ?
Avatar billede shemeri Praktikant
02. maj 2003 - 23:39 #19
erikjacobsen: jeg har den paa min egen computer...altsaa, ik pa nettet.
Ja, jeg fanger SQL execptions men der kommer ik noget frem, den bliver ved med at proever..
Avatar billede arne_v Ekspert
02. maj 2003 - 23:43 #20
Kommer der heller ingen fejl i server output/log ?

(jeg formoder at det er en JSP side grundet kategorien)
Avatar billede shemeri Praktikant
02. maj 2003 - 23:45 #21
jeg bruger beans med jsp
og min connection klasse ser saden ud

import java.io.*;
import java.sql.*;

public class MakeConnection{

    private Statement st;
    private Connection con;
    private ResultSet result;

    public MakeConnection(){}


    //Method to make connection to mysql RaceRunner database

    public void GetConnection(){
        /* connect (commented out strings use classic MySQL driver) */
        try
        {
            Class.forName("org.gjt.mm.mysql.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/cottage", "1234", "1234");
        }

        catch (java.sql.SQLException e){
          System.out.println("ERROR" + e);
        }

        catch (Exception e) {
          System.out.println("ERROR" + e);
        }
    }


    public void Close(){

        if (con!=null){

          try
          {
              con.close();
              con=null;
          }//try

          catch (SQLException e)
          {
              e.printStackTrace(System.out);
          }//catch
        }//if
    }//close()


    public int Add(String AddStatement){
        int numberOfRowsAffected = 0;

        if(con!=null){
        try {
                st = con.createStatement();
                numberOfRowsAffected = st.executeUpdate(AddStatement);
        }//Try

        catch (SQLException e) {
              System.out.println("ERROR" + e);
        }

        }//if

        return numberOfRowsAffected;
    }// Add


    public ResultSet MakeQuery(String NewQueryStatement){

        if(con!=null){

            try
            {
              st = con.createStatement();
              result = st.executeQuery(NewQueryStatement);
            }

            catch (SQLException e)
            {
              System.out.println("ERROR" + e);
            }

        }//if

        return null;
    } // Make Query


    public ResultSet Result(){

        return result;
    }// Result

}//Class
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 23:46 #22
Vi skal se noget mere kode.

Det er mystisk, at du kan låse med READ og få lov til at
lave en INSERT uden en fejl.

lock table og lock tables kan begge bruges
Avatar billede arne_v Ekspert
02. maj 2003 - 23:49 #23
Med den kode så skal der være noget output et eller andet sted
fra serveren med en SQLException, når INSERT fejler.

Hvilken server bruger du ? Tomcat ? Resin ? WebSphere ?
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 23:52 #24
...og du laver ikke en redirection, så du ikke ser udskrifter?
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 23:54 #25
Nåh, det er
  System.out.println
...så du ser eventuelle udskrifter?
Avatar billede shemeri Praktikant
02. maj 2003 - 23:55 #26
arne_v: jeg bruger Resin

erikjacobsen: hvordan kan jeg se udskrifter?
Avatar billede shemeri Praktikant
02. maj 2003 - 23:56 #27
erikjacobsen: der kommer ingen udskrifter ud :(
Avatar billede erikjacobsen Ekspert
02. maj 2003 - 23:57 #28
Start Resin manuelt  -  i et DOS-vindue. Så ser du dem
Avatar billede arne_v Ekspert
02. maj 2003 - 23:58 #29
Resin.

Kører du den som service eller bare ved at køre den lille httpd.exe ?

Uanset hvad kan du ikke stoppe den, og starte den med httpd.exe fordi
så skulle output komme i en god gammel dos box.
Avatar billede shemeri Praktikant
02. maj 2003 - 23:58 #30
der kommer ingen skrift fra sqlexception pa DOS-vindue :)
Avatar billede arne_v Ekspert
03. maj 2003 - 00:00 #31
Det er meget mystisk.

Enten bør INSERT gå godt eller du bør få en SQLException.
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 00:00 #32
Så virker det måske... Du har
  LOCK TABLE Book WRITE
og skal bare checke at INSERT virker, og der kommer noget i tabellen
Avatar billede shemeri Praktikant
03. maj 2003 - 00:03 #33
nope, det virker ik, fordi der kommer ik noget i tabellen. Det er faktisk mystisk :(
Avatar billede shemeri Praktikant
03. maj 2003 - 00:04 #34
arne_v, ingen INSERT eller SQLException den bliver ved med at vente pa noget og den kommer aldrig frem
Avatar billede arne_v Ekspert
03. maj 2003 - 00:05 #35
Hov jeg ser lige et par andre ting som er værd at prøve.

1)  Du har Connection og Connection2 - kan du prøve på samme connection ?

2)  Kan du prøve at bruge Add i.s.f. MakeQuery til de 3 statements ?
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 00:05 #36
Ok så. Din beskrivelse siger at du venter. Sæt lidt
testudskrifter ind, så du kan se hvad du venter på.
Har du andre ting til at have fat i din tabel?
Avatar billede erikjacobsen Ekspert
03. maj 2003 - 00:06 #37
Arne har fat i noget.... En genstart kan være en god ide.
Måske har du webprocesser, der holder på din tabel.
Avatar billede arne_v Ekspert
03. maj 2003 - 00:07 #38
Venter ?

Du har vel ikke tabellen låst af en anden process ?

En GUI som du bruger til at checke om data er blevet indsat...
Avatar billede arne_v Ekspert
03. maj 2003 - 00:08 #39
En LOCK TABLES WRITE vil netop vente indtil den kan komme
til hvis en anden process har tabellen låst for skrivning.
Avatar billede arne_v Ekspert
07. maj 2003 - 20:30 #40
Hej - fik du det til at virke ?
Avatar billede shemeri Praktikant
07. maj 2003 - 22:39 #41
nej...men jeg har lavet en TEMP tabel som holder alle de "Bookings" som er i gang sa hver gang en prover at lave en "booking" af noget som er i TEMP tabellen, faar man en meddelse om at den er bestilt af anden bruger. TEMP tabel tomes hver gang en bestilling er registeret. :)

Jeg synes det er bedre en locking da jeg kan konrollere alt.
Avatar billede arne_v Ekspert
17. maj 2003 - 21:28 #42
Tid at lukke spørgsmålet ?
Avatar billede shemeri Praktikant
18. maj 2003 - 17:23 #43
OK :-)
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