如何使用Java在SQL数据库中存储多维数组



我有一个java程序,它使用二维数组(double[][](来存储图像的像素值,我需要将这些信息保存在SQLite数据库中。出于我的爱,我无法想出如何序列化double[][]数组以将其存储在数据库中。

有人知道怎么做吗?

PS:我知道在SQL数据库中存储像二维数组这样的东西不是一个好的做法,但我需要在我的用例中这样做。

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

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);

我将创建一个以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]);

或者,在循环的帮助下,你可以得到索引来完成这项工作:(

如果这有帮助,请告诉我:(

最新更新