来自Unity JDBC download page:
如果SQL查询需要MongoDB不支持的连接或函数,则查询将提升为UnityJDBC(试用版)。 UnityJDBC试用版没有到期日期,并且完全正常运行,但它最多只能返回100个结果。
但是,当我尝试使用任何语法(如
)连接两个表时SELECT * from a, b WHERE a.id = b.id
SELECT * from a INNER JOIN b ON a.id = b.id
SELECT * from a INNER JOIN b USING (id)
结果如下:
Exception: java.sql.SQLException: ERROR: No schema defined. The default schema location is _schema in the current database. You need write permission to create this collection. Otherwise, use the schema parameter to set a file location (e.g. schema=mongo.xml) to store the schema. See connection parameters at http://www.unityjdbc.com/mongojdbc/ for more details.
java.sql.SQLException: ERROR: No schema defined. The default schema location is _schema in the current database. You need write permission to create this collection. Otherwise, use the schema parameter to set a file location (e.g. schema=mongo.xml) to store the schema. See connection parameters at http://www.unityjdbc.com/mongojdbc/ for more details.
at mongodb.conn.ServerConnection.processMongoWithUnity(Unknown Source)
at mongodb.conn.ServerConnection.executeQuery(Unknown Source)
at mongodb.jdbc.MongoStatement.executeQuery(Unknown Source)
at mongodb.ExampleMongoJDBC.doQuery(ExampleMongoJDBC.java:222)
at mongodb.ExampleMongoJDBC.main(ExampleMongoJDBC.java:66)
好的,所以我查看了自述文件,发现它提到了代码/ test / dspec /文件夹,其中包含一些与模式相关的文件。我打开了几个,它们是所有集合中非常详细的xml文件,将它们映射到关系数据类型。
我是否必须写出其中一个,或者有没有办法自动生成它?
答案 0 :(得分:0)
我收到了Unity团队的(快速)回复。
MongoDB JDBC驱动程序有两种模式。对于单个集合查询,它不构建架构。对于涉及联接或表达式的查询,它构建一个模式,默认情况下将其存储在当前Mongo数据库的_schema集合中。如果您没有写入数据库的权限,则会引发错误。
如错误中所述,您可以将架构参数设置为本地文件名(例如mongo.xml),并将其存储在您的计算机上而不是Mongo数据库中。您还可以使用具有写入权限的帐户。
要使其工作,请将schema = mongo.xml添加到您的连接URL,如下所示:
jdbc:mongo://localhost/dbname?schema=mongo.xml?rebuildschema=true
第一次完成此操作后,您可以删除rebuildschema = true,或者每次都重建它。
我唯一困惑的是我使用的数据库不需要身份验证。我甚至让一个具有写权限的用户连接到他,但仍然收到了上述错误。
- 编辑
我意识到你也可以做jdbc:mongo://localhost/dbname?rebuildschema=true
。如果尚未创建架构,则将抛出先前的错误。