2016-07-05 68 views
0

尝试执行其在它与一列名为“一个创建表的查询来创建MySQL表,似乎也出现了错误,每次,虽然创造串查询工作在MYSQL浏览器的罚款。无法使用Hibernate

SYSOUT到createStmt给出:

Create table `myschema`.`flatTest_data_tbl`(`NAME` longtext,`TASK` longtext,`LO&"CATION` longtext) CHARACTER SET utf8 

SQLQuery createQuery = session.createSQLQuery(createStmt); 
     createQuery.executeUpdate(); 
     session.close(); 

它的错误出来的executeUpdate:

java.util.NoSuchElementException 
    at java.util.StringTokenizer.nextToken(StringTokenizer.java:349) 
    at org.hibernate.engine.jdbc.internal.BasicFormatterImpl$FormatProcess.perform(BasicFormatterImpl.java:142) 
    at org.hibernate.engine.jdbc.internal.BasicFormatterImpl.format(BasicFormatterImpl.java:91) 
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:101) 
    at org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:95) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:180) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:91) 
    at org.hibernate.engine.query.spi.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:196) 
    at org.hibernate.internal.SessionImpl.executeNativeUpdate(SessionImpl.java:1313) 
    at org.hibernate.internal.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:401) 
+0

在它引号中的列?你确定?如果你确定:你确定吗?最后:为什么? –

+0

有一个要求,我们从平面文件中选择列标题并将它们转换为mysql表,因此平面文件可以在其标题中包含双引号,如果您有解决方案,请告知我:) – user2176576

+2

我认为您正在使用规格有点太字面。如果你认真对待你的工作,那么我的建议是不要这样做。 –

回答

0

我承认采摘名字有时是一种恐怖,尤其是如果这些名称正在PROC被几种工具所隐藏。例如,您选择某个DBMS中的关键字名称,但您的关系映射器不在意。然后由数据库引发的错误被映射器打包并遮盖,您需要数小时才能找出您做错了什么。

此外,考虑串行化字符串时的编码问题。特别是通过网络发送非ASCII字符或从文件中读取数据时,很可能您会发现原始输入字符串看起来不像您最终从管道弹出的那个字符串。

由于这些原因,您的方法严重疏忽。要高兴的是,您的代码在一开始就不对,而不是在生产中。

然而,为了找到解决的办法,你看这个:

与下面的列

s_label:VARCHAR(1024), 
t_value:LONGTEXT 

创建第二个表,然后从您的原始表外键添加到该表。文件中的列名将进入s_label,您可以随意使用您喜欢的任何字符填充它。

这可能是表连接一个小的开销,但更重要的是:它的清洁:)

+0

感谢马特,反提示为我做了诡计。将列名称反引号使我们可以自由地将关键字用作列名称 – user2176576

相关问题