Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8042755

"executeUpdate" does not work when we multiple quries in one statement.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 7u21
    • core-libs
    • x86_64
    • windows_7

      FULL PRODUCT VERSION :
      jdk1.7.0_21
      jre7

      ADDITIONAL OS VERSION INFORMATION :
      Windows 7 - 64 bit

      A DESCRIPTION OF THE PROBLEM :
       /* PROBLEM 1:
      * if we use SINGLE SQL query in "executeUpdate", the code in java does NOT work
      * This should not be the behavior of "executeUpdate".
      */

      /* StringBuilder SQLquery1 = new StringBuilder();
      SQLquery1.append("USE ").append(DBName).append("CREATE TABLE ").append(tbName).append("(id INTEGER not NULL, " +
      " first VARCHAR(255), " +
      " last VARCHAR(255), " +
      " MobileNum INTEGER)");
      String SQLquery = SQLquery1.toString();
      stmt.executeUpdate(SQLquery); // NOT WORKING
      */


      /*PROBLEM 2 :
      *THE BELOW "executeUpdate" does NOT work here, but if we copy paste this query in MySQL Command Line Client, it works perfectly fine
      *DONT KNOW WHY ??????????????????????*/

      stmt.executeUpdate(" USE Employee; CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))"); // NOT WORKING



      /* SOLUTION for PROBLEM 1:
      * THE BELOW CODE WORKS FINE IF "executeUpdate" query is divided into TWO query*/

      /*
      StringBuilder SQLquery1 = new StringBuilder();
      SQLquery1.append("USE ").append(DBName);
      String sqlDB = SQLquery1.toString();

      StringBuilder SQLquery2 = new StringBuilder();
      SQLquery2.append("CREATE TABLE ").append(tbName).append("(id INTEGER not NULL, " +
      " first VARCHAR(255), " +
      " last VARCHAR(255), " +
      " MobileNum INTEGER)");
      String SQLquery = SQLquery2.toString();

      stmt.executeUpdate(sqlDB); //Query 1 WORKING FINE
      stmt.executeUpdate(SQLquery); // Query2 WORKING FINE
                
                */

      /*SOLUTION for PROBLEM 2: */
      // stmt.executeUpdate("USE Employee;"); //Query1, WORKING FINE
      // stmt.executeUpdate(" CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))"); //Query2, WORKING FINE


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1. Create Database e.g "Employee" using JDBC
      2. Try creating table in Database using "executeUpdate" in java
          e.g :
          stmt.executeUpdate(" USE Employee; CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))");

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      1. Result in Eclipse :
      stmt.executeUpdate(" USE Employee; CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))");

      The above query should create an empty table in "Employee" database as it does in MySQL Command Line Client.


      2. Result on MySQL Command Line Client :

      Enter password: *****
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 27
      Server version: 5.0.67-community-nt MySQL Community Edition (GPL)

      Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

      mysql> USE Employee; CREATE TABLE Student(id INT(10), first VARCHAR(55), last
      VARCHAR(55));
      Database changed
      Query OK, 0 rows affected (0.14 sec)

      mysql>


      ACTUAL -
      Connecting to database...
      Creating database...
      Database created successfully...Employee
      Creating table in given database...
      Exception in thread "main" 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 'CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))' at line 1
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
      at com.mysql.jdbc.Util.getInstance(Util.java:381)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)
      at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
      at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
      at CreateBD.CreateTable(CreateBD.java:110)
      at Database_input.main(Database_input.java:17)


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      public void CreateTable(String tbName, String DBName) throws SQLException{

      System.out.println("Creating table in given database...");

      /* PROBLEM 1:
      * if we use SINGLE SQL query in "executeUpdate", the code in java does NOT work
      * This should not be the behavior of "executeUpdate".
      */

      /* StringBuilder SQLquery1 = new StringBuilder();
      SQLquery1.append("USE ").append(DBName).append("CREATE TABLE ").append(tbName).append("(id INTEGER not NULL, " +
      " first VARCHAR(255), " +
      " last VARCHAR(255), " +
      " MobileNum INTEGER)");
      String SQLquery = SQLquery1.toString();
      stmt.executeUpdate(SQLquery); // NOT WORKING
      */


      /*PROBLEM 2 :
      *THE BELOW "executeUpdate" does NOT work here, but if we copy paste this query in MySQL Command Line Client, it works perfectly fine
      *DONT KNOW WHY ??????????????????????*/

      stmt.executeUpdate(" USE Employee; CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))"); // NOT WORKING



      /* SOLUTION for PROBLEM 1:
      * THE BELOW CODE WORKS FINE IF "executeUpdate" query is divided into TWO query*/

      /*
      StringBuilder SQLquery1 = new StringBuilder();
      SQLquery1.append("USE ").append(DBName);
      String sqlDB = SQLquery1.toString();

      StringBuilder SQLquery2 = new StringBuilder();
      SQLquery2.append("CREATE TABLE ").append(tbName).append("(id INTEGER not NULL, " +
      " first VARCHAR(255), " +
      " last VARCHAR(255), " +
      " MobileNum INTEGER)");
      String SQLquery = SQLquery2.toString();

      stmt.executeUpdate(sqlDB); //Query 1 WORKING FINE
      stmt.executeUpdate(SQLquery); // Query2 WORKING FINE
                
                */

      /*SOLUTION for PROBLEM 2: */
      // stmt.executeUpdate("USE Employee;"); //Query1, WORKING FINE
      // stmt.executeUpdate(" CREATE TABLE Student(id INT(10), first VARCHAR(55), last VARCHAR(55))"); //Query2, WORKING FINE

      }
      }

      ---------- END SOURCE ----------

      SUPPORT :
      YES

            lancea Lance Andersen
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: