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