"Minecraft"게임용 서버 인 Bukkit 플러그인을 프로그래밍하고 있습니다. 나는 SQL을 쓰는 법을 배웠다.MySQL 및 SQLite 클래스
MySQL 및 SQLite에 액세스하기위한 Java 클래스를 찾고 있습니다. 플러그인은 한 번에 하나의 데이터베이스만을 사용하며 설정 파일 인 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");
을 사용하지만, 그 코드를 사용하여 여러 개의 쓰레드를 생성하고 나에게 오류를 제공해야합니다. 연결과 진술을 닫을 수있는 수업을 찾아야합니다. 나는 단지 몇 주간 자바를 배우기 때문에 많이 알지 못합니다.
그 코드가 난 단지 사용할 수있는 다른 조금 '기본 = 새로운 DB (이, getDataFolder() + Win32 시스템 + "SQLite.db을");' 그리고 나서 'ResultSet res9 = base.query ("Select blah blah")' 그리고 'Statement.close()'또는 'Connection.close()'를 추가하면 eclipse에서 오류가 발생합니다. res9.close() 만 작동합니다. – user2250333