![](/img/trans.png)
[英]JDBC: Create Table with PreparedStatement, SQL Syntax Error or not?
[英]SQL Syntax Error with CREATE TABLE
嘗試執行以下代碼時,出現SQL Sytax錯誤:
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
謝謝你的幫助!
將表名放入反引號,其中包含-
必須轉義。
您使用了單引號( '
),這在SQL中是不好的。
不使用引號時,不允許使用符號(-)。 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` (
也許這樣的事情可以解決問題? (編輯:從Anil Kumar的答案中添加了“如果不存在”)
CREATE TABLE IF NOT EXISTS `?` (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`UUID` VARCHAR(36) NOT NULL
);
請嘗試以下查詢語法:
CREATE TABLE table_name (ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,UUID VARCHAR(36) NOT NULL);
pls try this code.
CREATE TABLE `table_name`(
`ID` INT( 255 ) UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
`UUID` VARCHAR( 36 ) NOT NULL
);
注意: table_name
使用此符號。
-- 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 //
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.