2015-06-05 105 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