2013-12-23 5 views
1

Я пытаюсь вставить данные в mySQL, и я встречаю ошибку ниже. Я пробовал один и тот же код, но изменил инструкцию SQL для обновления, и это сработало. И я попытался использовать инструкцию SQL, как показано ниже, это не сработало.Как решить com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

 String sql = "insert into movie_preferences values (userID=1001, movieID=1067,preference=5,timestamp=10000000)" ; 

ОШИБКА:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.Util.getInstance(Util.java:386) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322) 
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) 
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) 
at com.movie.dao.movieDAO.getMovieMap(movieDAO.java:164) 
at com.movie.domain.RecommendMovieList.<init>(RecommendMovieList.java:21) 
at com.movie.action.LoadRecommendMovies.execute(LoadRecommendMovies.java:42) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) 
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) 
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 

at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 

at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 

at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 

at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) 

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 

at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 

at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) 
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 

at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:619) 

КОД:

public static void insertRating(int userID, int movieID, int preference){ 
    Connection conn = DBUtil.getConnection(); 
    PreparedStatement ps = null; 
    String sql = "insert into " + TABLE_NAME + " (" + USER_ID_COLUMN 
      + ", " + MOVIE_ID_COLUMN + ", " + RATING + ", " + TIMESTAMP 
      + ") values (?, ?, ?, ?)"; 
    try { 
     conn.setAutoCommit(false); 
     long l = System.currentTimeMillis()/1000; 
     ps = conn.prepareStatement(sql); 
     ps.setInt(1, Integer.valueOf(userID)); 
     ps.setInt(2, Integer.valueOf(movieID)); 
     ps.setInt(3, Integer.valueOf(preference)); 
     ps.setInt(4, Integer.parseInt(l+"")); 
     ps.executeUpdate(); 
     conn.commit(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      ps.close(); 
      conn.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Структура таблицы

mysql> desc movie_preferences; 
+------------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+------------+---------+------+-----+---------+-------+ 
| userID  | int(11) | NO |  | NULL |  | 
| movieID | int(11) | NO |  | NULL |  | 
| preference | int(11) | NO |  | 0  |  | 
| timestamp | int(11) | NO |  | 0  |  | 
+------------+---------+------+-----+---------+-------+ 
4 rows in set (0.33 sec) 
+0

Никто не заметил, что это очень неправильно "ps.setInt (4, Integer.parseInt (l +" "));" бит в коде еще? – Gimby

ответ

1

Вы должны сказать insert into <table> values(...), вы забыли values ключевое слово.

+0

oops! Я забыл об этом, когда набираю его в вопросе. Это не ответ, но моя ошибка переписывания :( –

0

Написать свой запрос следующим образом, может быть вам нужны одиночные кавычки для ограждающих значения, которые вы хотите вставить, если тип значений не целое

String sql = "insert into movie_preferences Values(1001, 1067, 5, 10000000)" ; 
+0

да, я уверен, что все они целые. Спасибо –

+0

если ваша проблема решена, тогда мой ответ должен быть принят, спасибо – Muhammad

1

лучшей практики было бы перечислить столбцы а затем укажите значения. Что-то вроде этого:

insert into movie_preferences (userID, movieID,preference,timestamp) 
values (1001, 1067, 5, 10000000) 
+0

спасибо, но это не сработало :(Я считаю, что в других частях кода может быть что-то не так. –

+0

INSERT INTO table_name VALUES (value1, value2, value3, value4) –

0
String sql = "insert into movie_preferences(userID,movieID,preference,timestamp) values(1001,1067,5,10000000)" ; 

пожалуйста, проверьте его

+0

спасибо, но это не сработало :( –

1

Просто просматривая код - у вас есть значение TABLE_NAME?

попробуйте жестко указать фактическое имя таблицы в этом месте и посмотреть, разрешена ли ваша ошибка.

0

Способ, которым вы реализуете свою функцию insertRating, не является хорошим подходом. Что вы можете сделать, так это просто изменить свой запрос sql следующим образом:

"insert into movie_preferences(userID,movieID,preference,timestamp)values(1001,1067,5,10000000)".

Кроме того, вы должны поместить идентификатор Auto для первичного ключа.

Смежные вопросы