好的,所以这里有一点背景知识:
我目前正在尝试开发推荐应用程序。我们的网站上有一个链接,用户可以将他们的朋友推荐给我们的游戏服务器(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,但我不完全确定港口或其他任何东西,所以如果有人能证明这是正确的,我会感激。
非常感谢你的帮助。
答案 0 :(得分:0)
好的,所以我只是个白痴。
对于其他任何收到此错误的人,您需要将远程连接的IP列入白名单才能生效。这是一个防火墙的东西,取决于你主持的人,可能是一个"远程MySQL" cPanel中的选项。将IP添加到尝试访问数据库的远程客户端,因此它将被列入白名单。
感谢所有试图提供帮助的人。 < 3