Avatar billede aslan Nybegynder
21. juni 2004 - 14:15 Der er 10 kommentarer og
1 løsning

Lægge objekter i mysql

Jeg forsøger at tage objekter ud af mysql, men for returneret null, har noget et forslag til hva jeg gør galt. Sådan gør jeg:

Lægger ned:

            String sql = "insert into "+PENDING_TABLE+" (mobile, timestamp, ticket)  values (?,?,?)";
            java.sql.PreparedStatement stmt = conn.prepareStatement(sql);
           
            stmt.setString(1,mobile);
            stmt.setString(2,timestamp);
            stmt.setObject(3,ticket);
           
            stmt.executeUpdate();


Tager ud:

            String sql = "SELECT mobile FROM "+PENDING_TABLE+" WHERE mobile=?";
            java.sql.PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1,mobile);
            java.sql.ResultSet rs = stmt.executeQuery();
            if (rs.next())
            {
                return true;
            }


Min tabel seer således ud:

CREATE TABLE `cust_jackpot_pending` (
  `id` int(11) NOT NULL auto_increment,
  `mobile` varchar(30) NOT NULL default '',
  `timestamp` varchar(14) NOT NULL default '',
  `ticket` blob NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
Avatar billede muddi Praktikant
21. juni 2004 - 14:25 #1
Nu ved jeg ikke så meget om Java, men når nu du skriver

String sql = "insert into "+PENDING_TABLE+" (mobile, timestamp, ticket)  values (?,?,?)";

Skulle de tre spørgsmålstegn så ikke hver især være omgivet af apostroffer?

Og det samme i select-sætningen:

String sql = "SELECT mobile FROM "+PENDING_TABLE+" WHERE mobile=?";

Og er det ikke meningen at dine spørgsmålstegn skulle erstattes af variable?
Avatar billede aslan Nybegynder
21. juni 2004 - 14:29 #2
Nej den er god nok det er sådan man arbejder med PreparedStatement, men jeg har bare aldrig prøvet at lægge objekter i mysql og får nu fejl...
Avatar billede aslan Nybegynder
21. juni 2004 - 14:30 #3
Ups 2. sql skulle også have været:

            String sql = "SELECT ticket FROM "+PENDING_TABLE+" WHERE mobile=?";
            java.sql.PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setString(1,mobile);
            java.sql.ResultSet rs = stmt.executeQuery();
            if (rs.next())
            {
                System.out.println("Object out");
                return (Ticket) rs.getObject(1);
            }
Avatar billede arne_v Ekspert
21. juni 2004 - 14:38 #4
Jeg har aldrig brugt setObject/getObject til BLOB i MySQL.

Jeg har brugt setBytes/getBytes med success.

Og setBlob/getBlob bør vel per definition også virke.

Så mit forslag er:
  serialiser og kald setBytes
  kald getBytes og deserialiser

(eller skift til et O/R mapping tool som Hibernate eller en JDO implementation)
Avatar billede aslan Nybegynder
21. juni 2004 - 14:55 #5
Tak arne jeg skal lige høre hvordan deserialisere jeg efter at have fået fat på objektet fra db? Det seer ud til at objektet lægger i db og når jeg udskriver det får jeg dette output:

model.Ticket@f9c40

men når jeg forsøger at parse det og kalde en get metode får jeg nullpointer exception. Dette forsøger jeg således:

((Ticket)pendingSql.getOldTicket(mobile)).getMobileNumber()
Avatar billede arne_v Ekspert
21. juni 2004 - 14:56 #6
Det ser nu for mig ud som at den kalder toString og gemmer den i databasen ...
Avatar billede arne_v Ekspert
21. juni 2004 - 14:58 #7
private static byte[] encode(Object o) throws Exception {
        ByteArrayOutputStream ba = new ByteArrayOutputStream(1000);
        ObjectOutputStream oba = new ObjectOutputStream(ba);
        oba.writeObject(o);
        return ba.toByteArray();
    }
Avatar billede arne_v Ekspert
21. juni 2004 - 14:58 #8
private static Object decode(byte[] b) throws Exception {
        ByteArrayInputStream ba = new ByteArrayInputStream(b);
        ObjectInputStream oba = new ObjectInputStream(ba);
        return oba.readObject();
    }
Avatar billede aslan Nybegynder
21. juni 2004 - 15:32 #9
Tak arne ... jeg ved ikke hvad eksperten havde været uden dig. Læg et svar så jeg kan give dig points :-)
Avatar billede arne_v Ekspert
21. juni 2004 - 15:33 #10
Så det virkede ?

og svar !
Avatar billede aslan Nybegynder
21. juni 2004 - 15:37 #11
Jamen, jeg gjorde som du sagde og det virkede perfekt...
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