我们正在处理核心java代码中的sybase数据库。我们使用org.eobjects.metamodel.DataContext
来解析查询。
String sCol[]=table.getColumnNames();
Query query=dataContext.query().from(table.getName()).select(sCol).toQuery();
return new QueryIterator(dataContext.executeQuery(query).iterator());
但它执行查询。相同的代码可以与Oracle数据库一起使用来解析和执行查询。
生成的一些查询示例是:
没有执行任何上述查询。 我们收到了这些错误:
我们如何使用带有SYBASE数据库的元模型执行查询?还有其他方法可以执行sybase查询吗?
答案 0 :(得分:1)
Oracle(和Microsoft)使用Sybase ASE不支持的模式逻辑结构。在SAP / Sybase ASE中,数据库中的所有表和列都在同一模式中。用户可以在数据库中拥有自己的对象,因此可以使用用户所有权来模仿某些模式行为,但这需要额外的工作量。
对于Sybase,正确的查询语法是:
SELECT [ Col1, Col2 | * ]
FROM [dbName].[ownerName.]TABLE
在你的情况下
SELECT CityName
FROM dbName.ownername.City
在Sybase ASE中,通常最佳做法是让所有对象都拥有'dbo',因此在这种情况下,您可以省略查询中的所有者:
SELECT CityName
FROM dbName..City
可以在Query Section of the Transact SQL Users Guide in the documentation.
中找到完整的查询语法和信息答案 1 :(得分:0)
您收到的错误消息来自MetaModel的查询解析器层。在它甚至触发查询之前,它正在数据库的元数据中搜索匹配的列和表名。
我注意到你正在使用命名空间“org.eobjects.metamodel”。如果可能的话,你应该升级到Apache MetaModel(“org.apache.metamodel”),因为MetaModel已经在Apache中引入了很多东西。包括很多查询解析器的改进。