PreparedStatement весной JdbcTemplate - PullRequest
0 голосов
/ 09 января 2020

Я изучаю Spring JdbcTemplate - в котором я пытался вставить строку в таблицу (Oracle 18 c)

ниже приведена структура таблицы.

описать сотрудник;

Table Description

теперь я автоматически подключен (@Autowired) JdbcTemplate и со строкой ниже, записи могут быть вставлены.

jdbcTemp.update("INSERT INTO EMPLOYEE(NAME) VALUES(?)", new Object[] {emp.getName()} );

однако, когда я использовал интерфейс PreparedStatementCallback, результат был не таким, как ожидалось. пожалуйста, найдите ниже код.

@Autowired
    JdbcTemplate jdbcTemp;


    public void insertIntoDatabase(final Employee emp)
    {
        jdbcTemp.update("INSERT INTO EMPLOYEE(NAME) VALUES(?)", new PreparedStatementCallback<Boolean>() {

            @Override
            public Boolean doInPreparedStatement(PreparedStatement ps) 
 {
                // TODO Auto-generated method stub
                try {
                //ps.setInt(1,emp.getId());
                ps.setString(1, emp.getName());
            //  ps.setFloat(3,emp.getSalary());
                return ps.execute();
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                    return false;
                }
                catch(DataAccessException e)
                {
                    e.printStackTrace();
                    return false;
                }
            }

        });


    }


ниже ошибка встречается при исполнении.

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO EMPLOYEE(NAME) VALUES(?)]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1443)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
    at com.tvashtra.SpringBootDataOps.InsertIntoTableDemo.insertIntoDatabase(InsertIntoTableDemo.java:22)
    at com.tvashtra.SpringBootDataOps.InsertIntoTableDemo$$FastClassBySpringCGLIB$$bb4c5941.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:769)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
    at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:56)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:747)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
    at com.tvashtra.SpringBootDataOps.InsertIntoTableDemo$$EnhancerBySpringCGLIB$$a0211f9b.insertIntoDatabase(<generated>)
    at com.tvashtra.SpringBootDataOps.SpringBootDataOpsApplication.main(SpringBootDataOpsApplication.java:31)
    ... 5 more

Заранее спасибо

...