上下文:我的数据库中有两个不同的表。第一个是actionblock(Java中的actionblock),第二个是location(Java中的PermanentLocation)。ActionBlock类需要一个位置才能工作,因此为了让代码工作,它首先加载ActionBlock数据,其中包含所需的位置,然后代码加载所需的位置。(是的,我知道下面的代码将垃圾邮件加载位置查询)
问题:使用与ActionBlock加载程序相同的DB连接加载该位置会给出空的ResultSet
我所尝试的:
/**
* Loads the blocks from the database. All registerClass calls must be called before this
*/
public void loadBlocksFromDatabase() {
Connection conn = null;
try {
conn = KaranteeniCore.getDatabaseConnector().openConnection();
PreparedStatement stmt = conn.prepareStatement(
"SELECT uuid,permission,classtype FROM actionblock WHERE serverID = ?;");
stmt.setString(1, KaranteeniCore.getServerIdentificator());
ResultSet set = stmt.executeQuery();
// loop all the blocks from the database
while(set.next()) {
String uuidStr = set.getString(1);
String permission = set.getString(2);
String classType = set.getString(3);
UUID uuid = UUID.fromString(uuidStr);
// check if loaded block is a block or a sign
for(Class<? extends ActionBlock> clazz : subBlockClasses)
if(clazz.getName().equals(classType)) {
// load the location of the block
PermanentLocation loc = PermanentLocation.loadLocation(conn, uuid);
if(loc == null) {
Bukkit.getLogger().log(Level.WARNING, "Could not load location " + uuid.toString() + ". Has it been deleted from database?");
continue;
}
Block block = loc.getLocation().getBlock();
try {
// try to create a new class out of this block
if(permission != null) {
Constructor<? extends ActionBlock> cstr = clazz.getConstructor(Block.class, UUID.class, String.class);
ActionBlock aBlock = cstr.newInstance(block, uuid, permission);
aBlock.onLoad();
registerBlock(aBlock); // register created class
} else {
Constructor<? extends ActionBlock> cstr = clazz.getConstructor(Block.class, UUID.class);
ActionBlock aBlock = cstr.newInstance(block, uuid);
aBlock.onLoad();
registerBlock(aBlock); // register created class
}
} catch (Exception e) {
e.printStackTrace();
}
}
// load all signs
for(Class<? extends ActionSign> clazz : subSignClasses)
if(clazz.getName().equals(classType)) {
// load the location of the block
Block block = PermanentLocation.loadLocation(uuid).getLocation().getBlock();
try {
// try to create a new class out of this block
if(permission != null) {
Constructor<? extends ActionSign> cstr = clazz.getConstructor(Block.class, UUID.class, String.class);
ActionBlock aBlock = cstr.newInstance(block, uuid, permission);
aBlock.onLoad();
registerBlock(aBlock); // register created class
} else {
Constructor<? extends ActionSign> cstr = clazz.getConstructor(Block.class, UUID.class);
ActionBlock aBlock = cstr.newInstance(block, uuid);
aBlock.onLoad();
registerBlock(aBlock); // register created class
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch(SQLException e) {
e.printStackTrace();
// ignored
} finally {
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* Loads a permanent location from database using the given uuid
* @param conn Connection to the database
* @param uuid uuid of the location
* @return location loaded or null if none found
*/
public static PermanentLocation loadLocation(Connection conn, UUID uuid) {
PermanentLocation location = null;
try {
PreparedStatement st = conn.prepareStatement("SELECT world, x, y, z, pitch, yaw FROM location WHERE id = ? AND serverID = ?;");
st.setString(1, uuid.toString());
st.setString(2, KaranteeniPlugin.getServerIdentificator());
ResultSet set = st.executeQuery();
if(set.next()) {
String w = set.getString(1);
double x = set.getDouble(2);
double y = set.getDouble(3);
double z = set.getDouble(4);
float pitch = set.getFloat(5);
float yaw = set.getFloat(6);
World world = Bukkit.getWorld(w);
if(world == null)
return null;
else
Bukkit.getLogger().log(Level.SEVERE, "Could not find world " + w);
Location loc = new Location(world, x,y,z,pitch,yaw);
location = new PermanentLocation(uuid, loc);
}
else
location = null;
} catch(SQLException e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage());
}
return location;
}
需要更多信息吗?本文来源于Spigot论坛帖子
编辑:重新启动数据库或系统不影响结果
我想问题只是错字,请换行
"SELECT uuid,permission,classtype FROM actionblock WHERE serverID = ?;");
与
"SELECT uuid,permission,classtype FROM actionblock WHERE serverID = ?");
希望我能有所帮助;
问题内容: 我正在使用以下SQL字符串将此数据插入到我的MySQL数据库中: 并且我收到此错误消息: 那么输入MySQL数据库的正确格式/值是什么? 问题答案: 问: MySQL语句中文字的正确格式/值是什么? 答: 在MySQL中,文字的标准格式为: 时间部分为24小时制(即,小时数字以00到23之间的值形式提供)。 MySQL提供了一个内置函数,可以将各种格式的字符串转换为或数据类型。 因此,
问题内容: 我正在尝试为我的Web服务完成数据库访问方法。服务和数据库访问方法对于数据库中的所有其他表都可以正常工作,但是这一特定方法不能。当我查询数据库时,总是返回空(表示)。 经过多次尝试,我将查询简化为简单的查询,看问题是否是我输入的数据和查询中使用的数据之间的某些区别,但是即使是用于选择表中所有项目的简单查询也没有返回任何结果。 这是我用来从数据库中获取信息的方法: 任何帮助将不胜感激。
我们有一个关于MySQL中返回错误整数值的函数的问题。我们已经检查了“booked_passeters”是否包含正确的值0,并且当移除该变量时,它可以正常工作,也就是说只返回整数40。但是,当我们试图从它中减去“booked_passeters”(最终仍应返回40)时,它就不起作用了。 包括下面的代码。 提前道谢!:-)
主要内容:关系型数据库,非关系型数据库在学习数据库之前,应该先理解什么是数据。本节先介绍数据以及数据库的概念,再对关系型数据库和非关系型数据库的优缺点进行分析。 描述事物的符号称为 数据。数据有多种表现形式,可以是数字,也可以是文字、图形、图像、声音、语言等。在数据库中数据表示记录,例如,在学生管理数据库中,记录学生的信息包括学号、姓名、性别、年龄、籍贯和联系电话等,这些信息就是数据。 信息是指对数据进行加工处理后提取的对人类社会实践
问题内容: create_PaperBean.java 我正在使用struts,当执行该bean时,会在数据库中创建一个表,但是insert的值仍为零!因此,我无法进入正确的页面来进一步运行Web应用程序。我究竟做错了什么? 问题答案: 要么返回SQL数据操纵语言(DML)语句的行数的SQL语句回报 什么 。 创建表既不是INSERT也不是UPDATE,因此正常接收是因为没有行受到影响。