0

我正在尝试使用这种方法在我的班级中创建一个表格

void createTab() {
DBI dbi = new DBI(DBURL, DBUSER, DBPASS);

BindExamples dao = dbi.open(BindExamples.class);

dao.createSomethingTable();
    dao.close();
}

我的 BindExamples 界面:

public interface BindExamples

{
@SqlUpdate("insert into something (id, name) values (:id, :name)")
void insert(@Bind("id") int id, @Bind("name") String name);

@SqlUpdate("delete from something where name = :it")
void deleteByName(@Bind("name") String name);

@SqlSelect("select text from articles where id = :id")
String selectText(@Bind("id") int id);

@SqlUpdate("create table something (id int primary key, name varchar(100))")
  void createSomethingTable();

void close();
}

结果:我有一个错误:

Exception in thread "main" java.lang.NoSuchMethodError:java.lang.Object.createSomethingTable()V
at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$7c60a575.CGLIB$createSomethingTable$8(<generated>)
at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$7c60a575$$FastClassByCGLIB$$c61ecaca.invoke(<generated>)
at org.skife.jdbi.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.skife.jdbi.v2.sqlobject.PassThroughHandler.invoke(PassThroughHandler.java:21)
    at org.skife.jdbi.v2.sqlobject.SqlObject.invoke(SqlObject.java:147)
    at org.skife.jdbi.v2.sqlobject.SqlObject$1.intercept(SqlObject.java:60)
    at org.skife.jdbi.v2.sqlobject.CloseInternalDoNotUseThisClass$$EnhancerByCGLIB$$7c60a575.createSomethingTable(<generated>)
    at DBAccessJDBC.saveObjectAPI(DBAccessJDBC.java:58)
    at MainMain.main(MainMain.java:7)

任何想法我做错了什么?我正在尝试与http://jdbi.codehaus.org/five_minute_intro/中的相同

我用:

  • JDBI库2.48.2版本
  • mysql

谢谢你的帮助!

4

2 回答 2

1

jdbi中没有注解@SqlSelect。你能说一下,你是从哪个库中使用这个注释的。我将注释更改为@SqlQuery,它工作正常。它将扫描所有方法并根据注释分配处理程序。由于未知注释,扫描可能失败。

于 2014-12-27T21:11:23.323 回答
0

JDBI 正在扫描您界面的注释。使用@SqlQuery注释。

于 2014-12-14T03:48:26.693 回答