- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Matlab 的新手,但我已经成功地使用它与数据库(在我的例子中是 PostgreSQL)进行交互,方法是遵循关于如何 connect to a database using JDBC drivers 的官方文档。 , 然后 executing a query with exec
.但是,在后一种情况下给出的示例涉及将数据粘贴到查询中,这可能效率低下并且容易受到 SQL 注入(inject)的影响。
我真正想做的是使用绑定(bind)变量,就像在 JDBC PreparedStatement
中所做的那样.我在文档中找不到任何关于此的内容。有什么方法可以做到这一点吗?
最佳答案
是的,正如您指出的那样,这样做是可能的,但您也可以通过 Matlab Database Toolbox 来完成所有这些工作。
事实上,这个工具箱通过直接的 JDBC 连接与 PostgreSQL 一起工作。此外,datainsert
和 fastinsert
这两种实现的数据插入方法都通过专门创建的准备语句工作。这两者之间的唯一区别在于各自准备好的语句填充数据的方式。 fastinsert
在 Matlab 中使用与您提到的完全相同的技术(通过使用不同的 setter ,如 setDouble
、setBoolean
、setTimestamp
等等以及当然是 setObject
)。但事实证明,这种方式很难用于大数据量的情况,因为在这种情况下 fastinsert
变得非常慢。datainsert
通过Java中的某个对象向创建的prepared statement中填充数据com.mathworks.toolbox.database.writeTheData
类。这个类实现了两个方法——doubleWrite
和cellWrite
。doubleWrite
允许用数字标量数据填充准备好的语句。cellWrite
假定数据作为单元格矩阵传递,每个单元格中都有一个标量对象(对象可以是数字、逻辑 Matlab 标量、Matlab 字符串或 JDBC 驱动程序支持的标量 Java 对象,比如 org.postgresql.jdbc.PgArray
在数组的情况下)对于相应的字段和元组。因此,不是从 Matlab 调用 setObject
(这可能会导致一个显着的开销)作为第一步,用必要的对象填充提到的单元格矩阵更有效然后从 Matlab Database Toolbox 调用 datainsert
作为第二步。
但在这种情况下,所有被插入的对象都具有 Matlab 类型(标量、字符串、矩阵、多维数组、结构和任意其他 Matlab 类型),使用特殊的高性能 PostgreSQL 至少有一种更有效的插入数据的方法客户端库 100% 用 C 语言编写并基于 libpq。它叫做PgMex .它对于大数据量(大约 1Gb 或更多)或当它是需要插入非标量数据(数组)。在这种情况下,fastinsert
和 datainsert
都表现出性能下降,并且由于大型数据集的 JDBC 驱动程序的限制而导致 Java 堆内存持续不足。这很容易从下面的图片可以看出:
这里比较fastinsert
和datainsert
与batchParamExec
的性能来自 PgMex(详见 https://pgmex.alliedtesting.com/#batchparamexec)。第一张图片是标量数值数据的情况,第二张图片是数组的情况。每个图的端点对应到一定的最大数据量通过相应的方法无误的传入数据库。数据量大于最大值(特定于每个方法)会导致“Java 堆内存不足”问题(每个实验的 Java 堆大小在每个图的顶部指定)。更多实验详情请见下文 paper with full benchmarking results for data insertion .
编辑:现在PgMex支持免费的学术许可证。
关于database - Matlab数据库准备语句和绑定(bind)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34808404/
在 Matlab 中,您可以选择创建新的“示例”脚本文件以及脚本、函数、类等。创建它们时,它们会获得一个脚本图标。 它们与其他标准脚本文件的处理方式有何不同? 是否有关于这些示例脚本类型的预期用途的文
我正在运行一个不是我自己编写的大 m 文件,它依赖于某些子函数。我想知道是否在所有嵌套函数的任何地方都使用了特定函数(在我的例子中是函数 eig.m(计算特征值))。有没有快速的方法来做到这一点? 亲
Matlab中有一个函数叫 copulafit .我怎样才能看到这个函数背后的代码?许多 Python 的 numpy 和 scipy 函数在 Github 上很容易开源,但由于某种原因我在 Gith
我定义了一个抽象基类measurementHandler < handle它定义了所有继承类的接口(interface)。这个类的两个子类是a < measurementHandler和 b < me
假设有一个矩阵 A = 1 3 2 4 4 2 5 8 6 1 4 9 例如,我有一个 Vector 包含该矩阵每一列的“类”
我有一个在后台运行的 Matlab 脚本。随着计算的进行,它会不断弹出进度栏窗口。这很烦人。 问题是我没有自己写 Matlab 脚本,这是一段很长很复杂的代码,我不想搞砸。那么如何在不修改 Matla
有没有办法从一个 matlab 程序中检测计算机上正在运行多少个 matlab 进程? 我想要恰好有 n 个 matlab 进程在运行。如果我的数量太少,我想创建它们,如果数量太多,我想杀死一些。您当
我正在测试我们在 Matlab 中开发的一个独立应用程序,当时我注意到它的内存使用量(根据 Windows 任务管理器)达到了 16gb 以上的数倍峰值。我决定在编译版本后面的脚本上使用 profil
我面临着一个相当棘手的问题。在 Matlab 中,命令 S = char(1044) 将俄语字母 д 放入变量 S。但是 disp(S) 返回空白符号,尽管内容实际上是正确的: >> S = char
我在这行 MATLAB 代码中遇到内存不足错误: result = (A(1:xmax,1:ymax,1:zmax) .* B(2:xmax+1,2:ymax+1,2:zmax+1) +
我正在寻找一种在 MATLAB 中比较有限顺序数据与非确定性顺序的方法。基本上,我想要的是一个数组,但不对包含的元素强加顺序。如果我有对象 a = [x y z]; 和 b = [x z y]; 我希
我有一个由 1 和 0 组成的二维矩阵。 mat = [0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 0 1]; 我需
我可以在 Matlab 中用一组 x,y 点绘制回归线。但是,如果我有一组点(如下图),假设我有四组点,我想为它们绘制四条回归线……我该怎么做?所有的点都保存在 x,y 中。没有办法将它们分开并将它们
我正在尝试使用以下代码在 MATLAB 中绘制圆锥体。但是,当 MATLAB 生成绘图时,曲面中有一个间隙,如下图所示。谁能建议关闭它的方法? clearvars; close all; clc; [
我有一个 map称为 res_Map,包含一组不同大小的数组。我想找到用于存储 res_Map 的总内存。 正如您在下面看到的,看起来 res_Map 几乎不占用内存,而 res_Map 中的各个元素
有没有办法在 MATLAB 中组合 2 个向量,这样: mat = zeros(length(C),length(S)); for j=1:length(C) mat(j,:)=C(j)*S;
已结束。此问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。 关闭 5 年前
我正在尝试将MatLab中的t copula适配到我的数据,并且我的功能是: u = ksdensity(range_1, range_1,'function','cdf'); v = ksdens
大家好,我目前正在尝试使用论文“多尺度形态学图像简化”中的 SMMT 运算符 Dorini .由于没有订阅无法访问该页面,因此我将相关详细信息发布在这里: 请注意,我将相关文章的部分内容作为图片发布。
我在MATLAB中编写代码,需要使用一个名为modwt的函数,该函数同时存在于两个我同时使用的工具箱(Wavelet和WMTSA)中。问题在于,一个版本仅返回一个输出,而另一个版本则返回三个输出。我应
我是一名优秀的程序员,十分优秀!