如何使用Java连接到MySQL Web服务器?

时间:2014-07-04 14:51:28

标签: java mysql

好的,所以这里有一点背景知识:

我目前正在尝试开发推荐应用程序。我们的网站上有一个链接,用户可以将他们的朋友推荐给我们的游戏服务器(Minecraft)。它会将引荐来源的信息输入数据库(托管在我的网站上)并发送链接给朋友"。朋友点击链接并输入他们的信息(也存储在数据库中)。所有这一切都很有效! (耶!)所以,现在是Java插件!

应该发生什么......

我有一个事件监听器,只要用户登录游戏就会触发。从本质上讲,它会检查用户信息的数据库,如果用户符合标准,那么它将奖励他们的额外推荐好东西。

我现在要做的是什么......

现在,我基本上试图让它连接并显示行的id,以及启用插件时的ref_id(引荐ID)。但是,我收到以下错误:

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

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

所以,不用多说,这是我的单一Java文档。当然,这不是我的数据库的真实用户名和登录信息。 ;)但我希望有人能告诉我什么是错的,因为我现在已经迷失了。

package com.arithia.plugins;

import java.sql.*;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.plugin.java.JavaPlugin;


public class ArithiaReferrals extends JavaPlugin implements Listener {
    // JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://66.147.244.122:3306/graphja6_referrals";

    // Database credentials
    static final String USER = "fake_username";
    static final String PASS = "fake_password";

    @Override
    public void onEnable() {
        Connection conn = null;
        Statement stmt = null;

        try {
            // STEP 2: Register JDBC driver
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            // STEP 3: Open a connection
            getLogger().info("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // STEP 4: Execute a query
            getLogger().info("Creating statement...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, ref_id FROM referred_users";
            ResultSet rs = stmt.executeQuery(sql);

            // STEP 5: Extract data from result set
            while(rs.next()) {
                // Retrieve by column name
                int id = rs.getInt("id");
                int ref_id = rs.getInt("ref_id");

                // Display values
                getLogger().info("ID: " + id);
                getLogger().info("Referral ID: " + ref_id);
            }

            // STEP 6: Clean-up environment
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se) {
            // Handle errors for JDBC
            se.printStackTrace();
        }finally{
            // finally block used to close resources
            try{
                if(stmt!=null)
                    stmt.close();
            }catch(SQLException se2){
            } // nothing we can do
            try {
                if(conn!=null)
                    conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            } // End Finally try
        } // end try
        getLogger().info("Goodbye!");
        getLogger().info("The [Arithia Referrals] plugin was enabled!");
    }

    @Override
    public void onDisable() {
        getLogger().info("The [Arithia Referrals] plugin was disabled!");
    }

    @EventHandler
    public void onPlayerLogin(PlayerLoginEvent e) {
        // "Check database for player..."
    }
}

其他信息......

数据库名称: graphja6_referrals

数据库表: referenced_users

注意:我不完全确定DB_URL是否正确... 66.147.244.122是正确的IP,但我不完全确定港口或其他任何东西,所以如果有人能证明这是正确的,我会感激。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好的,所以我只是个白痴。

对于其他任何收到此错误的人,您需要将远程连接的IP列入白名单才能生效。这是一个防火墙的东西,取决于你主持的人,可能是一个"远程MySQL" cPanel中的选项。将IP添加到尝试访问数据库的远程客户端,因此它将被列入白名单。

感谢所有试图提供帮助的人。 < 3