みんな。徹底的に頭を悩ませた後、このトピックに貢献することにしました。
私が得たフィルタリングコードの大部分:
- JTextfield テキストを使用して JTable を繰り返し検索する
- http://swingdepot.blogspot.com.br/2010/08/text-search-in-jtable.html
使用したソフトウェア:
- MySQL 14.14
- JDK7
- 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 | |
+-----------+-------------+------+-----+---------+----------------+
ID、名前、生年月日のみを表示するリストを考慮して、 「 vTable 」というビューを作成します。
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 に検索機能を実装するにはどうすればよいでしょうか?