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;
Annonceindlæg fra itm8
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?
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...
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); }
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)
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()
Det ser nu for mig ud som at den kalder toString og gemmer den i databasen ...
private static byte[] encode(Object o) throws Exception { ByteArrayOutputStream ba = new ByteArrayOutputStream(1000); ObjectOutputStream oba = new ObjectOutputStream(ba); oba.writeObject(o); return ba.toByteArray(); }
private static Object decode(byte[] b) throws Exception { ByteArrayInputStream ba = new ByteArrayInputStream(b); ObjectInputStream oba = new ObjectInputStream(ba); return oba.readObject(); }
Tak arne ... jeg ved ikke hvad eksperten havde været uden dig. Læg et svar så jeg kan give dig points :-)
21. juni 2004 - 15:33
#10
Så det virkede ? og svar !
21. juni 2004 - 15:37
#11
Jamen, jeg gjorde som du sagde og det virkede perfekt...
Computerworld tilbyder specialiserede kurser i database-management