将数据库绑定到现有JDBC连接

时间:2015-01-13 15:17:19

标签: java mysql

我正在制作Java MySQL CLI,而且我遇到了数据库选择问题。当我连接到数据库服务器时,我没有包含数据库

Console console = System.console();
String host = console.readLine("MySQL Host: ");
host = "jdbc:mysql://"+host+":3306/";

因为我希望用户能够自己选择数据库。我有一个listDatabases函数完全正常但如果我想查询表,我会收到以下错误:

Jan 13, 2015 4:06:40 PM com.user.package.MySQL listTables
SEVERE: No database selected
java.sql.SQLException: No database selected
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1446)
    at com.user.package.MySQL.listTables(MySQL.java:92)
    at com.user.package.MySQL.select(MySQL.java:81)
    at com.user.package.Main.main(Main.java:52)

当用户选择表时,执行以下功能:

public void useDatabase() {
    Statement useStatement = null;
    ResultSet use = null;
    String database = this.getDatbase();
    try {
        useStatement = this.getCon().createStatement();
        use = useStatement.executeQuery("USE "+database);
    }
    catch (SQLException ex) {
        Logger lgr = Logger.getLogger(MySQL.class.getName());
        lgr.log(Level.SEVERE, ex.getMessage(), ex);
    }
}

getCon函数只返回当前的数据库连接。

但显然没有做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

通常,USE命令是特定于连接的 - 如果您使用getCon方法请求新连接,然后将其处理掉,则下一个(新)连接将恢复为no选定的架构。

用于选择要在现有连接上使用的模式的备用JDBC函数是:

connection.setCatalog(databaseName);

答案 1 :(得分:0)

数据库连接字符串还必须包含模式名称,如:
" JDBC:MySQL的://本地主机:3306 /测试" - test是模式名称。

在一个Mysql实例下,可以有几个数据库,请注意。