我有两个SQL文件:
query1.sql
SELECT * FROM laptop_store.gpu;
query2.sql
USE laptop_store;
SELECT * FROM gpu
在MySQL Workbench 8.0 CE中都执行将显示相同的结果:
当我从两个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);
}
}
}
只有第一个是成功
。
但是第二个显示错误:
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”关键字?
答案 0 :(得分:3)
显然,问题在于您试图在单个executeQuery
调用中执行两个SQL语句。你不能那样做。在单独的execute
调用中运行“使用”。
但是问题是,为什么要使用use
语句?
如果您出于特殊原因使用它……请不要。
如果使用它来确保使用正确的数据库,则没有必要。在连接URL中指定要使用的数据库/架构。
"jdbc:mysql://localhost:3306/laptop_store"
^^^^^^^^^^^^
如果使用它在数据库/架构之间动态切换,则最好为每个数据库使用单独的连接。