0

在我的代码中,我的最终输出与 MySQl 控制台输出不同:

public class d3 {

Connection con;
String dbName = "mydb";
String dbUsername = "root";
String dbPassword = "2323";
String dbUrl = "jdbc:mysql://localhost/";

public d3() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Find database successfuly");
    } catch (Exception e) {
        System.err.println("Unable to find and load driver");
        System.exit(1);
    }
}

public void connectToDB() {
    try {
        con = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
        System.out.println("Connect to database succesfully");
    } catch (SQLException e) {
        System.out.println("Can not connect to database");
        System.exit(1);
    }
}

public void excuteSQL() {
    String sqlString1 = "use mydb";
    String sqlString2 = "show tables";
    String result;
    try {
        Statement st1 = con.createStatement();

        ResultSet result1 = st1.executeQuery(sqlString1);
         while(result1.next()){
         result = result1.getString(dbName);
         System.out.println(result1);
        }
    } catch (SQLException sqle) {
        System.out.println("Can not excute sql statement");
    }
}

public static void main(String[] args) {
    d3 ddd = new d3();
    ddd.connectToDB();
    ddd.excuteSQL();
}
}

我的输出:

Find database successfuly
Connect to database succesfully
Result set representing update count of 0

但是,我想变成这样:

Find database successfuly
Connect to database succesfully
Database changed      // this is shown in console

我将逐步比较 mysql 控制台和我的 IDE 控制台的输出,例如,我想在执行“use mydb”语句后看到“数据库已更改”消息。

4

2 回答 2

1

你应该做:

while (resultset.next()) {

System.out.println(resultset.getString("somevariable")
}

某些变量仅代表您在表中查找的内容。另外,我不确定“使用 mydb”是否适用于 JDBC。如果您使用类似的命令字符串

("SELECT NAME FROM TABLE")

那么你将不得不使用类似的东西

System.out.println(resultset.getString("NAME")

在名为“NAME”的表列中查找内容。

于 2013-06-21T16:41:39.863 回答
1

您正在执行use mydb,它不会产生结果集(它不是查询)。此外,您不应该使用此命令来设置您当前的数据库,JDBC 要求您使用 JDBC 方法。请参阅 java.sql.Connection 的 javadoc:

注意:在配置时Connection,JDBC 应用程序应该使用适当的Connection方法,例如setAutoCommitsetTransactionIsolation。当有可用的 JDBC 方法时,应用程序不应直接调用 SQL 命令来更改连接的配置。

相当于USE mydbis Connection.setCatalog("mydb"),调用此方法确保驱动程序处于一致状态。如果您查看 MySQL Connector/J 中的实际实现,此方法最终会调用USE mydb,但它还会对Connection对象的状态进行额外的检查和更改。

当您已经知道要使用哪个数据库时,只需将其直接包含在连接 URL 中即可:

String dbUrl = "jdbc:mysql://localhost/mydb";

同样,您不应该使用SHOW TABLES来获取有关表的信息,DatabaseMetaData.getTables()而是使用。在 MySQL 特定命令上使用 JDBC 方法使您的程序更具可移植性。

于 2013-06-22T07:17:30.523 回答