Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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程序:列字段=保留字_Java_Sql Server - Fatal编程技术网

在Java中从SQL数据库传输到另一个数据库的Java程序:列字段=保留字

在Java中从SQL数据库传输到另一个数据库的Java程序:列字段=保留字,java,sql-server,Java,Sql Server,我正在尝试运行我的java程序,在该程序中,我必须将数据从一个数据库传输到另一个数据库 这个程序可以运行,但其中一个列字段名为“public”,当我试图使用jdbc传输该数据时,它会崩溃,出现以下语句: 关键字“public”附近的语法不正确 我尝试将列字段加载为[public],(public),`public`在SQL语法中工作,但在程序中不工作,因为它必须检查“public”的等价性,所以“public”返回false 加载数据时的一些代码示例: String publicDb = i

我正在尝试运行我的java程序,在该程序中,我必须将数据从一个数据库传输到另一个数据库

这个程序可以运行,但其中一个列字段名为“public”,当我试图使用jdbc传输该数据时,它会崩溃,出现以下语句:

关键字“public”附近的语法不正确

我尝试将列字段加载为
[public]
(public)
`public`
在SQL语法中工作,但在程序中不工作,因为它必须检查“public”的等价性,所以“public”返回false

加载数据时的一些代码示例:

  String publicDb = iArboFromExtranet.get(i).getString("public");
传输时的一些代码示例:

private static final String PUBLIC = "public";

IArbo.set(PUBLIC, Strings.nullToEmpty(publicVar))

顺便说一句,我不能重命名这些字段,因为我在IT服务行业工作。这不是我们的数据库。看起来您正在构建SQL插入和/或更新查询。请引用所有内容,因此如果数据库字段是MyField,表是MyTable,则您的查询应该有“MyTable”和“MyField”“对于这个特定领域。在Java中,可以通过使用反斜杠转义双引号来构建字符串:

queryString = "insert into \"MyTable\" (\"MyField\"...) values ('whatever'...)";

由于您使用框架生成SQL,并且使用保留字作为列名,因此您有一个(艰难的)选择:

  • 更新IArbo的实现,以引用保留字(或所有名称)
  • 不要使用
    IArbo
  • 不要使用保留字作为列名

  • 你能发布一些代码说明你是如何做到的吗?您可以重命名导致问题的列吗?当然,这里是:当我加载数据时:String publicDb=iArboFromExtranet.get(i).getString(“public”);不幸的是,当我传输:IArbo().set(PUBLIC,Strings.nullToEmpty(publicVar))时,我无法重命名。我在实习,这不是我的数据库,甚至不是我公司的数据库。我们是一家没有SQL查询的服务公司,完全异常是一个完全不清楚的问题。然后我会投反对票。如何处理“java”?它是一个将数据从数据库传输到另一数据库的java程序。对不起,如果我不清楚的话,就像我说的,我不是以英语为母语的人。我尽力了这不是一个“英语”问题,我也不是英国人;)完整的异常堆栈、直接与DB联系的层的代码(您的代码没有直接联系)、查询等详细信息是正确答案的基础,而不是抽签,或者只是引用
    “public”
    ,其余部分不加引号。根据我的经验,最好(也更容易)全部完成。在运行时通常无法确定特定DBMS保留了哪些字,因此您必须构建自己的列表。问题是,我得到了包含列字段的局部变量,并且方法正在为我动态构建查询(我在帖子中编辑的.set方法)。典型的、最受欢迎的引号是
    [
    ]
    并且在类似C语言的编程语言中没有问题。我尝试过这些,但当该方法试图在[public]和public之间建立等价关系时,它显然失败了:(所有选项都不可能,但我将尝试联系数据库所有者,看看他们是否可以更改字段名!您可以将IArbo子类化,并根据需要重写执行查找的方法以添加/删除引号。这可能是最快的路径。