public void saveUserObject(SqlUser user, String username) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(user); PreparedStatement ps = null; //check if user exists if(!userExistsInDB(username)) { ps = cn.prepareStatement("INSERT INTO " + userTable + " (userName, userObject) VALUES (?, ?)"); ps.setString(1, username); ps.setBytes(2, bos.toByteArray()); } else { ps = cn.prepareStatement("UPDATE " + userTable + " SET userObject = ? WHERE userName = ? LIMIT 1"); ps.setBytes(1, bos.toByteArray()); ps.setString(2, username); } ps.executeUpdate(); ps.close(); oos.close(); bos.close(); } catch (Exception ex) { throw new RuntimeException("Exception in saveUserObject()", ex); } } private boolean userExistsInDB(String username) { try { PreparedStatement ps = cn.prepareStatement("SELECT userObject FROM " + userTable + " WHERE userName = ? LIMIT 1"); ps.setString(1, username); ResultSet rs = ps.executeQuery(); boolean userExists = false; if(rs.next()) userExists = true; rs.close(); ps.close(); return userExists; } catch (Exception ex) { throw new RuntimeException("Exception in userExistsInDB()", ex); } } public SqlUser getUserObject(String username) { try { PreparedStatement ps = cn.prepareStatement("SELECT userObject FROM " + userTable + " WHERE userName = ? LIMIT 1"); ps.setString(1, username); ResultSet rs = ps.executeQuery(); if(!rs.next()) return null; byte[] bytes = rs.getBytes(1); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bis); SqlUser user = (SqlUser) ois.readObject(); bis.close(); ois.close(); rs.close(); ps.close(); return user; } catch (Exception ex) { throw new RuntimeException("Exception in getUserObject()", ex); } }