JDBC MySQl不显示结果集

时间:2013-06-21 16:18:46

标签: java mysql jdbc

在我的代码中,My finally输出与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控制台的输出, 例如,我想看到"数据库已更改"执行后的消息"使用mydb"言。

2 个答案:

答案 0 :(得分:1)

你应该这样做:

while (resultset.next()) {

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

某些变量只代表您在表格中寻找的内容。 另外,我不确定“使用mydb”是否适用于JDBC。 如果使用类似

的命令字符串
("SELECT NAME FROM TABLE")

然后你必须使用像

这样的东西
System.out.println(resultset.getString("NAME")

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

答案 1 :(得分:1)

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

  

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

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

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

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

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