0

HSQLDBでActiveJDBCを使用しようとしています:

ユーザー.sql

CREATE TABLE users (
    "ID" INTEGER GENERATED BY DEFAULT AS SEQUENCE seq NOT NULL PRIMARY KEY,
    FIRST_NAME VARCHAR(100) NOT NULL,
    LAST_NAME VARCHAR(100) NOT NULL
);

ユーザー.java

@IdName("ID")
public class User extends Model {....}

Main.java

User u = new User();
u.setFirstName("first_name");
u.setLastName("last_name");
u.save();

新しい行を保存しようとすると、次の例外があります。

org.javalite.activejdbc.DBException: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: id, Query: INSERT INTO users (first_name, last_name) VALUES (?, ?), params: first_name,last_name

挿入クエリの小文字の問題だと思います。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

この HSQL 例外メッセージをグーグルで調べた後、実際に機能するこのコードをまとめました。ActiveJDBC を使用し、単純なクエリで動作し、インストルメント化されたモデルでも動作します。

Base.open("org.hsqldb.jdbc.JDBCDriver", "jdbc:hsqldb:file:./target/tmp/hsql-test", "sa", "");

String create = "CREATE TABLE people (\n" +
        "    ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL,\n" +
        "    FIRST_NAME VARCHAR(100) NOT NULL,\n" +
        "    LAST_NAME VARCHAR(100) NOT NULL\n" +
        ");";

Base.exec(create);
Base.exec("INSERT INTO people (first_name, last_name) VALUES (?, ?)", "John", "Doe");

System.out.println("===>" + Base.findAll("select * from people"));

Person p = new Person();
p.set("first_name", "Jane", "last_name", "Doe").saveIt();

System.out.println(Base.findAll("select * from people"));
System.out.println(Person.findAll());
Base.close();

ご覧のとおり、テーブルを作成するコードは、特に ID 列の周りで少し異なります。

モデルは次のようになります。

@IdName("ID")
public class Person extends Model {}

基本的に、コードには次の問題がありました。

  1. 二重引用符を使用した ID 列の定義
  2. ID列はIDENTITYとして定義する必要があります(火に足を踏み入れないでください。私はHSQLの専門家ではありませんが、うまくいきません)
  3. @IdName("ID")テーブルで変更しない限り、ActiveJDBC のデフォルトは小文字なので、モデルは を上書きする必要がidあります (なぜですか?)

HSQL はサポートされているデータベースのリストにないため、機能しない場合があることに注意してください。

これが役立つことを願っています!

于 2016-11-27T05:56:30.670 に答える