Во-первых, нулевой указатель возникает, потому что у вас есть поле entityManagerFactory
, которое вы никогда не инициализируете, и, таким образом, оно имеет значение null, но вы вызываете entityManagerFactory.createEntityManager()
(таким образом, это вызов null.createEntityManager()
) при инициализации поля entityManager
.
Вы могли бы попытаться поместить @Autowired
аннотацию над entityManagerFactory
- но я не понимаю, почему вы не проводите entityManager
с помощью Autowire, предоставленной Spring, а вместо этого создаете свою собственную.
Также, похоже, у вас есть @PersistenceContext
аннотация на entityManager
- эта должна внедрить существующую entityManager
в случае, если вы работаете внутри контейнера EJB или используете CDI для внедрения зависимостей, я думаю - но вы этого не делаете , вы используете аннотацию @Repository
, пришедшую из Spring. И вы сами инициализируете поле. Эту аннотацию обязательно нужно удалить (я полагаю, что вы положили ее туда, чтобы добавить entityManager
, но когда это не сработало, вы добавили код инициализации - entityManagerFactory.createEntityManager()
). Или лучше - заменить на @Autowire
, и вместо этого код инициализации должен быть удален.
например. просто есть
@Repository
public class CustomerInsertRepository {
@Autowired
private EntityManager entityManager;
...
Мне кажется, проблема в том, что вы отправляете "datetime ('now')"
в виде строки, а не значения.
Моя мысль состоит в том, чтобы найти способ получить текущую дату / время и отправить его в вашу базу данных в качестве значения даты / времени, или найти способ использовать встроенный в SQLite (DATETIME ('NOW'))]
параметр
Ознакомьтесь с ответами на этого вопроса SO.com - они могут привести вас в правильном направлении.
Надеюсь, это поможет!
Есть несколько вариантов, которые вы можете использовать:
Вы не можете использовать функцию datetime, используя оболочку Java "ContentValues". Либо вы можете использовать:
SQLiteDatabase.execSQL, чтобы вы могли ввести необработанный SQL-запрос.
mDb.execSQL («INSERT INTO» + DATABASE_TABLE + «VALUES (null, datetime ())»);
Или возможности даты и времени в Java:
// установить формат даты в формате sql.
SimpleDateFormat dateFormat = new SimpleDateFormat ("гггг-мм-дд чч: мм: сс");
Дата дата = новая дата ();
ContentValues initialValues = new ContentValues ();
initialValues.put ("date_created", dateFormat.format (date));
long rowId = mDb.insert (DATABASE_TABLE, null, initialValues);
В своем коде я использую DATETIME DEFAULT CURRENT_TIMESTAMP
в качестве типа и ограничения столбца.
В вашем случае определение таблицы было бы
create table notes (
_id integer primary key autoincrement,
created_date date default CURRENT_DATE
)