Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java resultset.getObject上的AbstractMethodError_Java_Mysql_Eclipse_Jdbc_Minecraft - Fatal编程技术网

Java resultset.getObject上的AbstractMethodError

Java resultset.getObject上的AbstractMethodError,java,mysql,eclipse,jdbc,minecraft,Java,Mysql,Eclipse,Jdbc,Minecraft,因此,我正在构建一个minecraft插件,插件的一部分从mysql获取一组块数据,并在服务器启动时将其加载到缓存中。我有一些代码在eclipse测试用例中运行良好。然而,当我在本地minecraft服务器中加载插件时,我得到了一个异常。 rs是从执行的查询返回的java.sql.ResultSet实例。 p.fieldType()只返回一个类 稍微大一点的片段。。。并不是说它真的向你展示了其他东西 if (field.isAnnotationPresent(Persist.class

因此,我正在构建一个minecraft插件,插件的一部分从mysql获取一组块数据,并在服务器启动时将其加载到缓存中。我有一些代码在eclipse测试用例中运行良好。然而,当我在本地minecraft服务器中加载插件时,我得到了一个异常。

rs
是从执行的查询返回的
java.sql.ResultSet
实例。
p.fieldType()
只返回一个



稍微大一点的片段。。。并不是说它真的向你展示了其他东西

if (field.isAnnotationPresent(Persist.class)) {
    try {
        Persist p = field.getAnnotation(Persist.class);
        Object o = rs.getObject( field.getName(), p.fieldType());
        field.set(m,p.fieldType().cast(o));

    } catch (Exception e) {
        // TODO Auto-generated catch block 
        e.printStackTrace();
    } 
}
我在网上查过,有人说我需要包括ojdbc6.jar并将其用作我的连接驱动程序。
我将该文件添加到文件夹库下的项目结构中,将其包含到项目中,然后将其添加到构建文件中。 并将连接驱动程序更改为
oracle.jdbc.OracleDriver

然而,我得到同样的问题,似乎不是一个解决办法。 虽然很可能我都做错了

有人能帮我吗,有什么见解吗

编辑**
从命令行

$ java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

从日食

返回1.8.0_51-b16




但是两者都在同一台电脑上,所以我希望得到相同的值?

好的,很抱歉,我重新思考了我的方法。 我没有使用反射来设置类成员的类型,而是在每个数据模型类中实现了一个将ResultSet值映射到当前对象的方法

@Override
public Select load(ResultSet rs) throws SQLException {
    this.id = rs.getInt("id");
    this.name = rs.getString("name");
    this.uuid = rs.getString("uuid");
    this.chunkX = rs.getInt("chunkX");
    this.chunkZ = rs.getInt("chunkZ");
    this.blockX = rs.getInt("blockX");
    this.blockY = rs.getInt("blockY");
    this.blockZ = rs.getInt("blockZ");
    return this;
};
至于我最初使用反射的问题,我不知道它为什么会失败。

该方法是在JDBC4.1(Java7)中添加的。看起来您使用的是JDBC4.0驱动程序,而不是JDBC4.1(或JDBC4.2/Java8)驱动程序


您可能需要更新JDBC驱动程序(最新版本为5.1.38)。

我认为可能存在JDK问题。您在本地计算机上使用哪个JDK版本,在服务器上使用哪个版本?请看这篇文章:似乎是1.8.0_51,这应该很好,另外一个答案与我的案例有关,我不知道。Ojdbc16.jar是oracle db的驱动程序,而不是mysql的驱动程序。查看最新的mysql驱动程序,看看它是否有助于我使用的是什么:/It’它在eclipse中工作,而不是在minecraft环境中
$ java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
System.out.println(System.getProperty("java.runtime.version"));
@Override
public Select load(ResultSet rs) throws SQLException {
    this.id = rs.getInt("id");
    this.name = rs.getString("name");
    this.uuid = rs.getString("uuid");
    this.chunkX = rs.getInt("chunkX");
    this.chunkZ = rs.getInt("chunkZ");
    this.blockX = rs.getInt("blockX");
    this.blockY = rs.getInt("blockY");
    this.blockZ = rs.getInt("blockZ");
    return this;
};