簡體   English   中英

連接到MySQL數據庫Java

[英]Connecting to MySQL database java

我正在為多線程MySQL系統使用一些代碼。 它工作正常,將在半秒鍾內將條目的內容放入我的數據庫。 我的問題是,程序成功連接並寫入數據庫的速率並不高。 有時它會正常工作,而有時我會收到此錯誤,或類似的錯誤:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 27,697 milliseconds ago.  The last packet sent successfully to the server was 1 milliseconds ago.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3670)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3559)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4110)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
    at MySQL.putEntry(MySQL.java:46)
    at MySQL.main(MySQL.java:105)
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3119)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3570)
    ... 9 more

我真的不確定為什么會這樣嗎? 從一個地址執行太多語句? 任何人,這是我的代碼:

private final ThreadedSQL sql;
private final DatabaseConnection connection;
private PreparedStatement statement;

public Hiscores() {
    try {
        loadConfig();
    } catch (IOException e) {
        e.printStackTrace();
    }
    sql = new ThreadedSQL(config);
    connection = sql.getConnectionPool().nextFree();
}

public void putEntry(final Player player) {
    try {
        statement = connection.getConnection().prepareStatement(QUERY(player));
        statement.execute();
        statement.closeOnCompletion();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

我未包含的代碼無關緊要,使用java.sql.Connection。 有誰知道為什么會這樣嗎? 謝謝。

完成后,應關閉語句和連接,否則資源池可能已耗盡或連接可能超時。 我建議從某些JDBC池中獲得新的連接。 幾年前,我曾經在servlets環境中使用過proxool。 如果您使用的是J2EE,則應用程序服務器將為您執行此操作,但是您必須使用DataSource。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM