mysql - 当 useInformationSchema 为真时,DatabaseMetadata.getImportedKeys() 在 where 子句中抛出列 'REFERENCED_TABLE_NAME' 不明确
问题描述
我正在尝试使用DatabaseMetaData检索 MySQL 数据库上的表的键,并尝试使用 InformationSchema 来执行此操作。MySQL 配置属性
import java.sql.*
class DataLoader {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"
static final String DB_URL = "jdbc:mysql://localhost:3306/mydb?useInformationSchema=true"
static final String USER = "user"
static final String PASS = "password"
static final String DB = "mydb"
public static void main(String[] args) {
Connection conn = null
Statement stmt = null
try {
Class.forName(JDBC_DRIVER)
conn = DriverManager.getConnection(DB_URL, USER, PASS)
println "Database Product Name: " + conn.getMetaData().getDatabaseProductName()
println "Database Product Version: " + conn.getMetaData().getDatabaseProductVersion()
println "JDBC Driver: " + conn.getMetaData().getDriverName()
println "Driver Version: " + conn.getMetaData().getDriverVersion()
ResultSet importedKeysRS = conn.getMetaData().getImportedKeys(DB, null, "user")
} catch (Exception e) {
e.printStackTrace()
} finally {
try {
if (stmt != null) {
stmt.close()
conn.close()
}
} catch (SQLException se) {
}// do nothing
try {
if (conn != null)
conn.close()
} catch (SQLException se) {
se.printStackTrace()
}
}
}
}
当我执行上面的 groovy 代码时,以下是抛出的异常。
Database Product Name: MySQL
Database Product Version: 5.6.15-rel63.0-log
JDBC Driver: MySQL-AB JDBC Driver
Driver Version: mysql-connector-java-5.1.6 ( Revision: ${svn.Revision} )
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'REFERENCED_TABLE_NAME' in where clause is ambiguous
at com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema.executeMetadataQuery(DatabaseMetaDataUsingInfoSchema.java:50)
at com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema.getImportedKeys(DatabaseMetaDataUsingInfoSchema.java:780)
当我useInformationSchema=true
从 JDBC URL 中删除属性时,它可以正常工作,但执行时间太长getImportedKeys()
我该如何启用useInformationSchema
?
如果我不能使用 property useInformationSchema
,我该怎么做才能使查询getImportedKeys()
和getExportedKeys()
运行得更快?
解决方案
推荐阅读
- sql - 如何以 first_name 作为字母数字值提取所有客户的列表
- python - 如何使用 tf.data.Dataset 对象的 map 或 filter 或 reduce 方法修改顺序数据?
- javascript - 如何在javascript中创建列表
- python - 为 Keras 顺序模型格式化 networkx 数据
- django - Django:用另一个表中的字段注释(一对多)
- node.js - 带有 axios 的 Nodemon 服务器 - 无法发送
- python - 在类中使用 Beautiful Soup 查找字符串
- apache-spark - Spark Streaming - Kafka 集成
- javascript - 材料表列标题旁边的添加按钮
- reactjs - 创建新的 React 应用程序时遇到麻烦