在不选择java中的数据库的情况下执行Mysql查询

时间:2015-01-15 13:16:54

标签: java mysql database jdbc

我想在不选择Java数据库的情况下执行MySQL查询。我可以直接在MySQL控制台中执行此操作,例如:

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

我可以在登录MySQL控制台后直接执行上述查询。我不会在这里使用use语句

use databasename;

我需要这样做,因为我将在一个查询中从两个不同的数据库中获取数据。 根据{{​​3}},我将DB URL作为jdbc:mysql:// localhost /

但它会抛出Exception

java.sql.SQLException: No database selected.

mysql控制台中相同的屏幕截图 enter image description here

任何使其有效的解决方案?

4 个答案:

答案 0 :(得分:1)

而不是

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?

答案 1 :(得分:1)

在您关注的教程中,他们发出CREATE DATABASE语句。这个语句是您可以在数据库上下文之外发出的极少数语句之一(我能想到的唯一一个语句是CREATE USER)。

即使是TEMPORARY表也必须附加到数据库。

必须为此操作选择任意数据库。你可能并不关心特别是哪一个(只要确保你对你选择的那个有写权限)。

如果确实不希望在连接时提供数据库,则可以在SQL语句中指定目标数据库:CREATE TEMPORARY TABLE [database].temptable

答案 2 :(得分:0)

试试这段代码:

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));  
}

现在您与数据库服务器建立连接,执行查询。我希望您的查询可以毫无问题地执行。

答案 3 :(得分:0)

似乎当您执行“从test.demo中选择*”时,实际上选择了“测试”数据库并在“演示”表中进行了查询。