简体   繁体   English

使用AWT按钮浏览并显示“textfield”中的每个数据库记录

[英]Navigate through & display each database record in the 'textfield' using an AWT button

How to navigate through and display each database record in the 'textfield' using an AWT button? 如何使用AWT按钮浏览并显示“textfield”中的每个数据库记录?

I'm trying the make a Java form to navigate through the database records, such that when the 'next' button is pressed, each subsequent hit fetches the next database record into the respective textfields. 我正在尝试使用Java表单来浏览数据库记录,这样当按下“下一个”按钮时,每次后续命中都会将下一个数据库记录提取到相应的文本字段中。 The problem with this code is no matter how many times I press the next button, only the first record is displayed in the textfields. 此代码的问题是无论我按下下一个按钮多少次,只有第一个记录显示在文本字段中。

I've read on several threads that if(rs.next()) condition will not work in such case. 我读过几个线程if(rs.next())情况不会在这样的情况下工作。 What could be the right fix for this and why? 什么可能是正确的解决方案,为什么?

PS: I've marked the problematic area within Problem code begins and Problem code ends . PS:我已经在Problem code beginsProblem code ends标记了有问题的区域。

import java.awt.Button;
import java.awt.Choice;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class ManageEmployees implements ActionListener
{
    Connection con;

    Statement st;

    ResultSet rs;

    Frame f;

    Choice employeeID;

    Button savenewemployeeButton, updateemployeeButton, returndashboardButton, nextButton/*, previousButton, lastButton, firstButton*/;

    Label nameLabel, usernameLabel, addressLabel, contactnumberLabel, passwordLabel, confirmpasswordLabel, selectemployeeLabel;

    TextField nameTextField, usernameTextField, addressTextField, passwordTextField, confirmpasswordTextField;

    ManageEmployees()
        {
            dbconnect();
            initframe();        
        }

    public void dbconnect()
    {
        try{

        Class.forName("com.mysql.jdbc.Driver");

        con=DriverManager.getConnection("jdbc:mysql://localhost:8889/InventoryManagement","root","root");

        st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

        String sql="select * from SalesMen";

        rs=st.executeQuery(sql);

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

    public void initframe()
    {
        f=new Frame("Manage Employees");

        selectemployeeLabel=new Label("Select Employee Type:");
        nameLabel=new Label("Employee Name:");
        addressLabel=new Label("Address:");
        usernameLabel=new Label("User Name:");
        passwordLabel=new Label("Password:");
        confirmpasswordLabel=new Label("Confirm Password:");

        employeeID=new Choice();

        employeeID.add("Sales Person");
        employeeID.add("Sales Manager");
        employeeID.add("Inventory Manager");
        employeeID.add("Administrator");

        savenewemployeeButton=new Button("Save New Employee details");
        savenewemployeeButton.addActionListener(this);
        returndashboardButton=new Button("Return to Dashboard");
        returndashboardButton.addActionListener(this);

        nextButton=new Button("Next");
        nextButton.addActionListener(this);

        nameTextField=new TextField(30);
        addressTextField=new TextField(50);
        usernameTextField=new TextField(20);
        passwordTextField=new TextField(15);
        confirmpasswordTextField=new TextField(15);

        f.setLayout(new GridLayout(10,2,0,2));

        f.add(selectemployeeLabel);
        f.add(employeeID);

        f.add(nameLabel);
        f.add(nameTextField);

        f.add(addressLabel);
        f.add(addressTextField);

        f.add(usernameLabel);
        f.add(usernameTextField);

        f.add(passwordLabel);
        f.add(passwordTextField);

        f.add(confirmpasswordLabel);
        f.add(confirmpasswordTextField);

        f.add(returndashboardButton);
        f.add(savenewemployeeButton);
        f.add(nextButton);

        passwordTextField.setEchoChar('*');
        confirmpasswordTextField.setEchoChar('*');

        f.setSize(500,400);
        f.setVisible(true);
        f.setResizable(false);


        f.addWindowListener(new WindowAdapter()
        {

            public void windowClosing(WindowEvent we)
            {
                System.exit(0);
            }
        }
        );
    }

    public void actionPerformed(ActionEvent e)
    {

        // Return to dashboard on button click

        if(e.getSource()==returndashboardButton)
        {
            f.dispose();
            new Dashboard();
        }

        // ---------------------------------------- (Begin) Save new employee information ------------------------------------------------------------//    

       // Save new Sales Person information  

        String salesmen=employeeID.getSelectedItem();


        if(salesmen=="Sales Person" && e.getSource()==savenewemployeeButton)
        {

            try
            {       
                String fullname1=nameTextField.getText();
                String address1=usernameTextField.getText();
                String username1=addressTextField.getText();
                String password1=passwordTextField.getText();

                String sql="insert into SalesMen values('"+fullname1+"','"+address1+"','"+username1+"','"+password1+"')";
                st.executeUpdate(sql);

                JOptionPane.showMessageDialog(null,"New Sales Man's details saved!");

            }

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

        }

           // Save new Sales Manager information  

        String salesmanager=employeeID.getSelectedItem();

        if(salesmanager=="Sales Manager" && e.getSource()==savenewemployeeButton)
        {
            try
            {

                String fullname1=nameTextField.getText();
                String address1=usernameTextField.getText();
                String username1=addressTextField.getText();
                String password1=passwordTextField.getText();

                String sql="insert into SalesManagers values('"+fullname1+"','"+address1+"','"+username1+"','"+password1+"')";
                st.executeUpdate(sql);

                JOptionPane.showMessageDialog(null,"New Sales Manager's details saved!");

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

           // Save new Inventory Manger information  


        String inventorymanger=employeeID.getSelectedItem();

        if(inventorymanger=="Inventory Manager" && e.getSource()==savenewemployeeButton)
        {
            try
            {

                String fullname1=nameTextField.getText();
                String address1=usernameTextField.getText();
                String username1=addressTextField.getText();
                String password1=passwordTextField.getText();

                String sql="insert into InventoryManagers values('"+fullname1+"','"+address1+"','"+username1+"','"+password1+"')";
                st.executeUpdate(sql);

                JOptionPane.showMessageDialog(null,"New Inventory Manager's details saved!");

            }

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

           // Save new Administrator information  


        String administrator=employeeID.getSelectedItem();

        if(administrator=="Administrator" && e.getSource()==savenewemployeeButton)
        {
            try
            {
                String fullname1=nameTextField.getText();
                String address1=usernameTextField.getText();
                String username1=addressTextField.getText();
                String password1=passwordTextField.getText();

                String sql="insert into Administrators values('"+fullname1+"','"+address1+"','"+username1+"','"+password1+"')";
                st.executeUpdate(sql);

                JOptionPane.showMessageDialog(null,"New Admin's details saved!");

            }

                catch(Exception ce)
                {
                    ce.printStackTrace();
                }
            // ---------------------------------------- (End) Save new employee information ------------------------------------------------------------//          
        }

        if(salesmen=="Sales Person" && e.getSource()==nextButton)
        {
                 try
                    {   
                        String sql="select * from SalesMen";
                        rs=st.executeQuery(sql);

                      // Problem code begins 

                        if(rs.next())
                        {

                            nameTextField.setText(rs.getString("FullName")); 
                            usernameTextField.setText(rs.getString("UserName"));
                            addressTextField.setText(rs.getString("Address")); 

                        }

                       else

                        {
                            rs.previous();
                            System.out.println("boo!");
                            JOptionPane.showMessageDialog(null,"No more records");
                        }  

                    }

                           // Problem code ends 

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


        }

    } 

    public static void main(String[] args) 
    {   
           new ManageEmployees();
    }

}
  • use Swing JComponents rather than AWT Components 使用Swing JComponents而不是AWT组件

  • use JTable instead of sets of AWT TextFields 使用JTable而不是AWT TextFields集

  • search for ResultSetTableModel or TableFromDatabase for easy, stable and correct workaround 搜索ResultSetTableModel或TableFromDatabase以获得简单,稳定和正确的解决方法

  • ResultSetTableModel, TableFromDatabase or your idea has an issue with Event Dispatch Thread ResultSetTableModel,TableFromDatabase或您的想法与Event Dispatch Thread存在问题

Okay, despite the useful answers people have given; 好吧,尽管人们给出了有用的答案; after trial and error, i've found a more appropriate answer to the question. 经过反复试验,我找到了一个更恰当的答案。 The "if(rs.next())" condition DOES WORK to navigate the database records forward, if used correctly. 在“如果(rs.next())”条件不工作导航数据库记录着,如果正确使用。 It works perfectly fine with either AWT or SWING. 它与AWT或SWING完美搭配。 The problem occurs by inappropriately placing the following lines of code: 通过不适当地放置以下代码行会发生此问题:

/* Remember to carefully use and place the following code in your program*/ / *请记住小心使用并在程序中放置以下代码* /

String sql="select * from Tablename";
rs=st.executeQuery(sql);

So with reference to the program in this question, notice that the two lines of code above are already called once during program's lifetime when dbconnect() function is called by the constructor. 因此,参考此问题中的程序,请注意,在构造函数调用dbconnect()函数时,上述两行代码在程序生命周期中已经调用过一次。 Now pay attention because here's where the problem begins. 现在要注意,因为这是问题的开始。 *The two strings highlighted above are redundantly trigged each time when the 'next button' is hit, thus each time resetting the resultset, and logically disallowing 'rs.next()' to move to the next record. *每次点击“下一个按钮”时,上面突出显示的两个字符串都被冗余触发,因此每次重置结果集,并且逻辑上不允许'rs.next()'移动到下一个记录。 So, only placing those two lines of code once in the dbconnect() function does the job correctly.* 因此, 这两行代码放在dbconnect()函数中一次就可以正常工作。*

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM