Java:无法从MySQL使用“ USE”关键字?

时间:2019-05-04 10:41:22

标签: java mysql mysql-workbench

我有两个SQL文件:

query1.sql

SELECT * FROM laptop_store.gpu;

query2.sql

USE laptop_store;
SELECT * FROM gpu

在MySQL Workbench 8.0 CE中都执行将显示相同的结果:

result:

当我从两个SQL代码复制所有内容并在Java中运行

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class NewClass {
    static String queryString1 = "SELECT * FROM laptop_store.gpu";

    static String queryString2 = "USE laptop_store;\n" +
                                 "SELECT * FROM gpu";

    public static void main(String[] args) {
       try{      
          Class.forName("com.mysql.cj.jdbc.Driver");  
          Connection con = DriverManager.getConnection( 
              "jdbc:mysql://localhost:3306/laptop_store","root","tomnisa123");          

          Statement statement = con.createStatement();   

          //Change SQL code here:
          ResultSet rs = statement.executeQuery(queryString1); 

          ResultSetMetaData rsmd = rs.getMetaData();

          int colCount = rsmd.getColumnCount();

            while(rs.next()) {
                for (int i = 1; i <= colCount; i++){          
                    System.out.print(rs.getString(i) + "  ");
                }
                System.out.println();
            }

          con.close();  

       } catch(Exception e){ 
        System.out.println(e);
       }  
    }  
}

只有第一个是成功

success

但是第二个显示错误:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM gpu' at line 2

为什么我不能使用MySQL的“ USE”关键字?

1 个答案:

答案 0 :(得分:3)

显然,问题在于您试图在单个executeQuery调用中执行两个SQL语句。你不能那样做。在单独的execute调用中运行“使用”。

但是问题是,为什么要使用use语句?

  • 如果您出于特殊原因使用它……请不要。

  • 如果使用它来确保使用正确的数据库,则没有必要。在连接URL中指定要使用的数据库/架构。

     "jdbc:mysql://localhost:3306/laptop_store"
                                  ^^^^^^^^^^^^
    
  • 如果使用它在数据库/架构之间动态切换,则最好为每个数据库使用单独的连接。