我试图使用servlet将行插入到表中,当尝试使用语句(使用insertQuery1和insertQuery2)进行插入时,它执行良好,但当使用preparedstatment(使用insertPrepQuery)执行时,它抛出SQL语法错误。代码:
public void printout( Assetdetail assdet) throws SQLException, ClassNotFoundException{ String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost/assetmgnt"; ResultSet result = null; String User = "root"; String Password = ""; // String insertQuery1 = // "INSERT INTO assetdetails (ASSETNAME,ASSETST,ASSETUNIT,ASSETADD1,ASSETADD2,ASSETPINCODE,ASSETDOORNUM) VALUES " + // "( \'MYASSET2\',\'STREET3\',34,\'ASST2ADD1\',\'ASST2ADD2\',600029,\'#34\')"; String insertQuery2 = "INSERT INTO assetdetails (ASSETNAME,ASSETST,ASSETUNIT,ASSETADD1,ASSETADD2,ASSETPINCODE,ASSETDOORNUM) VALUES " + "(" + "\'" + assdet.getAssetname() + "\'" + ",\'" + assdet.getAssetstreetname() + "\'" + "," + Integer.parseInt(assdet.getAssetunitnumber()) + ",\'" + assdet.getAssetaddln1()+ "\'" + ",\'" + assdet.getAssetaddln2()+ "\'" + "," + Integer.parseInt(assdet.getAssetpincode()) + ",\'" + assdet.getAssetdoornum()+ "\'" + ")"; String insertPrepQuery = "insert into assetdetails (ASSETNAME,ASSETST,ASSETUNIT,ASSETADD1,ASSETADD2,ASSETPINCODE,ASSETDOORNUM)" + "values (?,?,?,?,?,?,?)"; Class.forName(driver); Connection conn = DriverManager.getConnection(url,User,Password); //-------------Using statment /*Statement stmt = conn.createStatement(); int insertStmtCount = stmt.executeUpdate(insertQuery2); System.out.println("No of Rows inserted is : " + insertStmtCount); stmt.close();*/ //-------------Using Prepared statment System.out.println(" Preparing statment"); java.sql.PreparedStatement prpStmt = conn.prepareStatement(insertPrepQuery); prpStmt.setString(1, assdet.getAssetname()); prpStmt.setString(2, assdet.getAssetstreetname()); prpStmt.setInt(3,14); prpStmt.setString(4, assdet.getAssetaddln1()); prpStmt.setString(5, assdet.getAssetaddln2()); prpStmt.setInt(6,500029); prpStmt.setString(7,assdet.getAssetdoornum()); System.out.println(" Inserting Values"); //int insertPrpCount = prpStmt.executeUpdate(insertPrepQuery); //System.out.println("No of Rows inserted is : " + insertPrpCount); boolean rs = prpStmt.execute(insertPrepQuery); System.out.println("Rows inserted : " + rs); prpStmt.close(); conn.close(); } }
错误:
com.mysql.jdbc.exceptions.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 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) at com.mysql.jdbc.Connection.execSQL(Connection.java:3206) at com.mysql.jdbc.Statement.execute(Statement.java:727) at org.gk.assetmgment.servlet.AssetAddAuth.printout(AssetAddAuth.java:121) at org.gk.assetmgment.servlet.AssetAddAuth.doPost(AssetAddAuth.java:58) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)
删除prpstmt.execute(insertPrepQuery);
中的语句
必须是prpstmt.execute();
尝试使用此查询 #1064-您的SQL语法有错误; 表和几乎完全相同-有相同的列。 请求中有什么错误?
问题内容: 下面是用户单击“ 应用余额” 时的代码 。 这适用于第一部分,用户的余额更新很好,但是当我尝试执行第二条语句时,出现SQL语法错误。是什么原因引起的? 下面是运行此命令时得到的堆栈跟踪。 问题答案: 您的第二个查询缺少子句中的右括号。 代替直接在查询中附加参数,请使用参数化查询。 这样看起来会更干净,更容易编写。最重要的是,它将使您免受SQL Injection 攻击。 这是用于参数化
我在PHP的MYSQL查询中发现了一个非描述性语法错误。如果我“回显”查询的文本并将其粘贴到一个MySQL查询窗口中,则代码可以工作。下面是查询的SQL、错误代码和错误消息... 错误代码:1064 错误消息:您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,了解第1行“”附近使用的正确语法 这里是我正在使用的PHP代码... 我知道数据库连接正在工作。我能够选择和更新表
它需要做的是获取用户名和密码,验证它并根据密码给出适当的输出。请帮帮我.也让我知道如果我的怀疑是正确的。另外,我听说在servlet程序中编写html代码不是一个好的做法。我还想知道如何在index.html文件中编写上面的html代码,这应该与该程序预期的行为方式相同。谢了。
问题内容: 我收到错误消息 “您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以找到在第1行的“ orderr”附近使用的正确语法” -因此,我认为错误是用了两个 ‘, 但是在我的代码中我没有用 ‘ 。注意,该表实际上被命名为订购者。 问题答案: 在大多数数据库中,您无法参数化表名称之类的对象名称,在MySQL中,理论上您可以做到,因为默认情况下,MySQL Connector
问题内容: 我想使用Java一次将多行插入MySQL表中。行数是动态的。过去我在做… for (String element : array) { myStatement.setString(1, element[0]); myStatement.setString(2, element[1]); } 我想对此进行优化,以使用MySQL支持的语法: INSERT INTO table (col1,