【问题标题】:Prepared SQL Statement not Valid准备好的 SQL 语句无效
【发布时间】:2016-03-23 08:10:48
【问题描述】:

我无法弄清楚这一点,它会在 10 小时后到期。如果有人同情,请帮助。

基本上,我试图在名为Appointments 的访问表中插入数据。但是,我每次都会收到不正确的 sql 语法错误。我已经查看了许多 sql 示例,这似乎是正确的,我无法理解这一点。下面的代码和堆栈跟踪。错误行表示为第 27 行或 statement.executeupdate() 行。我正在尝试在 JSP 中执行此操作。

<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
java.sql.Connection connection = java.sql.DriverManager.getConnection("jdbc:odbc:Dentist", "", "");

String query = "INSERT INTO Appointments(First_Name, Last_Name, Address, Phone_Number, Procedure, Appointment_Date, Health_Insurance, Health_Concerns, Age, Emergency_Contact, Cost) VALUES(?,?,?,?,?,?,?,?,?,?,?)";
java.sql.PreparedStatement statement = connection.prepareStatement(query);

statement.setString(1, request.getParameter("First_name"));
statement.setString(2, request.getParameter("Last_Name"));
statement.setString(3, request.getParameter("Address"));
statement.setString(4, request.getParameter("PhoneNumber"));
statement.setString(5, request.getParameter("Procedure"));
statement.setString(6, request.getParameter("Appointment_Date"));
statement.setString(7, request.getParameter("Health_Insurance"));
statement.setString(8, request.getParameter("Health_Concerns"));
statement.setString(9, request.getParameter("Age"));
statement.setString(10, request.getParameter("Emergency_Contact"));
statement.setString(11, request.getParameter("Cost"));

statement.executeUpdate(query);
connection.close();
response.sendRedirect("ShowData.jsp");
%>

堆栈跟踪:

2015 年 12 月 16 日晚上 7:38:24 org.apache.catalina.core.StandardWrapperValve 调用 SEVERE: Servlet.service() for servlet jsp 抛出异常 java.sql.SQLException: [Microsoft][ODBC Microsoft 访问驱动程序] INSERT INTO 语句中的语法错误。在 sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964) 在 sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121) 在 sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3156) 在 sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:215) 在 sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:137) 在 org.apache.jsp.FinalProject.ProcessInsert_jsp._jspService(ProcessInsert_jsp.java:80) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 在 org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:856) 在 org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:565) 在 org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1509) 在 java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 通常不建议将所有这些代码都放在一个 scriptlet 中。想想 JSTL、EL、servlet...

标签: java mysql sql-server jsp


【解决方案1】:

查询已为PreparedStatement 定义。替换

statement.executeUpdate(query);

statement.executeUpdate();

【讨论】:

  • @TyGuy2525,让我们知道这是否解决了问题,并尝试清理您在问题下列出的服务器标签(即:mysql 和 sql-server)。我看过的少数参考文献提到“使用 JDBC-ODBC 桥访问数据库”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2021-12-23
  • 2016-11-18
  • 2013-12-28
相关资源
最近更新 更多