java - 如何在不使用实体类的情况下使用 EclipseLink 与表进行交互?

标签 java mysql sql jpa eclipselink

我的项目中没有实体类。我的要求是当我连接到基于模式的数据库时,我必须从该模式中获取所有表的名称。

这里我有一个架构为“companydb”,有 5 个表。下面是我从特定模式中检索表总数的代码。

这里可能是“查询”发生的异常。查询在这里不是很好,所以我必须使用什么类型的查询以及如何获取表列表。

持久化.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="reports" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <properties>

        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/reports" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="root" />
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
    </properties>
</persistence-unit>
</persistence>    

获取表格列表.java

@WebServlet("/GetTableList")
public class GetTableList extends HttpServlet {

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    EntityManager entityManager = EntityManagerUtil.getEmf()
            .createEntityManager();
    try {

        Query query = entityManager.createQuery("SELECT * FROM companydb.tables");
        List list = query.getResultList();
        System.out.println(list);
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            iterator.next();

        }
        out.print(list);
        System.out.println("Data retrived successfully");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        entityManager.close();
    }
}
}

异常(exception)是:

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing the query [SELECT * FROM companydb], line 1, column 7: unexpected token [*].
Internal Exception: NoViableAltException(93@[330:16: ( DISTINCT )?])

我怎么能过来。

最佳答案

使用 native 查询从您的架构中获取表列表

Query query = entityManager.createNativeQuery("SHOW TABLES FROM companydb");

关于java - 如何在不使用实体类的情况下使用 EclipseLink 与表进行交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124858/

相关文章:

java - 当起始地址不为零时调用 SetByteArrayRegion 时没有复制

mysql - 如何在 SQL 中获取行数以及行数?

java - 如何在 docker 测试容器中添加运行参数

java - 拆分消息并在 Camel 中路由它们

php - 使用复选框 AJAX 过滤 MySQL 结果

mysql - Uncaught Error : Call to undefined function mysql_escape_string() in wordpress

mysql - 按顺序插入或打开表单到特定记录,同时仍然可以查看其他记录

sql - 查询以返回具有重复字符串/数字的所有记录

Mysql查询获取恰好1天前创建的记录

java - 我的 fat jar 与Hadoop中的.jars冲突