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/と同じようにしようとしています

私が使う:

  • 2.48.2 バージョンの JDBI ライブラリ
  • 日食
  • mySql

助けてくれてありがとう!

4

2 に答える 2

1

jdbi にはアノテーション @SqlSelect はありません。この注釈を使用しているライブラリを教えてください。アノテーションを @SqlQuery に変更しました。正常に動作します。すべてのメソッドをスキャンし、アノテーションに基づいてハンドラーを割り当てます。不明な注釈が原因で、スキャンに失敗した可能性があります。

于 2014-12-27T21:11:23.323 に答える