MYSQL存储过程访问存储为BLOB的java对象
我将Java对象作为字节存储在表的blob中。java对象是定制对象。如何构造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
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;