我有一个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为列的表,其中rowIndex和colIndex将是主键。
以下是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]);
或者,在循环的帮助下,你可以得到索引来完成这项工作:(
如果这有帮助,请告诉我:(