java如何使用jtable升级mysql数据库
我想用jtable,table r display更新我的数据库,但不想更新。请提供mi解决方案 我正在做下面的代码,但它不能更新我的数据库,如何才能激发查询,我的数据库包含id,姓名,密码,电子邮件,电话号码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
public class JtExample extends JFrame {
JTable tbldetails;
DefaultTableModel dtm ;
public int editcol1;
public int editrow;
public JtExample() {
setVisible(true);
setSize(500,500);
setTitle("login Frame");
setLocationRelativeTo(null);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dtm = new DefaultTableModel(); //dtm consiste row and clonum
String rowheader[] = {"ID","Name" ,"Password", "Email","phn_no"};
dtm.addColumn("ID");
dtm.addColumn("Name");
dtm.addColumn("address");
dtm.addColumn("Email");
dtm.addColumn("phn_no");
dtm.addRow(rowheader);
add();
dtm.addTableModelListener(new TableModelListener ()
{
@Override
public void tableChanged(TableModelEvent arg0) {
int editcol1 =tbldetails.getEditingColumn();
int editrow =tbldetails.getEditingRow();
TableCellEditor tce = tbldetails.getCellEditor(editrow , editcol1);
System.out.println(tce.getCellEditorValue());
}
});
tbldetails = new JTable(dtm);
tbldetails.setBounds(100,100,500,200);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://Localhost:3306/mydata","root","root");
PreparedStatement ps=con.prepareStatement(" update employee set editcol1=? where editrow=?");
int editcol1 = 0;
String tce = null;
ps.setString(editcol1, tce);
int i=ps.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
add(tbldetails);
}
public void add()
{
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://Localhost:3306/mydata","root","root");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select *from employee");
while(rs.next())
{
dtm.addRow(new Object[]{rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)});
}
con.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String args[])
{
new JtExample();
}
}
public static void main(String args[])
{
new JtExample();
}
}
# 1 楼答案
注意:给这只猫剥皮的方法不止一种
我的第一个想法是,不要使用
DefaultTableModel
,而是使用AbstractTableModel
,这将使您能够更好地控制模型及其状态的更改首先定义一个表示数据的普通旧Java对象(POJO)。就我个人而言,我更喜欢从
interface
开始,这允许我根据自己的需求定义可变和不可变的版本比如
。。。比如
接下来,您需要定义一个
TableModel
来支持这个数据稍后我们将对此进行补充,但现在,这为我们提供了所需的基本知识
当你从数据库中加载数据时,你可以使用
所以,现在我们有了一个自包含的工作单元,在我们的
Employee
类中,一个TabelModel
可以支持它,以及一种可以加载数据的方法,现在,您需要某种方法来拦截对数据的更改并更新数据库为此,我们将更新
EmployeeTableModel
这将在每次更新单元格时调用
update
方法。为此,我们传递Employee
对象。根据id
属性的值,您需要更新或插入新记录这是一个非常简单的例子,由于JDBC的性质,JDBC调用可能需要一段时间才能执行。我可能会尝试使用某种(阻塞)队列,在其中添加
Employee
对象这个队列将由另一个
Thread
(或SwingWorker
或类似的对象)处理,它将弹出下一个对象并对其进行处理,触发一个事件回调(该TableModel
将监听该事件回调)和更新的数据。然后TableModel
将能够相应地更新自己另一个想法是简单地有一个“保存”按钮,用户可以点击它。然后,只需遍历
Employee
列表并更新它们。为此,我将为每个对象设置一个简单的boolean
标志,每当调用任何set
方法时,该标志将被设置为true
请仔细查看How to Use Tables了解教育部的详细信息