我正在爲「Minecraft」遊戲編寫一個Bukkit插件,一個服務器。我不知道如何編寫SQL,只是一些語法。MySQL和SQLite的類
我在尋找Java類來訪問MySQL和SQLite。該插件一次只能使用一個數據庫,在配置文件,MySQL或SQLite中設置。
我發現這一點:
import java.io.*;
import java.sql.*;
import java.util.logging.*;
import org.bukkit.plugin.*;
public class Db {
private final Plugin plugin;
private final String url;
private Logger log;
Connection connection = null;
ResultSet resultSet = null;
Statement statement = null;
public Db(final Plugin plugin, final String host, final String database,
final String user, final String password) {
this.plugin = plugin;
url = "jdbc:mysql://" + host + "/" + database + "?user=" + user
+ "&password=" + password;
log = plugin.getServer().getLogger();
initDriver("com.mysql.jdbc.Driver");
}
public Db(final Plugin plugin, final String filePath) {
this.plugin = plugin;
url = "jdbc:sqlite:" + new File(filePath).getAbsolutePath();
log = plugin.getServer().getLogger();
initDriver("org.sqlite.JDBC");
}
private void initDriver(final String driver) {
try {
Class.forName(driver);
} catch (final Exception e) {
log.severe("Database driver error:" + e.getMessage());
}
}
public int resultInt(ResultSet result, int column) {
if (result == null)
return 0;
try {
result.next();
int integer = result.getInt(column);
result.close();
return integer;
} catch (SQLException e) {
log.severe("Database result error: " + e.getMessage());
}
return 0;
}
public String resultString(ResultSet result, int column) {
if (result == null)
return null;
try {
result.next();
String string = result.getString(column);
result.close();
return string;
} catch (SQLException e) {
log.severe("Database result error: " + e.getMessage());
}
return null;
}
public ResultSet query(final String query) {
return query(query, false);
}
public ResultSet query(final String query, final boolean retry) {
try {
final Connection connection = DriverManager.getConnection(url);
final PreparedStatement statement = connection
.prepareStatement(query);
if (statement.execute())
return statement.getResultSet();
} catch (final SQLException e) {
final String msg = e.getMessage();
log.severe("Database query error: " + msg);
if (retry && msg.contains("_BUSY")) {
log.severe("Retrying query...");
plugin.getServer().getScheduler()
.scheduleSyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
query(query);
}
}, 20);
}
}
return null;
}
}
但我不知道如何關閉連接和語句。 在這段代碼中,我必須使用
base = new Db(this, getDataFolder() + File.separator + "SQLite.db");
但使用的代碼創建多個線程,並且給了我的錯誤。我必須找到一個可以關閉連接和聲明的課程。我只學了幾個星期的Java,而且我不太瞭解。
該代碼是有點不同我只能用 '鹼基=新DB(此,getDataFolder()+文件分割符+ 「SQLite.db」);' 然後只是 'ResultSet res9 = base.query(「Select blah blah」)' 如果我添加'Statement.close()'或'Connection.close()',那麼在eclipse中是一個錯誤。只有res9.close()有效。 – user2250333 2013-04-05 22:17:18