Java 此查询适用于MySQL,但不适用于';因为语法的原因,我不能在MS Access上工作,为什么?
在我获得Java 此查询适用于MySQL,但不适用于';因为语法的原因,我不能在MS Access上工作,为什么?,java,ms-access,Java,Ms Access,在我获得dump的内容后,出现了一个CREATE TABLE查询,但由于语法错误,此查询在MS Access上不起作用 以下是来自dump文件的原始查询(可在Sqlite和MySQL上使用): 删除defaultnull并将int(11)更改为integer后,执行该命令 我可以发现这个问题,但在将来,我是否会遇到更多问题?当您移植到不同的后端环境时,您应该始终了解支持的数据类型,这里也是供访问的。是的,从MySQL移植可能会遇到更多这样的问题 还要注意文档状态(以防您决定只使用Access作为
dump
的内容后,出现了一个CREATE TABLE
查询,但由于语法错误
,此查询在MS Access上不起作用
以下是来自dump
文件的原始查询(可在Sqlite和MySQL上使用):
删除defaultnull
并将int(11)
更改为integer
后,执行该命令
我可以发现这个问题,但在将来,我是否会遇到更多问题?当您移植到不同的后端环境时,您应该始终了解支持的数据类型,这里也是供访问的。是的,从MySQL移植可能会遇到更多这样的问题 还要注意文档状态(以防您决定只使用Access作为前端) Microsoft Access数据库引擎不支持使用 使用非Microsoft Access创建表或任何DDL语句 数据库引擎数据库。改用DAO创建方法
当您移植到不同的后端环境时,您应该始终了解支持的数据类型,这里也是供访问的。是的,从MySQL移植可能会遇到更多这样的问题 还要注意文档状态(以防您决定只使用Access作为前端) Microsoft Access数据库引擎不支持使用 使用非Microsoft Access创建表或任何DDL语句 数据库引擎数据库。改用DAO创建方法
COUNT
是SQL保留关键字;它用作确定与查询匹配的行数的函数。MySQL和Sqlite非常宽松,允许您将其用作列名,因为它们可以区分您是将其用作列名还是函数名,但在技术上是不正确的。更改列名
此外,Access的数据类型与标准SQL不太匹配;前面答案中提供的链接应该会有所帮助。您可能需要将列定义为与所需大小相匹配的LONG。
COUNT
是SQL保留关键字;它用作确定与查询匹配的行数的函数。MySQL和Sqlite非常宽松,允许您将其用作列名,因为它们可以区分您是将其用作列名还是函数名,但在技术上是不正确的。更改列名
此外,Access的数据类型与标准SQL不太匹配;前面答案中提供的链接应该会有所帮助。您可能需要将列定义为与所需大小相匹配的长列。是。使用MS Access可能会出现很多问题。只是说实话,别这么做。MS Access不适合有这么多备选方案的用途。最重要的问题是缺乏良好的并发支持、文件锁定、糟糕的SQL支持、特殊的bug和一般性问题。事实上,这正是@anakata提到的问题。@PaulSullivan:谢谢,看看会发生什么只是一个有趣的问题,我实际上没有使用MS Access。是的。使用MS Access可能会出现很多问题。只是说实话,别这么做。MS Access不适合有这么多备选方案的用途。最重要的问题是缺乏良好的并发支持、文件锁定、糟糕的SQL支持、特殊的bug和一般性问题。事实上,正如@anakata提到的,这正是我问的问题。@PaulSullivan:谢谢,这只是一个有趣的问题,看看会发生什么,我实际上没有使用MS Access。你可以使用方括号[COUNT]为了使用保留关键字,或者更好地重命名字段。(名称在Access中也是保留的,但不在SQL中。)您可以使用方括号[COUNT]来使用保留关键字,或者更好的方法是重命名字段。(名称也保留在Access中,但不保留在SQL中。)
String query ="CREATE TABLE PATIENT("
+ " ID varchar(45) NOT NULL,"
+ " NAME varchar(255) DEFAULT NULL,"
+ " COUNT int(11) DEFAULT NULL,"
+ " PRIMARY KEY (ID)"
+ ")";