0

我正在尝试在我的 SQL 数据库中保存一个 Java 对象,但我遇到了一个我无法解决的错误......

stat.executeUpdate("CREATE Table users( id INT UNIQUE NOT NULL AUTO_INCREMENT,name char(50), pw char(50), messages LONGBLOB, profile LONGBLOB )");

. . .

public static void registerNewUser(String name , String pw , Profile profile){PreparedStatement ps=null;


        ps = con.prepareStatement("insert into users(name,pw,profile) VALUES(?,?,?)");
        ps.setString(1, name);
        ps.setString(2, pw);
        ps.setObject(3, (Object)profile);
        ps.executeUpdate();}

最后它说

SQL Exception : Unknown SQL Type for PreparedStatement.setObject (SQL Type=1111
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setObject(Unknown Source)

希望有人可以帮助我:D Thx 提前

ps配置文件类

public class Profile implements Serializable{
private String name;
private int idNumber;
private byte[] picture;
private String password;

public Profile(String n, int i, byte[] p, String pw) {
    this.name = n;
    this.idNumber = i;
    this.picture = p;
    this.password = pw;
}

public String getProfileName(){
    return this.name;
}
public int getIDNumber(){
    return this.idNumber;
}
public byte[] getProfilePicture(){
    return this.picture;
}
public String getPassword(){
    return this.password;
}

public void setIDNumber(int number){
    this.idNumber = number;
}

}

仅使用 ps.setBytes(3,byte[]);

4

2 回答 2

0

使用st.setBinaryStream(byte[])而不是st.setObject()保存配置文件流。

于 2013-10-07T18:40:26.987 回答
0

查看HibernateUserType。不要让你被它吓跑。一旦你学会了它,你就可以轻松地做所有这些事情。

如果您仍然想使用 jdbc,请使用以下内容。使用 ArrayOutputStream 创建一个新的 ObjectOutputStream。现在将您的可序列化对象直接写入 ObjectOutputStream 并关闭它。现在使用底层的 ArrayOutputStream 来获取这些数据的 byte [] 数组表示,并将这个字节数组作为 bLOB 的值提供给 JDBC 语句。

这应该可以解决您的问题。实际上,这可以提取到实用程序类中,并在您尝试存储序列化信息的任何地方使用。

于 2013-10-07T19:10:56.873 回答