Note that there are some explanatory texts on larger screens.

plurals
  1. POstore Java Object as BLOB in MySQL: strange error
    text
    copied!<p>got a little problem im hoping someone can enlighten me on.</p> <p>Trying to serialise a Java Object of my own creation which is made up of other Java Objects (Again of my own creation). It was running fine until I get this error when the jdbc attempts to run the PreparedStatement storing the Object as a blob.</p> <p>Im running MySQL as the database and have checked that all my objects which im attempting to store in the blob field are defined as "implements Serializable". I have attempted to try a normal BLOB datatype in MySQL and also MedBlob. Im running MySQL client version: 5.1.41 via Xampp.</p> <p>Code is below:</p> <pre><code>LinkedList&lt;Table&gt; tt = t; //Ignore these two variables String tName = ""; int modelCode = 0; for (int i = 0; i&lt; tt.size();i++){ tName = t.get(i).getTableName(); modelCode = session.getCurrentModel(); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(t.get(i)); byte[] tableAsBytes = baos.toByteArray(); fyProject.connectionController sg = new fyProject.connectionController(1); PreparedStatement pstmt = sg.prepareSQL ("INSERT INTO tableList (table) VALUES(?);"); ByteArrayInputStream bais = new ByteArrayInputStream(tableAsBytes); pstmt.setBinaryStream(1,bais, (long) tableAsBytes.length); System.out.println(pstmt.toString()); //pstmt.setString(2, tName); //pstmt.setInt(3, modelCode); pstmt.executeUpdate(); sg.conn.commit(); pstmt.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } } </code></pre> <p>Error stack is below:</p> <pre><code>com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table) VALUES(_binary'¬í\0sr\0fyProject.TableÊl;EÞ›\0L\0 attributest\0Lja' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330) at fyProject.connectionController.insertTable(connectionController.java:368) at fyProject.connectionController.createTables(connectionController.java:292) at fyProject.Main.main(Main.java:40) </code></pre> <p>Thanks for the help.</p> <p>Lewis</p> <p>EDIT: Fixed code is below.</p> <pre><code> public void insertTable() { LinkedList&lt;Table&gt; tt = t; //Ignore these two variables String tName = ""; int modelCode = 0; for (int i = 0; i&lt; tt.size();i++){ tName = tt.get(i).getTableName(); modelCode = session.getCurrentModel(); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); //Test a = new Test(1); oos.writeObject(tt.get(i)); byte[] tableAsBytes = baos.toByteArray(); fyProject.connectionController sg = new fyProject.connectionController(1); PreparedStatement pstmt = sg.prepareSQL ("INSERT INTO tableList (tableField) VALUES(?);"); ByteArrayInputStream bais = new ByteArrayInputStream(tableAsBytes); pstmt.setBinaryStream(1,bais, (long) tableAsBytes.length); System.out.println(pstmt.toString()); //pstmt.setString(2, tName); //pstmt.setInt(3, modelCode); pstmt.executeUpdate(); //sg.conn.commit(); pstmt.close(); conn.close(); }catch(Exception e) { e.printStackTrace(); } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload