2015-06-05 2 views
0

Я получаю ошибку SQL Sytax, когда я пытаюсь выполнить этот код:SQL Ошибка синтаксиса с CREATE TABLE

CREATE TABLE ? (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
`UUID` VARCHAR(36) NOT NULL 
); 

Я использую PreparedStatement для замены? со строковым

Ошибка Сообщение:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an errorin your SQL syntax; check the manual that corresponds to your MySQL serverversion for the right syntax to use near ''95f7ed55-ab3d-46f9-bffe-72bf5780a1ec' (ID INT(255) UNSIGNED AUTO_INCREMENT PRIM' at line 1 

Спасибо за вашу помощь!

+0

'Идентификаторы могут начинаться с цифры, но если цитируемый не может состоять только цифр. 'https://dev.mysql.com/doc/refman/5.0/en/identifiers.html –

+0

Похоже, вы используете одиночную кавычку для указания имени таблицы' ''. Попробуйте вместо этого использовать backtick и посмотрите, разрешит ли это это. –

+0

Можете ли вы поместить весь свой код, создав DDL, используя dyanmic sql? – Anil

ответ

2

Поместите имя таблицы в обратные ссылки, оно содержит -, которое должно быть экранировано.

Вы использовали одинарные кавычки ('), которые являются плохими в SQL.

+0

Спасибо! Это сработало! – Rain336

0
pls try this code. 

     CREATE TABLE `table_name`(
     `ID` INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY , 
     `UUID` VARCHAR(36) NOT NULL 
     ); 

Примечание: table_name используя этот символ.

1

Символ знака (-) не допускается при использовании кавычек. http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

Идентификатор может быть процитирован или неквалифицирован. Если идентификатор содержит специальных символов или зарезервированное слово, вы должны указывать его каждый раз, когда вы ссылаетесь на него. (Исключение: зарезервированное слово, которое следует за периодом в квалифицированное имя должно быть идентификатором, поэтому он не должен быть в кавычках.)

Это выполняется в настоящее время:

CREATE TABLE 95f7ed55-ab3d-46f9-bffe-72bf5780a1ec (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
`UUID` VARCHAR(36) NOT NULL 
); 

Но идентификатор на следует использовать первую линию:

CREATE TABLE `95f7ed55-ab3d-46f9-bffe-72bf5780a1ec` (

Возможно, что-то подобное сделает трюк? (Редактирование: добавлено "IF NOT EXISTS" от ответа Анил Кумар)

CREATE TABLE IF NOT EXISTS `?` (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
`UUID` VARCHAR(36) NOT NULL 
); 
0
-- DROP PROCEDURE IF EXISTS createTblDynamically; 
DELIMITER // 
CREATE PROCEDURE createTblDynamically(tblName VARCHAR(255)) 
BEGIN 
    SET @tableName = tblName; 
    SET @q = CONCAT(' 
     CREATE TABLE IF NOT EXISTS `' , @tableName, '` (
      ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
`UUID` VARCHAR(36) NOT NULL 
     ) ENGINE=MyISAM DEFAULT CHARSET=utf8 
    '); 
    PREPARE stmt FROM @q; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 

END // 
1

Пожалуйста, попробуйте следующий синтаксис запроса:

CREATE TABLE table_name (ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,UUID VARCHAR(36) NOT NULL); 
+0

Можете ли вы объяснить, как это отвечает на вопрос? – ughai

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