gpt4 book ai didi

java - MySQL 和 SQLite 类

转载 作者:行者123 更新时间:2023-11-29 06:50:22 28 4
gpt4 key购买 nike

我正在编写 Bukkit 插件,这是“我的世界”游戏的服务器。我不会写SQL,只会一些语法。

我正在寻找 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 才几个星期,了解的不多。

最佳答案

我建议您至少阅读一点 the Java Tutorials: JDBC Basics .那里几乎解释了所有内容......

简短的回答是:在您之后调用 ResultSet.close()Statement.close()Connection.close()已完成对每个对象的处理。
或者使用 Spring 的 JdbcTemplate , MyBatisHibernate ,其中每个都在上述框架技术之上添加了另一层抽象(和复杂性)。

关于java - MySQL 和 SQLite 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15841861/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com