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
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