StuManage.java
package stuManage;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class StuManage extends JFrame implements ActionListener{
JPanel jp1=null,jp2=null;
JScrollPane jsp=null;
JLabel jl=null;
JTextField jtf=null;
JButton jb1=null,jb2=null,jb3=null,jb4=null;
JTable jt=null;
public static void main(String[] args) {
StuManage sm=new StuManage();
}
public StuManage() {
jl=new JLabel("输入姓名:");
jtf=new JTextField(10);
jb1=new JButton("搜索");
jb1.setActionCommand("search");
jb1.addActionListener(this);
jp1=new JPanel();
jp1.add(jl);
jp1.add(jtf);
jp1.add(jb1);
this.add(jp1,"North");
StuModel sm=new StuModel();
jt=new JTable(sm);//使用table模型建表
jsp=new JScrollPane(jt);
this.add(jsp);
jb2=new JButton("增加");
jb2.setActionCommand("add");
jb2.addActionListener(this);
jb3=new JButton("修改");
jb3.setActionCommand("mod");
jb3.addActionListener(this);
jb4=new JButton("删除");
jb4.setActionCommand("del");
jb4.addActionListener(this);
jp2=new JPanel();
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
this.add(jp2,"South");
this.setBounds(200,200,400,300);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("search")){
String sw=jtf.getText().trim();
String sql="select * from students where stu_name='"+sw+"'";
StuModel sm=new StuModel(sql);
jt.setModel(sm);//setModel更新
}
}
}
StuModel.java
package stuManage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
public class StuModel extends AbstractTableModel{
JTable jt=null;
Vector jtCol=null,jtrows=null,jtrdata=null;
//操作数据库的
PreparedStatement ps=null;
Connection c=null;
ResultSet rs=null;
//构造函数里面创建表的模型Model
public StuModel() {
selectSQL("");
}
public StuModel(String sql){
selectSQL(sql);
}
public void selectSQL(String sql){
jtCol=new Vector();
jtCol.add("学号");
jtCol.add("姓名");
jtCol.add("性别");
jtCol.add("年龄");
jtCol.add("籍贯");
jtrows=new Vector();
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
c=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=stuManage","sa","sa");
if(sql.equals("")){
ps=c.prepareStatement("select *from students");
}else{
ps=c.prepareStatement(sql);
}
rs=ps.executeQuery();
while(rs.next()){
jtrdata=new Vector();
jtrdata.add(rs.getInt(1));
jtrdata.add(rs.getString(2));
jtrdata.add(rs.getString(3));
jtrdata.add(rs.getInt(4));
jtrdata.add(rs.getString(5));
jtrows.add(jtrdata);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try{
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(c!=null) c.close();
}catch(Exception e2){
e2.printStackTrace();
}
}
jt=new JTable(jtrows, jtCol);
}
//需要重写获取列名,列名在Vector类的jtCol里面
@Override
public String getColumnName(int arg0) {
// TODO 自动生成的方法存根
//return super.getColumnName(arg0);//这是自动生成的
return (String) jtCol.get(arg0);
}
@Override
public int getColumnCount() {
// TODO 自动生成的方法存根
return jtCol.size();
}
@Override
public int getRowCount() {
// TODO 自动生成的方法存根
return jtrows.size();
}
/*
row - 要查询的值所在行
col - 要查询的值所在列
返回:
指定单元格位置的值 Object
*/
@Override
public Object getValueAt(int row, int col) {//这个参数是在哪里传进去的?根据上面的两个函数已经自动传进去了。
// TODO 自动生成的方法存根
return ((Vector)jtrows.get(row)).get(col);//取出表格里面数据
}
}
数据库在前面的学生数据表文章