- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的简单类:
@DatabaseTable(tableName = "VlpTag")
public class VlpTag implements Serializable {
private static final long serialVersionUID = -4912974444196844860L;
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(foreign = true, columnName = "buid", canBeNull = false, foreignAutoCreate = true, foreignAutoRefresh = true)
private VlpVirtualApp vApp;
@DatabaseField
private long lastUpdated;
@DatabaseField(index=true)
private String tagValue;
@DatabaseField(dataType = DataType.ENUM_INTEGER)
private TagType tagType;
public static enum TagType {
UUID, TAG
};
public VlpTag() {
// needed by ormlite
}
}
然后,如果表不存在,我将使用 TableUtils 创建表:
TableUtils.createTableIfNotExists(MySQLConnection.getInstance()
.getConnection(), VlpTag.class);
如果表不存在,没有问题,尽管表存在,ORMLite 抛出一个异常说明索引存在:
java.sql.SQLException: SQL statement failed: CREATE INDEX `VlpTag_tagValue_idx` ON `VlpTag` ( `tagValue` )
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
at com.j256.ormlite.table.TableUtils.doStatements(TableUtils.java:464)
at com.j256.ormlite.table.TableUtils.doCreateTable(TableUtils.java:440)
at com.j256.ormlite.table.TableUtils.createTable(TableUtils.java:220)
at com.j256.ormlite.table.TableUtils.createTableIfNotExists(TableUtils.java:61)
at com.banctecmtl.ca.vlp.controller.listvmupdater.DatabaseUpdater.<init>(DatabaseUpdater.java:47)
at com.banctecmtl.ca.vlp.controller.listvmupdater.ListVMUpdater.<init>(ListVMUpdater.java:42)
at com.banctecmtl.ca.vlp.controller.VlpController.<init>(VlpController.java:75)
at com.banctecmtl.ca.vlp.view.webview.server.VlpControllerServiceImpl.init(VlpControllerServiceImpl.java:32)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:433)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:616)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:468)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:222)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672)
at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1068)
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:811)
at com.google.gwt.dev.DevMode.main(DevMode.java:311)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'VlpTag_tagValue_idx'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)
at com.j256.ormlite.jdbc.JdbcCompiledStatement.runExecute(JdbcCompiledStatement.java:62)
at com.j256.ormlite.table.TableUtils.doStatements(TableUtils.java:458)
... 29 more
这个bug已经reported on the bug list我想知道它已经解决了因为我有同样的问题。我使用 MYSQL 和 ormlite-core-4.33.jar
。
我这里有什么地方做错了,或者那里有问题吗?
谢谢
最佳答案
我已经添加了针对此问题的修复程序。参见 https://github.com/ethangui/ormlite-core-4.42-sources
构造CREATE TABLE语句时
原解:
添加 PRIMARY KEY 语句后:
CREATE TABLE IF NOT EXIST table_name ...列...主键(id)
它连接:
,CREATE INDEX index_name ON column name;
这实际上使它成为两个独立的 SQL 查询。首先它创建表,然后添加索引。它按预期工作 - 创建表并添加索引 - 除非已经存在适当的表。在这种情况下,第一个语句什么都不做,而第二个语句仍然试图创建一个索引,该索引随后会失败。
我的解决方案:我没有在 CREATE TABLE 之后添加另一个查询,而是在第一条语句中移动了 ADD INDEX。因此,
CREATE TABLE IF NOT EXIST table_name ...列...主键(id)
然后
,KEY index_name (column_name);
因此,如果表存在,则整个语句将被跳过,因此不会创建表和索引。
注意事项:
目前的实现仅检查用于添加索引的 index=true 数据字段注释。
如果表预先存在没有索引,整个语句仍然会被跳过,因此不会添加索引。
仅使用 MySQL 进行测试。
关于mysql - 如果表有索引,ormlite createTableIfNotExists 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127296/
在我的后端: //create ConnectioSource private static final String DB_NAME = "development"; private Connect
我一直在努力让一些代码在新机器上工作。我以为我终于让它工作了,但现在当我运行它时,代码在尝试创建表存储时挂起(或者实际上得到对它的引用,因为它已经存在)...我知道必须确保它始终是异步的并且该代码正在
我一直在努力让一些代码在新机器上工作。我以为我终于让它工作了,但现在当我运行它时,代码在尝试创建表存储时挂起(或者实际上得到对它的引用,因为它已经存在)...我知道必须确保它始终是异步的并且该代码正在
我有一个像这样的简单类: @DatabaseTable(tableName = "VlpTag") public class VlpTag implements Serializable {
我正在尝试学习如何在 Azure 中部署和使用 Orleans。我从 github 克隆了 AzureWebSample。我按照 http://dotnet.github.io/orleans/Sam
使用CreateTableIfNotExists()有任何开销吗?当使用 Azure 表存储时? 如果是这样,开销是多少?我只是想知道是否值得一直留在那儿? 否则应该使用DoesTableExist(
使用CreateTableIfNotExists()有任何开销吗?当使用 Azure 表存储时? 如果是这样,开销是多少?我只是想知道是否值得一直留在那儿? 否则应该使用DoesTableExist(
我有一个辅助角色,它执行一些涉及 Azure 存储的处理。如果我将 CreateTableIfNotExist() 代码从工作角色的 Run() 方法移动到 OnStart() 方法,整体性能会下降。
在 Windows Azure 存储中,我们曾经这样做来创建表: var tableClient = account.CreateCloudTableClient(); tableClient.Cre
我是一名优秀的程序员,十分优秀!