1

我想从 java gui 获取 startTime 和 endTime 的值到数据库。

电脑座椅类

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class SeatMonitoringDesign extends JFrame 
{
public JLabel LStation, LID, LFirstName, LLastName, LTimeIn;
public JLabel[] Astation,Aid, Afirstname, Alastname, Atime;
public JRadioButton[] seat = new JRadioButton[10];
private String str = "";
private int station, occupiedSeatCounter;
private JLabel studNum, seatNum;
private ButtonGroup seatGroup = new ButtonGroup();
private boolean[] seatOccupied = new boolean[10];
private SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss");
private JTextField studNumTF;
private JButton logIn, logOut;
private ButtonHandler logInB;
private ButtonHandler logOutB;
private ButtonHandler radioB;


public SeatMonitoringDesign()
{

studNum = new JLabel("Enter Your Student Number: ");
studNum.setLocation(30,20);
studNum.setSize(200,100);

studNumTF = new JTextField(7);
studNumTF.setLocation(50,80);
studNumTF.setSize(120,30);

seatNum = new JLabel("Station Numbers: ");
seatNum.setLocation(60,90);
seatNum.setSize(600,400);

setTitle("Computer Seat Registration");

Container pane = getContentPane();

 pane.setLayout(null);
 pane.add(studNum);
 pane.add(studNumTF);

 setSize(1130,500);
 setResizable(false);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(EXIT_ON_CLOSE);

int x=50,y=150;
for(int i=0 ; i<10 ; i++)
{
switch(i)
{
    case 0: str = "1"; break;
    case 1: str = "2"; break;
    case 2: str = "3"; break;
    case 3: str = "4"; break;
    case 4: str = "5"; break;
    case 5: str = "6"; break;
    case 6: str = "7"; break;
    case 7: str = "8"; break;
    case 8: str = "9"; break;
    case 9: str = "10"; break;
}
seat[i] = new JRadioButton(str);
seat[i].setSize(60,40);
seat[i].setLocation(x,y);
radioB = new ButtonHandler();
seat[i].addItemListener(radioB);
seat[i].setBackground(Color.green);
seatGroup.add(seat[i]);
pane.add(seat[i]);
x=110;

if((i+1)%2==0)
{
    x=50;
    y=y+30;
}
}

for(int i=0 ; i<10 ; i++)
{
seatOccupied[i] = false;
}

logIn = new JButton("Log In");
logIn.setSize(100,30);
logIn.setLocation(15,350);
logIn.setBackground(Color.orange);
logInB = new ButtonHandler();
logIn.addActionListener(logInB);
pane.add(logIn);

logOut = new JButton("Log Out");
logOut.setSize(100,30);
logOut.setLocation(125,350);
logOut.setBackground(Color.orange);
logOutB = new ButtonHandler();
logOut.addActionListener(logOutB);
pane.add(logOut);

LStation = new JLabel("Station #", SwingConstants.CENTER);
LStation.setSize(100,20);
LStation.setLocation(280,60);
pane.add(LStation);

LID = new JLabel("Student Number");
LID.setSize(100,20);
LID.setLocation(450,60);
pane.add(LID);

LFirstName = new JLabel("First Name");
LFirstName.setSize(100,20);
LFirstName.setLocation(630,60);
pane.add(LFirstName);

LLastName = new JLabel("Last Name");
LLastName.setSize(100,20);
LLastName.setLocation(810,60);
pane.add(LLastName);

LTimeIn = new JLabel("Time In");
LTimeIn.setSize(100,20);
LTimeIn.setLocation(990,60);
pane.add(LTimeIn);

Astation = new JLabel[10];
Aid = new JLabel[10];
Afirstname = new JLabel[10];
Alastname = new JLabel[10];
Atime = new JLabel[10];

y=85;
for(int i=0 ; i<10 ; i++)
{ 
switch(i)
{
    case 0: str = "1"; break;
    case 1: str = "2"; break;
    case 2: str = "3"; break;
    case 3: str = "4"; break;
    case 4: str = "5"; break;
    case 5: str = "6"; break;
    case 6: str = "7"; break;
    case 7: str = "8"; break;
    case 8: str = "9"; break;
    case 9: str = "10"; break;
}

Astation[i] = new JLabel(str, SwingConstants.CENTER);
Astation[i].setSize(100,30);
Astation[i].setLocation(280,y);
pane.add(Astation[i]);

Aid[i] = new JLabel("Vacant Station");
Aid[i].setSize(100,30);
Aid[i].setLocation(450,y);
pane.add(Aid[i]);

Afirstname[i] = new JLabel("---------");
Afirstname[i].setSize(100,30);
Afirstname[i].setLocation(630,y);
pane.add(Afirstname[i]);

Alastname[i] = new JLabel("---------");
Alastname[i].setSize(100,30);
Alastname[i].setLocation(810,y);
pane.add(Alastname[i]);

Atime[i] = new JLabel("00:00:00--");
Atime[i].setSize(100,30);
Atime[i].setLocation(990,y);
pane.add(Atime[i]);
y = y+30;
}
setVisible(true);

}

public class ButtonHandler implements ActionListener, ItemListener
{
public void itemStateChanged(ItemEvent e)
{
  for(int i=0 ; i<10 ; i++)
    {
        if(e.getSource() == seat[i])
        station = (i+1);
    }
}

public void actionPerformed(ActionEvent e)
{
LogicalChecker lc = new LogicalChecker();
cobadatabase cb = new cobadatabase(studNumTF.getText());

String output;
Date now1 = new Date();
Date now2 = new Date();

//long secs = (now2.getTime() - now1.getTime()) / 1000;
//long diffSeconds = diff / 1000 % 60; 
//long diffMinutes = diff / (60 * 1000) % 60; 
// long diffHours = diff / (60 * 60 * 1000) % 60;

//long startTime = System.currentTimeMillis();
//long finishTime = System.currentTimeMillis();
//long elapsedTime = finishTime - startTime; 

long diff = (now2.getTime() - now1.getTime());
cobadatabase cb2 = new       cobadatabase(studNumTF.getText(),dateFormatter.format(now1),dateFormatter.format(now2),      diff);


if("Log In".equals(e.getActionCommand()))
{         
    if(station == 0)
    {
        lc.StationCheck(0);
    }
    else if(seatOccupied[station-1] == true)
    {
        lc.StationCheck(2);
    }
    else if(!studNumTF.getText().equals(cb.getStudentNumber()))
    {
         studNumTF.setText("");
         lc.StationCheck(3); 
    }
    else
    {

       seatOccupied[station-1] = true;

            Aid[station-1].setText(cb.getStudentNumber());
            Afirstname[station-1].setText(cb.getFirstName());
            Alastname[station-1].setText(cb.getLastName());  
            seat[station-1].setBackground(Color.red);
            Atime[station-1].setText(dateFormatter.format(now1));
            occupiedSeatCounter++;
    }
}

if("Log Out".equals(e.getActionCommand()))
 {


    if(station == 0)
    {
        lc.StationCheck(0);
    }
    else if(Aid[station-1].getText() == "Vacant Station")
    {
        lc.StationCheck(1);
    }
    else
    {

        Aid[station-1].setText("Vacant Station");
        Afirstname[station-1].setText("---------");
        Alastname[station-1].setText("---------");
        seat[station-1].setBackground(Color.green);
        Atime[station-1].setText("00:00:00");
        seatOccupied[station-1] = false;
        studNumTF.setText("");
        output = "Time Check-Out "+dateFormatter.format(now2)+"\n Total Time: "     +diff;
        JOptionPane.showMessageDialog(null,output, "Check-    Out.",JOptionPane.INFORMATION_MESSAGE);

    }
}

}
} 

} 

coba数据库类

import java.sql.*;
import java.util.*;
import java.text.*;

public class cobadatabase{
protected String sn,fn,ln,srt, sn2, srt2, et;
protected Long tt;
private Connection conn;
private PreparedStatement st; 

public cobadatabase(){
    try{
       Class.forName("com.mysql.jdbc.Driver");
       conn =   DriverManager.getConnection("jdbc:mysql://localhost/studentrecords","root","");

        }

catch(Exception e){}
}

 public cobadatabase(String sn2, String str2, String et, long tt)
{
    this();
    try
    {
    st = conn.prepareStatement("Insert into time(StudentNumber,StartTime,EndTime,TotalTime) values(?,?,?,?)");
    st.setString(1,sn2);
    st.setString(2,str2);
    st.setString(3,et);
    st.setLong(4,tt);
    st.executeUpdate();

}
catch(Exception e){}
}

public cobadatabase(String StudentNumber)
{

    this();
    try{
       st = conn.prepareStatement("SELECT * FROM student WHERE StudentNumber=?");
       st.setString(1,StudentNumber);
       ResultSet rs = st.executeQuery();

            while (rs.next())
            {
                this.sn = rs.getString(1);
                this.fn = rs.getString(2);
                this.ln = rs.getString(3);
                this.srt = rs.getString(4);

                SimpleDateFormat ft = new SimpleDateFormat("kk:mm:ss");
                ft.format(rs.getTime("TotalTime").getTime());
            }   
}
catch(Exception e){}
}

public cobadatabase(String StudentNumber2, String Start, String End)
{

    this();
    try{
       st = conn.prepareStatement("SELECT * FROM time WHERE StudentNumber2=?");
       st.setString(2,Start);
       st.setString(3,End);
       ResultSet rs = st.executeQuery();
            while (rs.next())
            {
                this.sn2 = rs.getString(1);
                this.srt2 = rs.getString(2);
                this.et = rs.getString(3);
                this.tt = rs.getLong(4);
            }
    }
    catch(Exception e){}
}



    public String getFirstName(){
    return fn;
}
    public String getLastName(){
    return ln;
}
    public String getStudentNumber(){
    return sn;
}
    public String getStart(){
    return srt2;
}
    public String getEnd(){
    return et;
}

}

这里的问题是,当单击登录按钮时,开始时间同时显示在我的数据库中的 startTime 和 endTime 列上。当单击注销按钮时,会在数据库中创建另一行,其中包含 startTime 和 endTime 列上的 endTime。我想知道为什么会发生这种情况。

4

2 回答 2

2

Look at the following URL http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/ Use it at the begining of the app, and at the end.

If you are measuring the time looking how long the app executed, the above is not the best I guess. In case of that, try something like following

import java.util.*;

public class VectorTest
{
    Vector v = new Vector();

    public VectorTest()
    {
        long startTime = System.currentTimeMillis(); // Get the start Time
        long endTime = 0;

       System.out.println( startTime);

       for(int i=0;i<100000;i++)
       {
           v.add(i);
       }

        for(int i=0;i<v.size();i++)
        {
            System.out.println(v.get(i));
        }
        endTime = System.currentTimeMillis(); //Get the end Time

        System.out.println(endTime);

        System.out.println("Difference in mili seconds: "+ (endTime-startTime)); //Print the difference in mili seconds
        System.out.println("Differencce in Seconds: "+ (endTime-startTime)/1000); // Print the difference in seconds

    }

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

EXTRA ADVISES FOR GOOD PROGRAMMING PRACTICES

  1. Look at the 3rd overloaded "CodeBase" constructor. You have 1 parameter in SQL query, but trying to set 2 in program, EVEN WITH invalid indexes 2 and 3

  2. Close the connection inside the finally block

  3. don't leave catch() method empty. Print the stack trace

  4. Don't use the same PreparedStament everywhere. Crate them as local variables not as global ones. Sometimes there are delays in automated connection closing methods in databases. In such a case, your program will act in an unexpected way. If you declare them locally, the variables are gone as soon as the method is don e

于 2012-10-08T05:07:09.603 回答
0

您应该尝试设置单击正确按钮的时间,而不是为同一个按钮设置开始时间和结束时间。我会为 startTime 设置一个全局变量并像这样计算

private long startTime = null;
public void actionPerformed(ActionEvent e) {
    LogicalChecker lc = new LogicalChecker();
    cobadatabase cb = new cobadatabase(studNumTF.getText());

    String output;


    //long secs = (now2.getTime() - now1.getTime()) / 1000;
    //long diffSeconds = diff / 1000 % 60; 
    //long diffMinutes = diff / (60 * 1000) % 60; 
    // long diffHours = diff / (60 * 60 * 1000) % 60;

    //long startTime = System.currentTimeMillis();
    //long finishTime = System.currentTimeMillis();
    //long elapsedTime = finishTime - startTime; 

    long diff = (now2.getTime() - now1.getTime());
    cobadatabase cb2 = new cobadatabase(studNumTF.getText(),dateFormatter.format(now1),dateFormatter.format(now2),     diff);


    if("Log In".equals(e.getActionCommand())){    
         this.startTime = new Date().getTime(); // set start time
         ... do stuff
    } else if("Log Out".equals(e.getActionCommand())){   
         long totalTime =  new Date().getTime() - this.startTime(); // calculate total time
         ... do stuff

    }
}
于 2012-10-08T04:55:13.133 回答