我试图用我在工作的Java项目中的Ormlite替换现有的数据库代码。Ormlite在create()上抛出SQLException。我究竟做错了什么?
但是,当我调用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...
}
在致电articleDao.createOrUpdate(article1)
时发生异常。这是回溯:
java.sql.SQLException: Unable to run insert stmt on object [email protected]: 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
我在做什么错?
嗨!但是,我怎样才能指定Xerial驱动程序与我的数据库一起使用? – Yarovoy
@Yarovoy这是用于JDBC连接 - 不是Android。您只需将Xerial jar包含在您的项目中即可。 – Gray
嗨我得到了“java.sql.SQLException:NYI”我使用maven来管理我的依赖,以下是我的pom.xml的快照,请让我知道我该如何纠正这个异常。 com.j256.ormlite ormlite核 4.41 com.j256.ormlite ormlite-JDBC 4.41 org.xerial 源码-JDBC 3.6。 16 dependencies> –
Sam