Java Ormlite在create()上引发SQLException。我做错了什么?

Java Ormlite在create()上引发SQLException。我做错了什么?,java,sqlite,ormlite,Java,Sqlite,Ormlite,我正在一个Java项目中尝试用Ormlite替换现有的数据库代码 但是,当我调用create()将对象插入SQLite数据库时,它会抛出一个SQLException。我想我可能犯了一个明显的错误,但我不知道这是什么。代码如下: public class OrmliteTest { private final String DATABASE_URL = "jdbc:sqlite:test.sqlite"; private JdbcConnectionSource connectio

我正在一个Java项目中尝试用Ormlite替换现有的数据库代码

但是,当我调用create()将对象插入SQLite数据库时,它会抛出一个SQLException。我想我可能犯了一个明显的错误,但我不知道这是什么。代码如下:

public class OrmliteTest {
    private final String DATABASE_URL = "jdbc:sqlite:test.sqlite";
    private JdbcConnectionSource connectionSource = null;
    private Dao<Article, Integer> articleDao;

    public OrmliteTest() throws SQLException{
        connectionSource = new JdbcConnectionSource(DATABASE_URL);

        TableUtils.createTableIfNotExists(connectionSource, Article.class);

        articleDao = DaoManager.createDao(connectionSource, Article.class);

        Article article1 = new Article("articles", "idnumber", "blah blah blah", (int)(new Date().getTime()/1000));

        articleDao.createOrUpdate(article1); // throws SQLException - why?
    }
}

@DatabaseTable(tableName = "articles")
class Article {
    public static final String CATEGORY_FIELD_NAME = "category";
    public static final String ARTICLEID_FIELD_NAME = "articleid";
    public static final String BODY_FIELD_NAME = "body";
    public static final String ADDED_FIELD_NAME = "added";

    @DatabaseField(generatedId = true)
    public int id;

    @DatabaseField(columnName = CATEGORY_FIELD_NAME)
    public String category;

    @DatabaseField(columnName = ARTICLEID_FIELD_NAME)
    public String articleId;

@DatabaseField(columnName = BODY_FIELD_NAME)
    public String body;

    @DatabaseField(columnName = ADDED_FIELD_NAME)
    public int added;

    public Article() {}

    public Article(String category, String articleId, String body, int added) {
        setCategory(category);
        setArticleId(articleId);
        setBody(body);
        setAdded(added);
    }

    ...getters and setters...
}

我做错了什么?

好吧,afaik NYI的意思是尚未实施。我认为这个东西不支持参数化SQL。尝试将要直接插入更新查询字符串中的值硬编码,看看这是否有效查看SQLite的源代码,它看起来像是“NYI”表示尚未实现


您的版本根本没有完全实现/完成。升级到3.6.20,它似乎不再有这些异常。

请确保使用正确的SQLite驱动程序。我知道Zentus司机经常抛出NYI异常。这是手册:

引述:

有多个SQLite驱动程序。确保您使用的是驱动程序,而不是不支持生成ID的驱动程序


你好但是我怎样才能指定Xerial驱动程序来正确地与我的DB一起使用呢?@Yarovoy这是用于JDBC连接的,而不是Android。您只需要在项目中包含Xerial jar。您好,我正在获取“java.sql.SQLException:NYI”我正在使用maven管理我的依赖项,下面是我的pom.xml的快照,请告诉我如何更正此异常。com.j256.ormliteormlite-core4.41 com.j256.ormliteormlite-jdbc4.41 org.xerialsqlite-jdbc3.6.16请使用此@Sam的ORMLite邮件列表。
java.sql.SQLException: Unable to run insert stmt on object com.myapp.tester.Article@7a36824: INSERT INTO `articles` (`category` ,`storyid` ,`body` ,`added` ) VALUES (?,?,?,?)
    at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
    at com.j256.ormlite.stmt.mapped.MappedCreate.insert(MappedCreate.java:90)
    at com.j256.ormlite.stmt.StatementExecutor.create(StatementExecutor.java:325)
    at com.j256.ormlite.dao.BaseDaoImpl.create(BaseDaoImpl.java:287)
    at com.j256.ormlite.dao.BaseDaoImpl.createOrUpdate(BaseDaoImpl.java:312)
    at com.myapp.tester.OrmliteBugTester.<init>(OrmliteBugTester.java:128)
    at com.myapp.tester.Tester.main(Tester.java:24)
Caused by: java.sql.SQLException: NYI
    at org.sqlite.Conn.prepareStatement(Conn.java:217)
at com.j256.ormlite.jdbc.JdbcDatabaseConnection.insert(JdbcDatabaseConnection.java:105)
    at com.j256.ormlite.stmt.mapped.MappedCreate.insert(MappedCreate.java:63)
    ... 5 more