Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在SQL数据库中存储多维数组?_Java_Sqlite_Multidimensional Array - Fatal编程技术网

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

如何使用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

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

有人知道怎么做吗


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

我将创建一个表,其中列为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);
        }
}
或者,在几乎没有循环帮助的情况下,您可以使用索引来完成这项工作:)

如果有帮助,请告诉我:)

您可以使用,但需要将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);