Erstellen einer Tabelle programmgesteuert verwenden MyBatis und MySql
Ich möchte erstellen Sie eine Methode, um dynamisch erstellen von Tabellen nur auf der Durchreise der Tabellenname als variable.
Ich habe meine xml-mapper
<mapper namespace="com.mappers.TableCreatorMapper">
<cache />
<insert id="createNewTableIfNotExists" parameterType="String" >
CREATE TABLE IF NOT EXISTS #{tableName}
(
`ID` varchar(20) NOT NULL,
PRIMARY KEY (`ID`)
)
ENGINE=InnoDB
</insert>
</mapper>
Und meine Java-Interface Mapper ist einfach:
public interface TableCreatorMapper {
public void createNewTableIfNotExists(String tableName);
}
aber wenn ich mein interface
tableCreatorMapper.createNewTableIfNotExists("test");
Bekomme ich die folgende exception:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: 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 ''test'
(
`ID` varchar(20) NOT NULL,
PRIMARY KEY (`ID`)
' at line 1
### The error may involve com.mappers.TableCreatorMapper.createNewTableIfNotExists-Inline
### The error occurred while setting parameters
### SQL: CREATE TABLE IF NOT EXISTS ? ( `ID` varchar(20) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB
### Cause: 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 ''test'
(
`ID` varchar(20) NOT NULL,
PRIMARY KEY (`ID`)
' at line 1
; bad SQL grammar []; nested exception is 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 ''test'
(
`ID` varchar(20) NOT NULL,
PRIMARY KEY (`ID`)
' at line 1
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)
at org.sp
Wenn ich stattdessen ändern Sie die Abfrage, indem die `für die Tabelle-name:
CREATE TABLE IF NOT EXISTS `#{tableName}`(
`ID` varchar(20) NOT NULL,
PRIMARY KEY (`ID`)
)
ENGINE=InnoDB
Bekomme ich
### The error occurred while setting parameters
### SQL: CREATE TABLE IF NOT EXISTS `?`( `ID` varchar(20) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB
### Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
; SQL []; Parameter index out of range (1 > number of parameters, which is 0).; nested exception is java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
Ahnung warum?
InformationsquelleAutor MarMan | 2015-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen
#{name} ist für Parameter in PreparedStatement (siehe String-Ersetzung in Parameter).
Bitte versuchen Sie aktualisierte Antwort; wenn es nicht funktioniert, einfach Bindung sollte funktionieren.
Danke!!! ${_parameter} funktioniert wie ein Charme!
InformationsquelleAutor agad
in DAO, verwenden Sie die annotation
@Param
void createTableIfNotExist(@Param("uuid") String uuid);
in-MAPPER verwenden
$
<bind>
genutzt werden könnte-MAPPER auch.InformationsquelleAutor Tiina