2015-06-05 122 views
0

我得到一個SQL錯誤的語法時才當我嘗試執行此代碼: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

看起來你使用單引號來指定表名'''。嘗試使用反引號,看看這是否解決它。 –

+0

你可以請把你的整個代碼,使用dyanmic sql創建DDL嗎? – 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