【问题标题】:Need some modification in my code需要对我的代码进行一些修改
【发布时间】:2012-10-04 12:33:48
【问题描述】:

这是应用程序的一小部分,用户可以在其中注册任意数量的员工,员工 ID 是通过使用 while 循环生成的……当我关闭应用程序并在第二轮再次开始填充数据时……员工 ID empid 的值重置为零。好吧,只要应用程序正在运行,我就会得到所需的 o/p,即为每个员工分配一个唯一的 ID。每当我启动应用程序时,我不希望 empid 的值从 0 开始。需要替代品和/或任何修改。此处提供代码

int empcount=0;
    public void actionPerformed(ActionEvent ae) {
            //---------------------If user wants to add data
            if(ae.getActionCommand()=="ADD EMPLOYEE") {
                System.out.println("ADDING");
        try{
            empcount=empcount+1;//----------------will assign employees with unique emp id
            //--------------------returns the text in name field to variables 
            String s_name=name.getText();
            int s_code=empcount;
            String s_dept=dept.getText();
            String s_ph=ph.getText();
            String s_bg=bg.getText();
            String s_add=add.getText();
            String s_date=date.getText();
            PreparedStatement st=null;
            Connection con = null;
            Class.forName("org.hsqldb.jdbcDriver");
            con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/", "SA", "");
            st=con.prepareStatement("Insert into EmpReg (emp_name,emp_code,emp_ph,emp_bg,emp_add,emp_date,b_id) values(?,?,?,?,?,?,?)");
            //---------------------parameters and respective values, passed to the SQL statement
            st.setString(1,s_name);
            st.setInt(2,s_code);
            st.setString(3,s_ph);
            st.setString(4,s_bg);
            st.setString(5,s_add);
            st.setString(6,s_date);
            st.setString(7,s_dept);
            st.execute();
            JOptionPane.showMessageDialog(null,"Data is inserted into the database");
            JOptionPane.showMessageDialog(code, "employee code"+ empcount+"");
            con.close();
        }
            catch(Exception Ee){
            System.out.println(Ee);
            }
                }       
            }
        });

【问题讨论】:

  • empid 的文本字段不可编辑
  • 如果你有数据库,要么让数据库为你生成 ID,要么直接使用自己的序列来每次检索新值。作为最后的手段,在启动时您可以轻松调用SELECT MAX(empid) from TABLE EMPLOYEE 并相应地增加值,但要注意需要同步访问值的多线程
  • 您应该将数据库连接代码删除到后台线程,而不是在事件调度线程上查询数据库
  • @DavidKroukamp 不这么认为,只是一个初学者:p...无论如何听起来不错...
  • @Robin 是的,你在几小时前告诉过...我会这样做,主要关注的是 empid 的价值

标签: java sql database primary-key sequence


【解决方案1】:

执行此操作的标准 SQL 方法是使用“自动增量”主键 (emp_code),对于 hsqldb,请参阅 IDENTITY。 在 SQL INSERT 语句中省略主键。现在数据库生成一个唯一的新密钥。 执行完成后,可以从getGeneratedKeys的语句中取回生成的主键。

这样可以确保两个并行进程不会弄乱主键。

【讨论】:

    【解决方案2】:

    为什么不在数据库中创建一个字段,将其设置为 autoIncrementTrue 并且也可以将其用作 ID。您也可以将此字段用作员工编号。

    您可以查看此链接了解更多信息:http://www.w3schools.com/sql/sql_autoincrement.asp

    每次插入新员工时,生成的数字都会增加。

    【讨论】:

    • 是的,这就是它必须完成的方式,但是我仍在寻找一种替代方法,除了数据库之外
    【解决方案3】:

    您可以使用 Oracle、MySQL、PostGre 等数据库,并使用序列或自动生成的 ID 列为您执行此操作

    【讨论】:

    • HSQLDB 也支持序列
    • 是的,必须这样做,必须 AUTO_INCREMENT... 还有其他方法吗?无论如何谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多