使用 ObjectDB 搜索空用户数据库时出现问题

2024-02-21

我正在创建一个 java 应用程序,它使用 ObjectDB 来创建和维护一组数据库。我目前正在尝试实现一个数据库来存储由用户名和密码字符串组成的用户对象。在 JFrame/swing 类上,我有一个用于创建新用户的按钮,单击此按钮时,我希望发生以下情况:

  1. 创建(或连接到)数据库
  2. 搜索数据库以查看是否存在具有提供的用户名的用户对象
  3. 如果用户已存在,则显示对话框消息,否则创建用户

但是,当单击此按钮时,我在使用查询对象结果的行上收到“找不到用户”错误。我很确定这是因为我有一个空数据库,但是我希望代码在程序第一次运行时能够工作,因此它需要处理一个空数据库。我尝试在首次运行查询之前更改代码以创建新用户,然后每次单击按钮时代码都会按照我希望的方式工作,并且它可以检测是否需要创建新用户。

我试图创建一个“默认”或“管理员”类型的用户,以便搜索可以工作,但这意味着每次运行程序时都会创建一个重复的“默认”用户,这显然是一个不需要的功能,我可以' t 执行查询来检查数据库是否为空(因此我只能在程序第一次运行时创建默认用户),因为这是我首先遇到的问题!

那么,对于任何有使用 ObjectDB 经验的人来说,有没有办法可以处理搜索空数据库的情况?

这是我的代码的相关部分:

public class FrameLogIn extends JFrame {

private JPanel contentPane;
private String username;
char[] password;
private static EntityManager em;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                FrameLogIn frame = new FrameLogIn();
                frame.setVisible(true);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public FrameLogIn() {

    EntityManagerFactory emf = 
            Persistence.createEntityManagerFactory("user.odb");
    em = emf.createEntityManager();


    final JTextField txtUsername = new JTextField();
    txtUsername.setFont(new Font("Segoe UI Light", Font.PLAIN, 30));
    txtUsername.setHorizontalAlignment(SwingConstants.CENTER);
    txtUsername.setToolTipText("username");
    txtUsername.setText("");
    txtUsername.setBounds(220, 30, 177, 52);
    contentPane.add(txtUsername);
    txtUsername.setColumns(10);

    final JPasswordField passwordField = new JPasswordField();
    passwordField.setFont(new Font("Tahoma", Font.PLAIN, 30));
    passwordField.setHorizontalAlignment(SwingConstants.CENTER);
    passwordField.setBounds(220, 93, 177, 52);
    contentPane.add(passwordField);

    JButton btnNewUser = new JButton("New user");
    btnNewUser.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            username = txtUsername.getText();
            password = passwordField.getPassword();

            System.out.println(username);
            TypedQuery<Long> q = em.createQuery(
                    "SELECT COUNT(u) FROM User u "
                    + "WHERE u.name = '" + username + "'", Long.class);

            if (q.getSingleResult()>0) {
                JOptionPane.showMessageDialog(contentPane.getParent(), "A user with this name already exists.");
            } else {
                em.getTransaction().begin();
                User newUser = new User(username, password.toString());
                em.persist(newUser);
                em.getTransaction().commit();
                JOptionPane.showMessageDialog(contentPane.getParent(), "User created.");
            }   
        }
    });
    btnNewUser.setFont(new Font("Segoe WP Semibold", Font.PLAIN, 25));
    btnNewUser.setBackground(Color.WHITE);
    btnNewUser.setBounds(71, 175, 149, 63);
    contentPane.add(btnNewUser);

}
}

和错误:

Exception in thread "AWT-EventQueue-0" [ObjectDB 2.5.3_03] SELECT COUNT(u) FROM  ==> User <==  u WHERE u.name = ''
javax.persistence.PersistenceException
Type User is not found (error 301)
 (position 21)  at com.objectdb.jpa.JpaQuery.getSingleResult(JpaQuery.java:723)
    at sg.FrameLogIn$2.actionPerformed(FrameLogIn.java:113)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.objectdb.o.TEX: Type User is not found
    at com.objectdb.o.MSG.e(MSG.java:107)
    at com.objectdb.o.TRS.g(TRS.java:212)
    at com.objectdb.o.SYR.q(SYR.java:259)
    at com.objectdb.o.SYR.n(SYR.java:188)
    at com.objectdb.o.QRC.<init>(QRC.java:152)
    at com.objectdb.o.QRM.U6(QRM.java:250)
    at com.objectdb.o.MST.U6(MST.java:933)
    at com.objectdb.o.WRA.U6(WRA.java:293)
    at com.objectdb.o.WSM.U6(WSM.java:114)
    at com.objectdb.o.QRR.g(QRR.java:245)
    at com.objectdb.o.QRR.f(QRR.java:154)
    at com.objectdb.jpa.JpaQuery.getSingleResult(JpaQuery.java:716)
    ... 37 more

谢谢,还要记录一下,我不会存储纯文本密码,我只是想在开始实施哈希密码之前让基本数据库正常工作。


如果实体类尚不在数据库中(尚未持久化该类的实例)并且未定义持久化单元,则可能会发生这种情况。

如果这似乎是原因,请定义一个持久单元 http://www.objectdb.com/java/jpa/entity/persistence-unit或者在查询之前将类引入 ObjectDB,例如:

  em.getMetamodel().entity(User.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ObjectDB 搜索空用户数据库时出现问题 的相关文章

  • 如何从另一个 Flux 中排除 Flux 中的所有元素

    我有两个Flux一个用于成功元素 另一个用于保存错误元素 Flux
  • Java中使用正则表达式确定字符串是否为URL [重复]

    这个问题在这里已经有答案了 可能的重复 检查字符串是否为有效 URL 的最佳正则表达式是什么 https stackoverflow com questions 161738 what is the best regular express
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • 搜索 JTable 时 - 未获得正确的 ID

    所以我尝试在搜索名称后单击表 然后在其他表中编辑它 问题是我没有获得正确的 ID 而只获得第一个 ID JTable https i stack imgur com TnNIq png 搜索行动 https i stack imgur co
  • 如何在 JAVA servlet 中处理压缩 (gzip) HTTP 请求(不是响应) - 简单示例?

    我为这个问题苦苦挣扎了很长一段时间 在找到一个简单的解决方案后 想问一个问题和答案 这个问题在堆栈溢出时以不同的方式被多次提出 并且accepted solutions是partially correct and complex或谈论res
  • Spring REST 控制器返回带有空数据的 JSON [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个简单的 Spring Boot Web 应用程序 我正在尝试从服务器接收一些数据 控制器返回一个集合 但浏览器收
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • 返回 Consumer 表达式内的 Method 值

    我试图在方法中返回一个布尔值 并且我正在使用消费者函数 有什么方法可以直接在 Consumer 表达式中返回该值吗 这是代码 private static boolean uuidExists UUID uuid MySQL getResu
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • RecyclerView onItemClickListener 不工作

    我正在研究回收视图并尝试对 recyclerview 的每个项目使用点击侦听器界面 这是我的活动课程 public class LegacyHomeActivity extends ActivityBaseDrawer private Li
  • Java - 在特定日期执行方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要在每年的特定日期执行一个方法 我该如何在java中执行此操作 Thanks Chris 按优先顺序排列 The Quartz htt
  • IntelliJ IDEA:忽略代码覆盖率中的琐碎方法

    在 IntelliJ IDEA 15 0 2 中 如何在测试覆盖率测量期间忽略琐碎的 getter 和 setter 琐碎方法 should be measure public void complex fancy interesting
  • 使 @Schedule 在集群环境中仅运行一次

    我有两个 tomee 实例集群 每个都有一个方法注释如下 Schedule dayOfWeek public void runMeDaily 我只想每天运行一次这个方法 每天不两次 每个实例一次 我可以使用此处描述的标志仅在一个WebLog
  • 将文件内容存储到数组中

    我的刽子手程序有问题 我真的认为我需要做的事情超出了我对java的理解 这是我的代码 import java io BufferedReader import java io FileReader import java io FileNo
  • 更新 Maven 项目模块中的父版本

    我有一个奇怪的场景 我有一个项目 Y 它有一个模块 X 和一些其他模块 X 是项目 Y 的一部分 但它不作为该项目的模块链接 因此 每次发布 Y 的新版本时 都需要有人手动更新 X 中的父版本 我需要以这样的方式更新 Y 项目 a 每次发布
  • 我们还需要迭代器设计模式吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Java 到 TestRail 的 API 将测试用例添加到现有测试运行中?

    我在执行期间创建了一个测试运行 我想在它们开始执行的同时添加测试用例 如果测试用例尚不存在 则已创建 并且该测试用例应该与其他测试用例一起添加到现有的测试运行中 我尝试过使用setCaseIds在运行期间和更新运行之后 但这会覆盖现有的运行
  • JFrame 类型的方法 ... 未定义

    我正在尝试制作一个带有两个菜单列表的 gui 每个菜单列表有 3 个项目 我的问题是 当我单击某个项目时 出现错误 JFrame 类型的方法 displayList int AirplaneList 未定义 AirplaneControll
  • 使用 Maven 将值附加到文件中

    我想在文件末尾附加一个值 但我无法确定要使用哪个插件 例子 我要附加的值 myValue file value1 value2 myValue 追加后 我知道我可以使用 antrun plugin 来做到这一点 但是可以使用 Maven 插
  • Struts2 中有多种结果类型?

    我有一个使用 Tiles 的 Struts2 应用程序 如何在操作映射中获取多种结果类型 因为我需要将de输出设置为JSON数据 并且同时Tiles 我努力了

随机推荐

  • 如何使用存储过程在 mysql 中选择和插入值

    我是使用存储过程的新手 我有一个从表中获取值的查询 之后 我需要将结果插入到另一个表中 这是我的查询 SELECT a gender b purpose abroad as per recorded travel b country nam
  • Minecraft 克隆的最佳盒子选择方法

    我正在制作 Minecraft 克隆作为我的第一个 OpenGL 项目 但卡在了框选择部分 做出可靠的盒子选择的最佳方法是什么 我一直在研究一些 AABB 算法 但它们都没有足够好地解释它们到底做了什么 尤其是经过超级调整的算法 而且我不想
  • 跳出 _.each 循环

    是否可以在每个循环中跳出下划线 each obj function v i if i gt 2 break lt does not work some code here 我可以使用另一种设计模式吗 我认为你不能 所以你只需将函数的内容包装
  • Facebook 画布应用程序“redirect_uri”在授权和身份验证后突破 iframe

    我正在升级我现有的 FB 应用程序 并且非常疯狂地尝试获得一个简单的 PHP iframe 画布应用程序来授权和身份验证 以及使用 SSL 从来没有看过这么多例子 这就是我陷入困境的地方 用户授权应用程序并且应用程序对用户进行身份验证后 我
  • 如何从浏览器将用户重定向到 Google Play 上应用页面的评论选项卡?

    我在 Google Play 上发布了一个应用程序 我想要一个将用户重定向到 google play 上应用程序页面上的评论选项卡的网址 在发布应用程序的文档中 有一个用于将用户重定向到应用程序的详细信息选项卡 默认 的 url 我希望当用
  • 如何在数组中查找大于、小于或等于某个值的数字?

    我试图输出小于 5 的值和大于数组中所有值的平均值的值 我不知道如何使这一切顺利进行并输出正确的数字 有人可以帮忙吗 这就是我所拥有的 我快到了 我只是不知道我做错了什么 int numbers 2 4 6 8 10 12 14 16 in
  • PrimeFaces p:focus on p:dataTable 元素

    我目前正在尝试设置一个可编辑的数据表 当用户使用 JavaScript 或支持 bean 编辑单元格时 该表使用 ajax 来保持焦点 因为当发生单元格编辑时 表的其他部分中的数据将需要更新 因此应重新绘制表格 使焦点元素失去焦点 目前我正
  • Matlab fft 函数交换索引

    我编写了一个简单且非常小的 Matlab 代码 用于计算给定数组 或向量 的离散傅里叶变换 我手动计算出来并得到了答案 我的 Matlab 代码也给出了相同的答案 但fft通过交换索引给出了与此不同的答案 以下是我所做的手动计算 这是第二张
  • 如何更改 Windows 控制台应用程序中的文本或背景颜色

    哪个 C 函数更改文本或背景颜色 MS Visual studio 例如cout lt lt This text 如何将 此文本 设为红色 您可以使用 Win32 更改控制台应用程序的颜色 以下是有关如何操作的示例 include stda
  • 关于 WSO2 API Manager 数据源

    我现在正在执行 WSO2 API 管理器 Analytics 2 0 POC 当我将数据源从 H2 更改为 Oracle 时 在 wso2am 2 0 1 SNAPSHOT 中 有 2 个数据源配置文件 master datasources
  • EF EntityCollection 中的更改通知

    在 Silverlight 4 项目中 我使用 WCF RIA 服务 MVVM 原则和 EF 4 我遇到了这种情况 创建了一个名为 Category 的实体和另一个名为 CategoryLocale 的实体 使用 VS 自动执行 没有 PO
  • 修复 Tomcat 8 上的错误代码:ssl_error_no_cypher_overlap

    我有一个便宜的 SSL 证书 我想用 Tomcat 8 0 26 配置它 我在 Linux 上运行以下命令来创建密钥库 root cert keytool import alias root keystore tomcat jks trus
  • 为哈希选择合适的表大小

    如果我有一个 1000 个键集 我的哈希表的合适大小是多少 如何确定 它取决于负载系数 表将增加其大小并重新分布其元素的 满百分比 点 如果您知道正好有 1000 个条目 并且该数字永远不会改变 则只需将负载因子设置为 1 0 将初始大小设
  • 使用 VBA 删除 Excel 中的工作表和数据透视表

    我正在尝试在 VBA 中集成功率枢轴和枢轴图表的创建 并已经完成了很大一部分 然而 我遇到了一个我似乎无法克服的问题 我创建新的工作表 在其中创建数据透视并将其导出为 PDF 完成后 我删除数据透视表和工作表 Sub DeleteAllPi
  • 在 Python 中测试所有组合

    我有两组选择 optionList1 a1 a2 a3 an optionList2 b1 b2 b3 bn 选项列表中的元素数量不一定相等 我必须从第一个选项列表中选择两次 如何确保我已尝试了第一个列表中的 2 个选项和第二个列表中的一个
  • 如何从外部函数更改局部静态变量值

    include
  • JQuery .ressized,如何为alsoResize属性选择子级

    我有弹出的窗口 可以拖动和调整大小 一切都很好 除了我需要调整大小窗口来调整其中的 div 大小 这可以通过设置轻松完成alsoResize selector 但是 此窗口的每个实例都具有相同的 div 和相同的类名 如果调整一个窗口的大小
  • openOptionsMenu 不适用于全屏

    我有一个全屏模式的活动 android theme android style Theme NoTitleBar Fullscreen 我用按钮打开选项菜单 dmenu setOnClickListener new OnClickListe
  • ggsurvplot - 轴交叉于 0,0

    Survminer产生不错的情节 但有没有办法进一步改变常规的结果ggplot 命令 我尝试做的是使 y 轴从原点开始 如上所述here https stackoverflow com questions 13701347 force th
  • 使用 ObjectDB 搜索空用户数据库时出现问题

    我正在创建一个 java 应用程序 它使用 ObjectDB 来创建和维护一组数据库 我目前正在尝试实现一个数据库来存储由用户名和密码字符串组成的用户对象 在 JFrame swing 类上 我有一个用于创建新用户的按钮 单击此按钮时 我希