gpt4 book ai didi

java - 将 boolean 对象存储和检索到 MySql 数据库

转载 作者:行者123 更新时间:2023-11-30 22:26:13 25 4
gpt4 key购买 nike

这是我的第一个问题,但在问你之前我已经在互联网上搜索了所有没有解决方案。

我想将 Java 对象存储在 MySql 数据库中,为此我对所有对象使用数据类型 BLOB。 MySql 表是:

CREATE TABLE settaggi_variabili_pc (`id` int(11) NOT NULL AUTO_INCREMENT, PC1 BLOB, PC2 BLOB, PC3 BLOB, PC4 BLOB, PC5 BLOB, PC6 BLOB, PC7 BLOB, PC8 BLOB, PC9 BLOB, PC10 BLOB, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我必须在其中存储颜色、字体和 boolean 值等 Java 对象:

prpdStmnt = con.prepareStatement("UPDATE settaggi_variabili_pc SET PC1=?, PC2=?, PC3=?, PC4=?, PC5=?, PC6=?, PC7=?, PC8=?, PC9=?, PC10=? WHERE id=?");
for (int i = 0; i < vDati.size(); i++)
{
Variabile_variabili_pc vpc = (Variabile_variabili_pc) vDati.get(i);
Object o = null;
if (vpc.getOggetto() instanceof Color)
o = (Color) vpc.getOggetto();
else if (vpc.getOggetto() instanceof Font)
o = (Font) vpc.getOggetto();
else if (vpc.getOggetto() instanceof JSwitchButton)
o = (Boolean)((JSwitchButton) vpc.getOggetto()).isSelected();

prpdStmnt.setInt(11, i + 1);
for (int x = 1; x <= 10; x++)
{
prpdStmnt.setObject(x, o);
}

prpdStmnt.executeUpdate();

JSwitchButton 是一个扩展了 AbstractButton 的自定义类。所有这些代码都可以正常工作。

我的问题是当我尝试检索 boolean 对象时,这是代码:

ritorno = db.eseguiQuery("SELECT PC1, descrizione FROM settaggi_variabili_pc");
try
{
while(ritorno.next())
{
InputStream is = ritorno.getBlob(1).getBinaryStream();
ObjectInputStream ois = new ObjectInputStream(is);
o = ois.readObject();

if (o.getClass().equals(Color.class))
System.out.println("Object type Color");
else if (o.getClass().equals(Font.class))
System.out.println("Object type Font");
else if (o.getClass().equals(Boolean.class))
System.out.println("Object type Boolean");
}
}

catch (SQLException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}

ObjectInputStream 读取 boolean 对象时,代码返回一个 java.io.EOFException 错误。出现此错误是因为 boolean 对象在存储操作期间被转换为 MySql 数据库中的 TINYINT 值,并且未存储为 boolean 对象。

所以问题是:如何将 boolean 对象存储到 BLOB MySql 类型,以及如何将它再次检索到 boolean 对象,就像我对颜色或字体所做的那样?有没有一种方法可以让我像存储对象一样存储 boolean 值而不像原始类型?

谢谢大家

最佳答案

首先,作为@Jorge Campos指出,您所拥有的不是在数据库中存储内容的良好结构。即使对于您的应用程序,简单的配置数据也最好以某种平面文本格式存储( INI Files 或类似格式。如果您真的必须/em> 使用数据库,您当然应该考虑使用位于 MySQL 之上的 object oriented database 甚至 Object-Relational Mapping (ORM) 工具(例如 Hibernate )。

回到实际的答案,只需更改行 else if (o.getClass().equals(Boolean .class)) 在上面的代码中(注意粗体),使用更合适的类,例如 IntegerByte - 当 TINYINT从 MySQL 返回,您将能够表示它。

顺便说一句,我认为您会受益于 The StackExchange code review site https://codereview.stackexchange.com/ .您的代码非常草率,肯定会从审查中获益。如果确实需要,您可以在不更改数据库的情况下审查代码。

关于java - 将 boolean 对象存储和检索到 MySql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com