我一直在做我的功課,我決定將我的vote4cash類管理mysql的vote4cash獎勵系統重新寫入一個名爲MysqlManager的新類。我所做的MysqlManager類需要允許Commands類連接到mysql - 完成,它需要允許Commands類執行查詢 - 我需要幫助這個部分。我已經取得了更多的進展,但是我仍然停留在類的最後一個最重要的部分之一上,允許命令類執行查詢。使用此自定義方法執行JDBC MySQL查詢
在我MysqlManager類我已經把代碼連接到MySql下
public synchronized static void createConnection() {
現在我只需要把它允許類的命令下,這個執行查詢以及代碼。我已經研究並嘗試過一段時間了,但我絕對沒有運氣。
整個MysqlManager類:
package server.util;
/*
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
*/
import java.sql.*;
import java.net.*;
import server.model.players.Client;//Will be needed eventually so that I can reward players who have voted.
/**
* MySQL and Vote4Cash Manager
* @author Cloudnine
*
*/
public class MysqlManager {
/** MySQL Connection */
public static Connection conn = null;
public static Statement statement = null;
public static ResultSet results = null;
public static Statement stmt = null;
public static ResultSet auth = null;
public static ResultSet given = null;
/** MySQL Database Info */
public static String DB = "vote4gold";
public static String URL = "localhost";
public static String USER = "root";
public static String PASS = "";
public static String driver = "com.mysql.jdbc.Driver"; //Driver for JBDC(Java and MySQL connector)
/** Connects to MySQL Database*/
public synchronized static void createConnection() {
try {
Class.forName(driver);
conn = DriverManager.getConnection(URL + DB, USER, PASS);
conn.setAutoCommit(false);
stmt = conn.createStatement();
Misc.println("Connected to MySQL Database");
}
catch(Exception e) {
//e.printStackTrace();
}
}
public synchronized static void destroyConnection() {
try {
statement.close();
conn.close();
} catch (Exception e) {
//e.printStackTrace();
}
}
public synchronized static ResultSet query(String s) throws SQLException {
try {
if (s.toLowerCase().startsWith("select")) {
ResultSet rs = statement.executeQuery(s);
return rs;
} else {
statement.executeUpdate(s);
}
return null;
} catch (Exception e) {
destroyConnection();
createConnection();
//e.printStackTrace();
}
return null;
}
}
我命令的片段:
if (playerCommand.equals("claimreward")) {
try {
PreparedStatement ps = DriverManager.getConnection().createStatement("SELECT * FROM votes WHERE ip = hello AND given = '1' LIMIT 1");
//ps.setString(1, c.playerName);
ResultSet results = ps.executeQuery();
if(results.next()) {
c.sendMessage("You have already been given your voting reward.");
} else {
ps.close();
ps = DriverManager.getConnection().createStatement("SELECT * FROM votes WHERE ip = hello AND given = '0' LIMIT 1");
//ps.setString(1, playerCommand.substring(5));
results = ps.executeQuery();
if(results.next()) {
ps.close();
ps = DriverManager.getConnection().createStatement("UPDATE votes SET given = '1' WHERE ip = hello");
//ps.setString(1, playerCommand.substring(5));
ps.executeUpdate();
c.getItems().addItem(995, 5000000);
c.sendMessage("Thank you for voting! You've recieved 5m gold!");
} else {
c.sendMessage("You haven't voted yet. Vote for 5m gold!");
}
}
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return;
了命令的工作: 當玩家類型::命令名(在這種情況下,claimreward)命令功能將被執行。這不是整個命令類,只是我認爲需要發佈的部分才能爲我的問題提供足夠詳細的答案。
注:我有我所有的進口。
注意:Mysql連接成功。
注:我需要使上述命令代碼片段能夠執行mysql查詢。
注意:我更喜歡直接從命令執行查詢,而不是從MysqlManager執行,但我會盡我所能解決此問題。
我覺得我已經詳細而且相關地描述了我的問題,但如果您需要更多的信息或理解任何事情,請告訴我,我會盡量做得更具體。
謝謝您花時間檢查我的問題。如果您能夠提供幫助,請提前致謝。 -Alex
你不應該使用root作爲mysql用戶(只是順便說一句,並且與你的問題無關) – 2012-07-25 20:39:50
@AngeloNeuschitzer它是localhost,沒關係。這不是我將來要使用的。 – 2012-07-25 20:54:18
你說這是作業,請刪除其中一個標籤(例如查詢)並將作業標籤添加到它。 – 2012-07-25 20:56:28