JDBC MYSQL连接问题

时间:2014-06-05 07:10:44

标签: java sql jdbc

我终于能够通过连接到MYSQL数据库的控制台和记事本创建一个简单的java程序。但是当我使用

访问数据库时
conn = DriverManager.getConnection(DB_URL,USER,PASS);
stmt = conn.createStatement();

我的代码只是在它停止执行之前一直运行1或2分钟输出大量信息(我注意到某种痕迹)。

这是我的代码:

public class Database1{

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/emp?connectTimeout=3000";

    static final String USER = "root";
    static final String PASS = "admin";

    public static void main(String[] args) {

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs=null;

        try{

            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch(Exception e){

            System.out.println("Unable to connect!!");
        }

        System.out.println("Connecting to database...");

        try{

            conn = DriverManager.getConnection(DB_URL,USER,PASS);
        } catch(Exception e){
            System.out.println("Unable to access Database!!");
        }

        System.out.println("Creating statement...");

        try{
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT * FROM Employees");
        }catch(Exception e){
            System.out.println("Unable to access Database!!");
        }
        System.out.println("ID             NAME         ");
    }
}

以下是我得到的输出(我只能复制屏幕末尾的详细信息):

          ..............ql.jdbc.ByteArrayBuffer.getCapacity(..) returning 16384
Thu Jun 05 12:28:53 IST 2014 TRACE:       <--  MysqlIO.java:2357 com.mysql.jdbc.
MysqlIO.reclaimLargeReusablePacket(..) returning null
Thu Jun 05 12:28:53 IST 2014 TRACE:       --> ResultSet.java:6643 com.mysql.jdbc
.ResultSet.toString()
Thu Jun 05 12:28:53 IST 2014 TRACE:       <--  ResultSet.java:6643 com.mysql.jdb
c.ResultSet.toString(..) returning "com.mysql.jdbc.ResultSet@546ccad7"
Thu Jun 05 12:28:53 IST 2014 TRACE:      <--  MysqlIO.java:1411 com.mysql.jdbc.M
ysqlIO.readAllResults(..) returning com.mysql.jdbc.ResultSet@546ccad7
Thu Jun 05 12:28:53 IST 2014 TRACE:      --> ResultSet.java:6643 com.mysql.jdbc.
ResultSet.toString()
Thu Jun 05 12:28:53 IST 2014 TRACE:      <--  ResultSet.java:6643 com.mysql.jdbc
.ResultSet.toString(..) returning "com.mysql.jdbc.ResultSet@546ccad7"
Thu Jun 05 12:28:53 IST 2014 TRACE:     <--  MysqlIO.java:1634 com.mysql.jdbc.My
sqlIO.sqlQueryDirect(..) returning com.mysql.jdbc.ResultSet@546ccad7
Thu Jun 05 12:28:53 IST 2014 TRACE:     --> ConnectionProperties.java:1901 com.m
ysql.jdbc.ConnectionProperties.getMaintainTimeStats()
Thu Jun 05 12:28:53 IST 2014 TRACE:     <--  ConnectionProperties.java:1901 com.
mysql.jdbc.ConnectionProperties.getMaintainTimeStats(..) returning true
Thu Jun 05 12:28:53 IST 2014 TRACE:     --> ConnectionProperties.java:1809 com.m
ysql.jdbc.ConnectionProperties.getGatherPerformanceMetrics()
Thu Jun 05 12:28:53 IST 2014 TRACE:      --> ConnectionProperties.java:83 com.my
sql.jdbc.ConnectionProperties$BooleanConnectionProperty.getValueAsBoolean()
Thu Jun 05 12:28:53 IST 2014 TRACE:      <--  ConnectionProperties.java:83 com.m
ysql.jdbc.ConnectionProperties$BooleanConnectionProperty.getValueAsBoolean(..) r
eturning false
Thu Jun 05 12:28:53 IST 2014 TRACE:     <--  ConnectionProperties.java:1809 com.
mysql.jdbc.ConnectionProperties.getGatherPerformanceMetrics(..) returning false
Thu Jun 05 12:28:53 IST 2014 TRACE:     --> ResultSet.java:6643 com.mysql.jdbc.R
esultSet.toString()
Thu Jun 05 12:28:53 IST 2014 TRACE:     <--  ResultSet.java:6643 com.mysql.jdbc.
ResultSet.toString(..) returning "com.mysql.jdbc.ResultSet@546ccad7"
Thu Jun 05 12:28:53 IST 2014 TRACE:    <--  Connection.java:2964 com.mysql.jdbc.
Connection.execSQL(..) returning com.mysql.jdbc.ResultSet@546ccad7
Thu Jun 05 12:28:53 IST 2014 TRACE:    --> ResultSet.java:6643 com.mysql.jdbc.Re
sultSet.toString()
Thu Jun 05 12:28:53 IST 2014 TRACE:    <--  ResultSet.java:6643 com.mysql.jdbc.R
esultSet.toString(..) returning "com.mysql.jdbc.ResultSet@546ccad7"
Thu Jun 05 12:28:53 IST 2014 TRACE:   <--  Connection.java:2949 com.mysql.jdbc.C
onnection.execSQL(..) returning com.mysql.jdbc.ResultSet@546ccad7
Thu Jun 05 12:28:53 IST 2014 TRACE:   --> ResultSet.java:5634 com.mysql.jdbc.Res
ultSet.getUpdateID()
Thu Jun 05 12:28:53 IST 2014 TRACE:   <--  ResultSet.java:5634 com.mysql.jdbc.Re
sultSet.getUpdateID(..) returning -1
Thu Jun 05 12:28:53 IST 2014 TRACE:   --> ConnectionProperties.java:1638 com.mys
ql.jdbc.ConnectionProperties.getCacheResultSetMetadata()
Thu Jun 05 12:28:53 IST 2014 TRACE:   <--  ConnectionProperties.java:1638 com.my
sql.jdbc.ConnectionProperties.getCacheResultSetMetadata(..) returning false
Thu Jun 05 12:28:53 IST 2014 TRACE:   --> ResultSet.java:6643 com.mysql.jdbc.Res
ultSet.toString()
Thu Jun 05 12:28:53 IST 2014 TRACE:   <--  ResultSet.java:6643 com.mysql.jdbc.Re
sultSet.toString(..) returning "com.mysql.jdbc.ResultSet@546ccad7"
Thu Jun 05 12:28:53 IST 2014 TRACE:  <--  Statement.java:868 com.mysql.jdbc.Stat
ement.executeQuery(..) returning com.mysql.jdbc.ResultSet@546ccad7
ID             NAME

C:\JavaP>   

这里的任何人都可以帮助我理解输出的全部内容以及如何控制它...

2 个答案:

答案 0 :(得分:0)

您的日志

正如我在Dropbox的代码中看到的那样,你使用的是PostgreSQL数据库 - 而不是你问题中提到的MySQL数据库!这有所不同。

查看http://jdbc.postgresql.org/development/privateapi/org/postgresql/Driver.html

这是您使用的驱动程序的文档。此驱动程序具有记录器和特定日志级别(在您的情况下为trace)。您可以设置日志级别甚至记录器。

org.postgresql.Driver.setLogLevel(java.util.logging.Level.INFO);

一些一般事物

您的代码和输出看起来很好。那么,您不会关闭连接和语句,但除此之外,它似乎有效。

你建立了一个连接,你创建了一个声明,就像我看到的那样,没有例外。最后你提出了一个查询,但你对结果一无所知。这就是为什么你什么都没看到的原因。然后你的程序结束并停止(因为代码完成)。

但是,我建议您稍微更改一下代码。您可以简单地记下所有可能的异常

catch(Exception e){
    System.out.println("Unable to access Database!!");
}

如果你这样做,你永远不会知道出了什么问题。相反,打印异常,它是唯一可以告诉你发生了什么的信息:

catch(Exception e){
    System.out.println("Unable to access Database!!");
    e.printStackTrace();
}

现在你应该只考虑,如果你的程序可以继续发生这种异常。例如。如果你无法连接到你的数据库,继续是没用的。不起作用!在这种情况下,最好离开(或处理异常):

catch(Exception e){
    System.out.println("Unable to access Database!!");
    e.printStackTrace();
    return;
}

最后但并非最不重要的是,您需要使用查询结果来查看内容:

rs = stmt.executeQuery("SELECT * FROM Employees");
while (rs.next()) {
    // get your stuff
}

答案 1 :(得分:0)

public class DBConnect {

Statement st;
ResultSet rs;

public DBConnect() {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/db_name", "root", "root");
        st = con.createStatement();
    } catch (Exception e) {
    }
}

public ResultSet readData(String s) {
    try {
        System.out.println("SQL : : : " + s);
        rs = st.executeQuery(s);
    } catch (Exception e) {
    }
    return rs;
}

public int putData(String s) {
    int i = 0;
    try {
        System.out.println("SQL : : : " + s);
        i = st.executeUpdate(s);
    } catch (Exception e) {}
    return i;
}
}