在java中执行mysql查询而不选择数据库

kninwzqo  于 2021-07-03  发布在  Java
关注(0)|答案(4)|浏览(380)

我想执行mysql查询而不选择java中的数据库。我可以直接在mysql控制台中这样做,比如:

CREATE TEMPORARY TABLE  temptable
As(select REPLACE(a.keywordSupplied,"www.","") as keywordSupplied
from db1.table1 
;

我可以在登录mysql控制台后直接执行上面的查询 use 在此声明

use databasename;

我需要这样做,因为我将在一个查询中从两个不同的数据库获取数据。根据http://www.tutorialspoint.com/jdbc/jdbc-create-database.htm 我给了db url作为jdbc:mysql://本地主机/
但它抛出了一个 Exception ```
java.sql.SQLException: No database selected.

mysql控制台中相同的屏幕截图
![](https://i.stack.imgur.com/uyaCM.png)
有什么解决办法吗?
g2ieeal7

g2ieeal71#

而不是

DriverManager.getConnection("jdbc:mysql://localhost/", USER, PASS);

用途:

DriverManager.getConnection("jdbc:mysql://localhost/db1", USER, PASS);//specify the db within URL itself.btw dont you have port in url?
3duebb1j

3duebb1j2#

似乎当您执行“select*from test.demo;”时,它实际上选择“test”数据库并在“demo”表中执行查询。

pbpqsu0x

pbpqsu0x3#

在下面的教程中,他们发布了 CREATE DATABASE 声明。这个语句是可以在数据库上下文之外发出的极少数语句之一(我唯一能想到的另一个语句是 CREATE USER ).
甚至一个 TEMPORARY 表必须附加到数据库。
必须为此操作选择任意数据库。您可能并不关心哪一个是特别的(只需确保您对所选的一个具有写入权限:)
如果确实不想在连接时提供数据库,可以在sql语句中指定目标数据库: CREATE TEMPORARY TABLE [database].temptable .

aydmsdu9

aydmsdu94#

请尝试以下代码:

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
static final String DB_URL = "jdbc:mysql://localhost:3306/";
static final String USER = "root";
static final String PASS = "";
Class.forName(JDBC_DRIVER);
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println(conn);
conn.setCatalog("mysql");
PreparedStatement stmt1 = conn.prepareStatement("CREATE TEMPORARY TABLE  temptable (select test.a.id as id, students.a.id as sid from test.a join students.a on test.a.id = students.a.id)");
stmt1.execute();
stmt1 = conn.prepareStatement("select * from temptable");
ResultSet set1 = stmt1.executeQuery();
while(set1.next()){
    System.out.println(set1.getString(1));  
}

现在您已经与数据库服务器建立了连接,可以执行查询了。我希望你的查询能顺利执行。

相关问题