MYSQL存储过程访问存储为BLOB的java对象

MYSQL存储过程访问存储为BLOB的java对象,java,mysql,stored-procedures,object,Java,Mysql,Stored Procedures,Object,我将Java对象作为字节存储在表的blob中。java对象是定制对象。如何构造java对象并在存储过程中使用它?让类实现,这样您就可以获得它的InputStream,您可以使用它存储在数据库中 也就是说,这通常被认为是一个糟糕的设计。如果该类实际上是一个Javabean类,那么最好创建一个包含表示Javabean属性的列的表。例如,公共类用户{private Long id;private String name;private Integer age;}应该映射到一个类似于创建表用户(id B

我将Java对象作为字节存储在表的blob中。java对象是定制对象。如何构造java对象并在存储过程中使用它?

让类实现,这样您就可以获得它的
InputStream
,您可以使用它存储在数据库中

也就是说,这通常被认为是一个糟糕的设计。如果该类实际上是一个Javabean类,那么最好创建一个包含表示Javabean属性的列的表。例如,
公共类用户{private Long id;private String name;private Integer age;}
应该映射到一个类似于
创建表用户(id BIGINT AUTO_INCREMENT,name VARCHAR,age Integer)的表。

编辑作为对您评论的回复:因此您基本上希望将数组存储为二进制对象。这是一个非常糟糕的主意。这样,您就无法在数据库中搜索阵列的数据,数据库也将不再是可移植的。只需创建一个表示每个数组项的新表。向其中添加一个额外的列,该列表示父对象的ID(实际上,它应该是包含数组的父对象映射到的表的PK)

例如:

public class Parent {
    private Long id;
    private String someData;
    private List<Child> children;
    // Add/generate public getters/setters.
}

public class Child {
    private Long id;
    private String someData;
    // Add/generate public getters/setters.
}
通过这种方式,您可以在
JOIN
子句的帮助下选择all。有关示例,请查看w3schools.com上的SQL教程和特定于供应商的SQL文档

如何构造java对象并在存储过程中使用它

这是不可能的,至少MySQL是不可能的。与Oracle支持的不同,MySQL的存储过程语法基于简单的ANSI SQL标准。因此我不知道如何从BLOB中存储的流构造Java对象。你可以做的是访问BLOB,但这对你没有多大帮助

实际上,我认为您在这里完全走错了路,使用BLOB不是正确的方法(至少在这里不是)。如果您需要持久化它们之间具有1:n关系的对象,您需要相应地对数据库进行建模

如果您的
记录
类与
用户
类有一对多的关系,这是我的理解,那么您在Java方面有类似的东西:

public class Record {
    private Long id;
    private User[];
    //...
}
然后,您需要在数据库级别创建两个表,一个用于记录,另一个用于用户,并使用外键对它们之间的关系进行建模(以便可以将用户“附加”到记录):


最后,当从Java中持久化一个
记录
实例时,您需要在两个表中写入状态。

谢谢您的快速回复。但是我有一个用户数组(根据您的示例),所以我使用了blog。有其他解决方案吗?I,e方案如下所示:recordid-integer-primary key User[]-blobSo基本上你想在数据库中存储一个数组?这是一个一对多关系?只需创建一个新表,其中包含一个表示父表/行的FK的额外列。这样你就可以将每个数组作为新行插入。
public class Record {
    private Long id;
    private User[];
    //...
}
CREATE TABLE record
(
    record_id INT NOT NULL,
    ...,
    PRIMARY KEY (record_id)
) TYPE = INNODB;

CREATE TABLE user
(
    user_id INT NOT NULL,
    record_id INT,
    ...
    PRIMARY KEY (user_id),
    INDEX (record_id),
    FOREIGN KEY (user_id) REFERENCES record (record_id) 
) TYPE = INNODB;