我想在不选择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控制台中相同的屏幕截图
任何使其有效的解决方案?
答案 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中选择*”时,实际上选择了“测试”数据库并在“演示”表中进行了查询。