每个人。在绞尽脑汁之后,我决定为这个主题做出贡献。
我从中获得的大部分过滤代码:
使用的软件:
- MySQL 14.14
- JDK 7
- NetBeans 7.1.2
假设我们有以下名为“ table ”的示例表:
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| birthdate | datetime | YES | | NULL | |
| status | int(1) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
创建一个名为“ vTable ”的视图,考虑一个仅显示 ID、姓名和出生日期的列表:
CREATE VIEW vTable AS
SELECT id, name, birthdate FROM table WHERE status IS NOT NULL;
我使用的是 MVC 模式,所以有包“模型”、“视图”和“控制器”。
创建数据访问对象TableDAO:
package model.DAO;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.VO.TableDAO;
import model.VO.VTableVO;
public class TableDAO extends ConnectionDAO {
public List<VInstituicaoVO> List() throws ClassNotFoundException {
List<VTableVO> listTable = new ArrayList<>();
try {
openConnection();
con.setAutoCommit(false);
PreparedStatement stmt = con.prepareCall(
"SELECT id, name, birthdate FROM vTable");
ResultSet record = stmt.executeQuery();
while(record.next()) {
VTableVO vo = new VTableVO();
vo.setId(record.getInt(1));
vo.setName(record.getString(2));
vo.setBirthdate(record.getDate(3));
listTable.add(vo);
}
closeConnection();
} catch (SQLException ex) {
Logger.getLogger(TableDAO.class.getName()).log(Level.SEVERE, null, ex);
}
return listTable;
}
创建值对象(不要忘记生成 getter 和 setter)TableVO:
package model.VO;
import java.sql.Date;
public class TableVO {
private Integer id;
private String name;
private String phone;
private Date birthdate;
private int status;
public TableVO() {}
public TableVO(ITableVO vo) {
id = vo.getId();
name = vo.getName();
phone = vo.getPhone();
birthdate = vo.getBirthdate();
status = vo.getStatus();
}
// GENERATE GETTERS AND SETTERS
}
VTableVO类:
package model.VO;
import java.sql.Date;
public class VTableVO {
private Integer id;
private String name;
private Date birthdate;
// GENERATE GETTERS AND SETTERS
}
ITableDAO接口:
package model.DAO;
import java.util.List;
import model.VO.TableVO;
public interface ITableDAO {
public List<TableVO> List();
}
ITableVO接口:
package model.VO;
import java.sql.Date;
public interface ITableVO {
public Integer getId();
public void setId(Integer set_id);
public String getName();
public void setName(String set_nome);
public String getPhone();
public void setPhone(String set_phone);
public Date getBirthdate();
public void setBirthdate(Date set_birthdate);
public Integer getStatus();
public void setStatus(Integer set_status);
}
有了这种结构,我们如何在 JTable 中实现搜索功能呢?