Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式创建架构时获取未知数据库异常?_Java_Mysql_Hibernate_Hibernate Mapping_Schemaexport - Fatal编程技术网

Java 以编程方式创建架构时获取未知数据库异常?

Java 以编程方式创建架构时获取未知数据库异常?,java,mysql,hibernate,hibernate-mapping,schemaexport,Java,Mysql,Hibernate,Hibernate Mapping,Schemaexport,我正在尝试使用hibernate/GWT/Java以编程方式创建模式和表。我创建了包含所有映射资源和属性等的配置,如下所示: Configuration hibConfiguration = new Configuration().configure(configFileDoc); 但是当我说 SchemaExport schemaExport = new SchemaExport(hibConfiguration); schemaExport.create(true, true); 它抛出

我正在尝试使用hibernate/GWT/Java以编程方式创建模式和表。我创建了包含所有映射资源和属性等的配置,如下所示:

Configuration hibConfiguration = new Configuration().configure(configFileDoc);
但是当我说

SchemaExport schemaExport = new SchemaExport(hibConfiguration);
schemaExport.create(true, true);
它抛出异常作为

ERROR: HHH000231: Schema export unsuccessful

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'testschema'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        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.checkErrorPacket(MysqlIO.java:943)
        at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:154)
        at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:193)
        at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:55)
        at org.hibernate.tool.hbm2ddl.DatabaseExporter.<init>(DatabaseExporter.java:52)
        at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:367)
        at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304)
        at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293)
错误:hh000231:架构导出失败
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知数据库“testschema”
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.Util.getInstance(Util.java:386)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)上
在com.mysql.jdbc.MysqlIO.checkErrorPacket上(MysqlIO.java:3541)
在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)上
位于com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
位于com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:792)
位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47)
位于sun.reflect.generatedConstructor accessor36.newInstance(未知源)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411)
位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
位于java.sql.DriverManager.getConnection(DriverManager.java:582)
位于java.sql.DriverManager.getConnection(DriverManager.java:154)
位于org.hibernate.service.jdbc.connections.internal.DriverManager连接ProviderImpl.getConnection(DriverManager连接ProviderImpl.java:193)
位于org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:55)
位于org.hibernate.tool.hbm2ddl.DatabaseExporter(DatabaseExporter.java:52)
位于org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:367)
位于org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304)
位于org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293)
我的cfg.xml文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<hibernate-configuration>
   <session-factory>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.password">passwd</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testSchema</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
      <property name="javax.persistence.validation.mode">none</property>
      <property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
      <property name="hibernate.default_entity_mode">dynamic-map</property>
      <property name="hibernate.hbm2ddl.auto">create</property>
   </session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
passwd
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/testSchema
根
org.hibernate.dialogue.mysql5innodbdialogue
没有一个
假的
动态地图
创造

如果我手动创建了模式,那么它就可以正常工作,也就是说,也可以创建表和列。但通常情况下,它不会创建架构,是否无法自动创建架构?

您需要在hibernate配置文件中再添加一个属性,以自动创建数据库/架构:

<property name="hibernate.hbm2ddl.auto">create</property>
创建

我猜
hibernate
仅在创建
数据库的情况下创建模式。您需要手动创建数据库
testschema


手动创建数据库
testschema
,然后启动hibernate应用程序。

可以自动创建模式。将以下属性添加到Hibernate配置xml:

<property name="hibernate.hbm2ddl.auto">update</property>
更新

<prop key="hibernate.hbm2ddl.auto">update</prop>
更新
根据上述属性,Hibernate将仅在数据库不存在时创建数据库,并将更新任何现有表以匹配当前域模型

另一个选择是:

 <property name="hibernate.hbm2ddl.auto">create-drop</property>
createdrop
上述属性意味着Hibernate将在每次启动应用程序时创建一个全新的数据库

更新:有用的URL


Hibernate不会动态创建架构…您必须手动创建它。我使用简单的JDBC连接和语句来创建模式,然后SchemaExport将完成生成表和字段的工作。因此,无法使用hibernate创建实际的模式。您必须手动创建它

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = factory.newDocumentBuilder();
 Document configFileDoc = builder.parse(new ByteArrayInputStream(configFileStr.getBytes()));

 Configuration hibConfiguration = new Configuration();
 hibConfiguration.configure(configFileDoc);
 ArrayList<Document> hbmFileDocs = getHBMFileDocList(); //created the documents of the file string
 for(Document doc : hbmFileDocs)
        hibConfiguration.addDocument(doc);

 hibConfiguration.buildMappings();
 Class.forName("com.mysql.jdbc.Driver");
 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/", "username", "password");
 stmt = conn.createStatement();
 String sql = "CREATE DATABASE "+schemaName;
 stmt.executeUpdate(sql);
 SchemaExport schemaExport = new SchemaExport(hibConfiguration);
 schemaExport.create(true, true);
DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
文档configFileDoc=builder.parse(新的ByteArrayInputStream(configFileStr.getBytes());
配置hibConfiguration=新配置();
配置(configFileDoc);
ArrayList hbmFileDocs=getHBMFileDocList()//创建文件字符串的文档
用于(文件文档:hbmFileDocs)
hibConfiguration.addDocument(doc);
hibConfiguration.buildMappings();
Class.forName(“com.mysql.jdbc.Driver”);
conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/“,”用户名“,”密码“);
stmt=conn.createStatement();
String sql=“CREATE DATABASE”+schemaName;
stmt.executeUpdate(sql);
SchemaExport SchemaExport=新SchemaExport(hibConfiguration);
schemaExport.create(true,true);

这将生成完整的模式,它对我很有效。

很抱歉,我在cfg.xml中已经有了该属性,但忘记了提及。刚刚编辑了该文件。谢谢但它还是给出了同样的例外。没有变化。它给出了同样的例外。我尝试了所有的选择。如果你曾经做过