Java程序调用其他带参数的二进制文件。参数中有双引号。需要同时在windows和linux上工作

Java程序调用其他带参数的二进制文件。参数中有双引号。需要同时在windows和linux上工作,java,Java,我有一个java程序,我需要从java程序调用其他C二进制文件 此C二进制文件将db query作为参数 现在我遇到了一种情况,我的db查询本身包含双引号。 示例:java程序是sample.java,c二进制文件是test.exe 查询=从emp中选择*,其中name=“abc” Java程序使用ProcessBuilder的execute方法调用带参数的exe 当我在Windows上执行java程序时,我需要在调用exe之前显式地将查询中的“转换为”。所以,当exe读取该参数时,它将采用示例

我有一个java程序,我需要从java程序调用其他C二进制文件

此C二进制文件将db query作为参数

现在我遇到了一种情况,我的db查询本身包含双引号。 示例:java程序是sample.java,c二进制文件是test.exe 查询=从emp中选择*,其中name=“abc”

Java程序使用ProcessBuilder的execute方法调用带参数的exe

当我在Windows上执行java程序时,我需要在调用exe之前显式地将查询中的“转换为”。所以,当exe读取该参数时,它将采用示例中提到的正确参数

若我并没有显式地将“转换为\”,exe将一直执行查询,直到从emp中选择*,其中name=它将在找到第一个双引号时结束

现在,当我在Linux上运行相同的java程序并在查询中显式地将“转换为”时,Linux上的二进制文件会读取此参数,但它会在查询中保留\。因此,它将查询作为Select*from emp,其中名称=\“abc\”,因为它不能正确执行查询

因此,我最终在java类中拥有特定于平台的代码。如果程序在windows上运行,它会将“转换为\”,否则不会

我要寻找的是一种统一的方法来实现这一点,而不必在java中进行特定于平台的检查

谢谢,
Jenish

我的第一个问题是,为什么您不使用合适的数据库驱动程序直接连接到数据库服务器。第二个问题是,您如何使用
ProcessBuilder
,使其无法为您逃避问题?@Powerlord我们没有对数据库执行查询,exe解析此查询以在内部数据库上运行datastructure@BorisProcessBuilder本来可以做到这一点,但问题是这里传递的参数也是由exe读取的,因此如果我们不显式添加\ exe,则只有在windows上才读取到第一个双引号