【问题标题】:How to store a multi dimensional array in a SQL database with Java? [closed]如何使用 Java 在 SQL 数据库中存储多维数组? [关闭]
【发布时间】:2021-05-27 16:41:44
【问题描述】:

我有一个 java 程序,它使用二维数组 (double[][]) 来存储图像的像素值,我需要将该信息保存在 SQLite 数据库中。我不知道如何序列化 double[][] 数组以将其存储在数据库中。

有人知道怎么做吗?

PS:我知道在 SQL 数据库中存储二维数组之类的东西不是一个好习惯,但我需要针对我的用例。

【问题讨论】:

  • 在 SQL 数据库中存储图像时,显然使用了一种称为 blob 的东西。试着调查一下。
  • @VarunGawande 我实际上并不想在我的数据库中存储图像。

标签: java sqlite multidimensional-array


【解决方案1】:

您可以使用Gson,但您需要将 Gson 添加到您的依赖项中。将数组解析为字符串,将其作为字符串存储在数据库中,并在需要数组时将其转换回双二维数组。

Gson gson = new GsonBuilder().create();
double[][] multiDoubleArray = new double[][]{{1.0, 2.0, 3.0}, {4.0, 5.0, 6.0}};

// to string
String stringArray = gson.toJson(multiDoubleArray);   

// back to 2D array
double[][] multiDoubleArray2 = gson.fromJson(stringArray, double[][].class);

【讨论】:

  • 效果很好,谢谢!
【解决方案2】:

我将创建一个以 rowIndex、colIndex 和 value 作为列的表,其中 rowIndexcolIndex 将是 主键

这将是 SQLite 实现:

PRAGMA foreign_keys=ON;
BEGIN TRANSACTION;
CREATE TABLE data(
    rowIndex INTEGER,
    colIndex INTEGER,
    val INTEGER,
    PRIMARY KEY (rowIndex, colIndex)
);
CREATE UNIQUE INDEX index ON data (rowIndex, colIndex);

INSERT INTO data VALUES(rowIndex, colIndex, arr[rowIndex][colIndex]);

现在在您的 Java 代码中,您必须循环遍历整个数组并一个接一个地相加。

这里我给你一个在表格中添加单个像素的示例方法:

public void addEntry(int rowIndex, int colIndex, double val) {
        if(rowIndex < 0 || colIndex < 0) return;

        String itemsSql = "INSERT INTO data(rowIndex, colIndex, val) VALUES(?,?,?)";

        Connection connection = getConnection();
        try {
            PreparedStatement itemsCmd = connection.prepareStatement(itemsSql);

            //Load 
            itemsCmd.setInt(1, rowIndex);
            itemsCmd.setInt(2, colIndex);
            itemsCmd.setDouble(3, val);

            //Execute 
            itemsCmd.executeUpdate();  
        } catch (Exception e) {
            ErrorDialog.show(e);
        }
}

你可以这样使用它:

double[][] values;
addEntry(0, 0, values[0][0]);

或者在循环的帮助下,您可以获得索引来完成这项工作:)

如果有帮助请告诉我:)

【讨论】:

  • 所以基本上@iHaveCodingIssues 只能在该表中存储一个图像。我怀疑这就是我们想要的。
  • 是的,正如他的问题所述,他只想将单个图像的像素存储到 SQL 数据库中,我的回答解决了这个问题
  • 我不知道,他必须澄清这一点,我仍然对他可能想要保留的更多 double[][] 对象的可能性持开放态度。如果没有,请继续,您的答案有效。
  • 嗯。如果他想要更多的 double[][] 对象,那么他可以很容易地在数据库中创建多个表,这仍然很有效。
  • 你假设图片的数量是静态的。
猜你喜欢
  • 2018-02-21
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
相关资源
最近更新 更多