如何使用Java在SQL数据库中存储多维数组?
我有一个java程序,它使用一个二维数组(如何使用Java在SQL数据库中存储多维数组?,java,sqlite,multidimensional-array,Java,Sqlite,Multidimensional Array,我有一个java程序,它使用一个二维数组(double[][])来存储图像的像素值,我需要将该信息保存在SQLite数据库中。看在我的份上,我想不出如何序列化double[][]数组以将其存储在数据库中 有人知道怎么做吗 PS:我知道在SQL数据库中存储二维数组之类的东西不是很好的做法,但我需要在我的用例中这样做。我将创建一个表,其中列为rowIndex、colIndex和value,其中rowIndex和colIndex将是主键 下面是SQLite实现: PRAGMA foreign_keys
double[][]
)来存储图像的像素值,我需要将该信息保存在SQLite数据库中。看在我的份上,我想不出如何序列化double[][]
数组以将其存储在数据库中
有人知道怎么做吗
PS:我知道在SQL数据库中存储二维数组之类的东西不是很好的做法,但我需要在我的用例中这样做。我将创建一个表,其中列为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);
}
}
或者,在几乎没有循环帮助的情况下,您可以使用索引来完成这项工作:)
如果有帮助,请告诉我:)您可以使用,但需要将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);
因此,@iHaveCodingIssues基本上只能在该表中存储一个图像。我怀疑这是他想要的。是的,正如他的问题所述,他只想将单个图像的像素存储到SQL数据库中,我的回答解决了这个问题。我不知道,他必须澄清这一点,我仍然认为可能会有更多的双[][]对象需要保留。如果没有,那就继续吧,你的答案是有效的。如果他想要更多的双[][]对象,那么他可以轻松地在数据库中创建多个表,这仍然很有吸引力。您假设图像的数量是静态的。在SQL数据库中存储图像时,显然使用了称为blob的东西。试试看这些。@VarunGawande我并不是真的想在我的数据库中存储图像。这非常有效,谢谢!
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);