我刚冬眠,所以我的问题对您来说很明显。我在H2控制台中用3个表(data.mv.db)创建了数据库,插入一些值,然后将其复制到项目路径中的数据库文件夹中。现在,我尝试读取其中一个进行测试,但是始终会出现表不存在的错误。我尝试将属性添加到连接URL,例如连接延迟或不将字母更改为大写,但仍然相同。
错误:
原因:org.h2.jdbc.JdbcSQLException:Tabela“ LOGIN_DATA” nie istnieje找不到表“ LOGIN_DATA”; SQL语句:选择 login_data0_.ID为ID1_0_,login_data0_.USERNAME为USERNAME2_0_, login_data0_.PASSWORD为PASSWORD3_0_,login_data0_.FAVOURITE为 来自PUBLIC.LOGIN_DATA login_data0_ [42102-192]的FAVOURIT4_0_ org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 在org.h2.message.DbException.get(DbException.java:179)处 org.h2.message.DbException.get(DbException.java:155)在 org.h2.schema.Schema.getTableOrView(Schema.java:437)在 org.h2.command.Parser.readTableOrView(Parser.java:5371)在 org.h2.command.Parser.readTableFilter(Parser.java:1257)位于 org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1896)在 org.h2.command.Parser.parseSelectSimple(Parser.java:2044)在 org.h2.command.Parser.parseSelectSub(Parser.java:1890)在 org.h2.command.Parser.parseSelectUnion(Parser.java:1709)在 org.h2.command.Parser.parseSelect(Parser.java:1697)在 org.h2.command.Parser.parsePrepared(Parser.java:445)在 org.h2.command.Parser.parse(Parser.java:317)在 org.h2.command.Parser.parse(Parser.java:289)在 org.h2.command.Parser.prepareCommand(Parser.java:254)位于 org.h2.engine.Session.prepareLocal(Session.java:560)在 org.h2.engine.Session.prepareCommand(Session.java:501)在 org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1201) 在 org.h2.jdbc.JdbcPreparedStatement。(JdbcPreparedStatement.java:73) 在 org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:289) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ 5.doPrepare(StatementPreparerImpl.java:145) 在 org.hibernate.engine.jdbc.internal.StatementPreparerImpl $ StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:171) ...还有17个
休眠配置:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:file:~/database/data</property>
<property name="connection.username">admin</property>
<property name="connection.password">1234</property>
<property name="hibernate.default_schema">PUBLIC</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<mapping class="data.Login_data"/>
</session-factory>
</hibernate-configuration>
Login_data类:
@Entity
@Table(name = "LOGIN_DATA")
public class Login_data {
private int id;
private String name;
private String password;
private String values;
public Login_data() {
// this form used by Hibernate
}
public Login_data(int id, String name, String password, String values) {
this.id = id;
this.name = name;
this.password = password;
this.values = values;
}
@Id
@GeneratedValue
@Column(name = "ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name = "USERNAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "PASSWORD")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = "FAVOURITE")
public String getValues() {
return values;
}
public void setValues(String values) {
this.values = values;
}
}
主类:
public static void main(String[] args){
Login_data user = new Login_data();
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
/*session.beginTransaction();
session.save(user);
session.getTransaction().commit();*/
// now lets pull events from the database and list them
session.beginTransaction();
List result = session.createQuery("from Login_data").list();
for (Login_data event : (List<Login_data>) result) {
System.out.println(event.getName());
}
System.out.print(result);
session.getTransaction().commit();
session.close();
}
我尝试编辑配置。所以我添加:
<property name="hibernate.hbm2ddl.auto">update</property>
并创建空数据库。奇怪的是,在H2 Console中打开后,Java创建的数据库和表不可见。这样就可能是问题。 我想放入很多数据,那么如何使它不在Java中可见呢?
答案 0 :(得分:0)
感谢@JB Nizet,我看到了我的错误。我正在将数据库复制到项目路径,其中路径“〜/ database”显示到用户文件夹中的数据库,并且正在将其复制到项目文件夹,因此我应该使用“ ./database”。 仍然,如果我想使之可运行,就需要使用用户位置使其在其他计算机上正确运行。