我遇到无法将 Java 项目与 SQLite 数据库连接的问题。我已经在一个单独的程序中尝试过它并且它在那里工作,但在这个程序中不起作用。我得到的例外是它无法映射。也许你们中的一个人知道问题可能是什么。
package justanorg.taskmanager.DAO;
public class Test {
public static void main(String[] args) {
NameDAOImpl names = new NameDAOImpl();
System.out.println(!names.getNames().isEmpty());
}
}
hibernate.cfg.xml
<!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.sqlite.JDBC</property>
<property name="connection.url">jdbc:sqlite:src/main/resources/justanorg/taskmanager/DAO/TaskManager.db/</property>
<property name="hibernate.dialect">org.sqlite.hibernate.dialect.SQLiteDialect</property>
<mapping class="justanorg.taskmanager.DAO.model.Project"/>
<mapping class="justanorg.taskmanager.DAO.model.Name"/>
</session-factory>
</hibernate-configuration>
我的班级填写实体数据:
package justanorg.taskmanager.DAO.model;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table (name = "name")
public class Name {
@Id
@Column(name = "Name")
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
执行SQL命令:
package justanorg.taskmanager.DAO;
import justanorg.taskmanager.DAO.model.Name;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import java.util.ArrayList;
import java.util.List;
public class NameDAOImpl{
private SessionFactory sessionFactory = HibernateUtils.getSessionFactory();
public List<Name> getNames() {
List<Name> names = null;
Session session = null;
Transaction transaction = null;
try {
session = sessionFactory.openSession();
transaction = session.beginTransaction();
names = session.createQuery("from Name").list();
transaction.commit();
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
return new ArrayList<>();
}
return names;
}
}
我已经检查了你的程序,你可以下载并测试一下。我使用的是Postgresql数据库,你可以使用SQLLite。
package mypackage;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table (name = "name")
public class Name {
@Id
@Column(name = "Name")
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
package mypackage;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import javax.persistence.TypedQuery;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
public class NameDaoImpl{
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
SessionFactory sessionFactory=meta.getSessionFactoryBuilder().build();
public List<Name> getNames() {
List<Name> names = null;
Session session = null;
Transaction transaction = null;
try {
session = sessionFactory.openSession();
transaction = session.beginTransaction();
TypedQuery query = session.createQuery("from Name");
names=query.getResultList();
Iterator<Name> itr=names.iterator();
while(itr.hasNext())
{
Name name=itr.next();
System.out.println(name.getName());
}
transaction.commit();
//return names;
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
return new ArrayList<>();
}
return names;
}
}
package mypackage;
public class Test {
public static void main(String[] args) {
NameDaoImpl names = new NameDaoImpl();
System.out.println(!names.getNames().isEmpty());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 5.3//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-5.3.dtd">
<hibernate-configuration>
<session-factory>
<property name="hbm2ddl.auto">update</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/ayurgyan</property>
<property name="connection.username">postgres</property>
<property name="connection.password">postgres</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<mapping class="mypackage.Name"/>
<!--<mapping class="mypackage.Regular_Employee"/>
<mapping class="mypackage.Contract_Employee"/> -->
</session-factory>
</hibernate-configuration>