运行结果少了书上图中的表格,是正确的运行结果吗?请问是怎么样查询呢?navicat里面的表创建是对的吗?不太懂,求解答。谢谢!
package cs;
import java.awt. *;
import java.awt.List;
import java.awt.event. *;
import javax.swing. *;
import java.sql. *;
import java.util. *;
import javax.swing.table. *;
class JDBCJTable extends JFrame{
JTextField txtQuery = new JTextField(10);
JButton btnQuery = new JButton("按条件查询");
JTable table = new JTable();
AbstractTableModel tm;
String titles[];
Class<? >colClasses[];
java.util.List<java.util.List<Object>>records;
public JDBCJTable() {
JPanel pnl = new JPanel();
pnl.add(txtQuery);
pnl.add(btnQuery);
getContentPane().add(pnl, BorderLayout.NORTH);
table.setToolTipText("显示全部查询结果");
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setCellSelectionEnabled(false);
table.setShowVerticalLines(true);
table.setShowHorizontalLines(true);
JScrollPane scrollpane = new JScrollPane(table);
getContentPane().add(scrollpane, BorderLayout.CENTER);
btnQuery.addActionListener(e->{
try {
showData();
}catch(Exception ex) {
ex.printStackTrace();
}
});
setSize(400,300);
setTitle("Show Database table in JTable");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
setVisible(true);
}
public void showData() throws SQLException, ClassNotFoundException{
Class.forName("org.sqlite.JDBC");
String connString = "jbdc:sqlite:d/javaExample/ch11/jbdcDemo/test3.bd";
Connection connection = DriverManager.getConnection(connString);
String sql = "select * from people where name like?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, "%"+txtQuery.getText().trim()+"%");
ResultSet rs = stmt.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
int colCnt = meta.getColumnCount();
System.out.println(colCnt);
titles = new String[colCnt];
colClasses = new Class[colCnt];
for(int i = 0;i<colCnt;i++) {
titles[i]=meta.getColumnName(i+1);
String className = meta.getColumnClassName(i+1);
Class<? >clz = String.class;
if(className!=null)
try {
clz=Class.forName(className);
}catch(Exception ex) {
ex.printStackTrace();
}
colClasses[i]=clz;
}
records.clear();
while(rs.next()) {
java.util.List<Object>one_record = new ArrayList<>();
for(int i = 0;i<titles.length;i++) {
Object obj = rs.getObject(i+1);
System.out.print(obj+";");
one_record.add(obj==null?null:obj.toString());
}
records.add(one_record);
System.out.println();
}
table.setModel(tm);
tm.fireTableStructureChanged();
}
public void initTableModel() {
records = new ArrayList<>();
tm = new AbstractTableModel() {
public int getColumnCount() {
return titles.length;
}
public int getRowCount() {
return records.size();
}
public Object getValueAt(int row, int column) {
if(!records.isEmpty())
return (records.get(row)).get(column);
else
return null;
}
public String getColumnName(int column) {
return titles[column];
}
public Class<? >getColumnClass(int column){
return colClasses[column];
}
public void setValueAt(Object value,int row,int column) {
}
public boolean isCellEditable(int row,int column) {
return false;
}
};
}
public static void main(String[] args) {
SwingUtilities.invokeLater(()->{
JDBCJTable frame = new JDBCJTable();
frame.initTableModel();
try {
frame.showData();
}catch(Exception e) {
e.printStackTrace();
}
});
}
}