MYSQL - SHOW VARIABLE LIKE'%version%'在我的java应用程序中不起作用

Ani*_*quo 3 java mysql exception

请问我有以下问题,当我在mysql命令行控制台中运行SHOW VARIABLES LIKE'%version%'时它运行得非常好,但是当我在java应用程序中运行相同的代码时,我正在处理它会产生以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'字段列表'中的未知列'VARIABLES'

ConnectionHelper.setDatabaseName('information_schema');

Statement statement = ConnectionHelper.getStatement();

ResultSet = statement.executeQuery ("SHOW VARIABLES LIKE '%version%'");

String serverVersion = null;

while (resultSet.next()){

  serverVersion = resultSet.getString(3);

}
Run Code Online (Sandbox Code Playgroud)

ConnectionHelper只是一个类,它创建并建立与作为参数传递给setDatabaseName()方法的任何数据库的连接.我甚至尝试过不设置任何数据库,因为查询在mysql命令行控制台中运行,即使没有选择任何数据库,但仍会产生相同的错误.我真的需要帮助.

pet*_*erm 6

您可以使用INFORMATION_SCHEMA GLOBAL_VARIABLES和(或)这样的SESSION_VARIABLES表

SELECT * 
  FROM information_schema.global_variables 
 WHERE variable_name like '%version%';
Run Code Online (Sandbox Code Playgroud)

样本输出:

|           VARIABLE_NAME |                       VARIABLE_VALUE |
|-------------------------|--------------------------------------|
|          INNODB_VERSION |                               5.5.32 |
|        PROTOCOL_VERSION |                                   10 |
|         VERSION_COMMENT | MySQL Community Server (GPL) by Remi |
|                 VERSION |                               5.5.32 |
| VERSION_COMPILE_MACHINE |                               x86_64 |
|      VERSION_COMPILE_OS |                                Linux |
|  SLAVE_TYPE_CONVERSIONS |                                      |

这是SQLFiddle演示


更新(根据您的意见).您可以使用IN子句指定所需的所有变量名称

SELECT * 
  FROM information_schema.global_variables 
 WHERE variable_name IN('version', 'hostname', 'port');
Run Code Online (Sandbox Code Playgroud)

样本输出:

| VARIABLE_NAME | VARIABLE_VALUE |
|---------------|----------------|
|       VERSION |         5.5.32 |
|      HOSTNAME |            db2 |
|          PORT |           3306 |

这是SQLFiddle演示


Dur*_*dal 5

如果您只需要数据库版本,可以尝试运行它:

SELECT VERSION();
Run Code Online (Sandbox Code Playgroud)

我在本地测试了这个

sql = "SELECT VERSION() AS version";
rs = stmt.executeQuery(sql);
while (rs.next()) {
     System.out.println(rs.getString("version"));
}
Run Code Online (Sandbox Code Playgroud)

结果: 5.6.13


您还可以像这样选择任何 MYSQL 变量:

SELECT @@version AS version;
Run Code Online (Sandbox Code Playgroud)

你在我机器上的原始查询结果是:

'innodb_version','5.6.13'
'protocol_version','10'
'slave_type_conversions',''
'version','5.6.13'
'version_comment','Source distribution'
'version_compile_machine','x86_64'
'version_compile_os','osx10.8'
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样一个一个地选择每个全局变量:

SELECT @@version as version, 
       @@innodb_version as innodb_version, 
       @@verision_compile_os as version_compile_os
       @@protocol_version as protocol_version 
       @@version_compile_machine as version_compile_machine
.....
Run Code Online (Sandbox Code Playgroud)