天天看點

jTable儲存到mysql_java – 如何将已編輯的JTable資料儲存到資料庫?

首先抱歉我的英語不好.我會盡力了解你的問題.

我想要的隻是在點選“儲存”按鈕時儲存使用者在JTable中輸入的新資料.

我正在從資料庫的前兩列中檢索學生ID,名稱,并且我在第三列中添加了目前日期,并且Absent / Present作為可編輯的第四列.我有以下代碼從資料庫中檢索資料.

**Attendance.java** :

package shreesai;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.text.SimpleDateFormat;

import java.util.Vector;

public class Attendance{

Connection con = Connectdatabase.ConnecrDb();

java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());

SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");

String d1 = fromUser.format(sqlDate);

String d = d1.toString();

public Vector getEmployee()throws Exception

{

Vector> employeeVector = new Vector>();

PreparedStatement pre = con.prepareStatement("select studentid,name from student");

ResultSet rs = pre.executeQuery();

while(rs.next())

{

Vector employee = new Vector();

employee.add(rs.getString(1)); //Empid

employee.add(rs.getString(2));//name

employee.add(d);

employeeVector.add(employee);

}

if(con!=null)

con.close();

rs.close();

pre.close();

return employeeVector;

}

}

**出勤率GUI.java:**

package shreesai;

import static java.awt.Frame.MAXIMIZED_BOTH;

import java.sql.Connection;

import java.util.Vector;

import javax.swing.JOptionPane;

public class AttendanceGUI extends javax.swing.JFrame {

Connection con = Connectdatabase.ConnecrDb();

private Vector> data;

private Vector header;

public AttendanceGUI() throws Exception {

this.setLocationRelativeTo(null);

setExtendedState(MAXIMIZED_BOTH);

Attendance att = new Attendance();

data = att.getEmployee();

header = new Vector();

header.add("Student ID");

header.add("Student Name");

header.add("Date");

header.add("Absent/Present");

initComponents();

}

@SuppressWarnings("unchecked")

//

private void initComponents() {

jScrollPane1 = new javax.swing.JScrollPane();

AttendanceT = new javax.swing.JTable();

SaveAtt = new javax.swing.JButton();

Exit = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

AttendanceT.setModel(new javax.swing.table.DefaultTableModel(

data,header

)

{public boolean isCellEditable(int row, int column){return true;}}

);

AttendanceT.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);

TableColumnAdjuster tca = new TableColumnAdjuster(AttendanceT);

tca.adjustColumns();

AttendanceT.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

jScrollPane1.setViewportView(AttendanceT);

SaveAtt.setIcon(new javax.swing.ImageIcon(getClass().getResource("/save.png"))); // NOI18N

SaveAtt.setText("Save Attendance");

SaveAtt.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

SaveAttActionPerformed(evt);

}

});

Exit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/exit.png"))); // NOI18N

Exit.setText("Exit");

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(SaveAtt, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(Exit, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(176, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(SaveAtt, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(Exit, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE))

.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

pack();

}//

private void SaveAttActionPerformed(java.awt.event.ActionEvent evt) {

}

public static void main(String args[]) {

//

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(AttendanceGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(AttendanceGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(AttendanceGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(AttendanceGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

}

//

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

try{

new AttendanceGUI().setVisible(true);

}

catch(Exception e){

JOptionPane.showMessageDialog(null,e);

}

}

});

}

// Variables declaration - do not modify

private javax.swing.JTable AttendanceT;

private javax.swing.JButton Exit;

private javax.swing.JButton SaveAtt;

private javax.swing.JScrollPane jScrollPane1;

// End of variables declaration

}

我運作JFrame時獲得的輸出:

現在,我想要的是使用者将資料編輯到JTable中,就像下面的圖像一樣:

****單擊Save Attendance按鈕後,目前JTable值應輸入資料庫.我正在使用Sqlite資料庫,它是Firefox中的插件.我在我的資料庫中建立了考勤表,該表具有studentid整數,名稱varchar,日期DATETIME和preab VARCHAR(用于存儲特定學生是否存在)****

我希望你能解決我的問題.提前緻謝.

最佳答案 當您使用DefaultTableModel時,您必須向該模型注冊一個監聽更改的TableModelListener的監聽器.

How to use TableModelListener

例:

myTable.getModel().addTableModelListener(new TableModelListener(){

@Override

public void tableChanged(TableModelEvent evt){

//code here

}

});