最近用eclipse 写一个单机版的宿舍管理系统
有一个搜索界面 无论我选择哪个条件 输入什么内容 都会显示出来 当我不停按确定 就会累计地弹出数据...
第一个是代码逻辑问题 我刚接触数据库 很多不懂 我希望大家教教我纠正这两个问题 下面是我的代码:
数据库那边用ACCESS 刚学JAVA 现在应用 ACCESS比较简单吧
import java.awt.*;
import java.sql.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;import javax.swing.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class dormitory_Inquire extends JFrame implements ActionListener{
Vector rowVectors=new Vector();;
Vector columnHeaderVector=new Vector();
JButton b1,b2;
JTextField txt;
JComboBox box;
JTable table;
JScrollPane p1 = new JScrollPane();
DefaultTableModel tableModel=new DefaultTableModel ( );
dormitory_Inquire f;
ResultSet r;
Connection conn;
Statement stm;
//构造方法
dormitory_Inquire()
{ super("宿舍查询");
setLayout(null);
setSize(1080,540);
setResizable(false);
setVisible(true);
txt = new JTextField(50);
add(txt);
txt.setBounds(320, 20, 250, 25);
box = new JComboBox();
add(box);
box.setBounds(580, 20, 90, 25);
box.addItem("宿舍楼号");
box.addItem("宿舍号");
box.addItem("姓名");
box.addItem("性别");
box.addItem("空缺人数");
b1 = new JButton("确定");
add(b1);
b1.setBounds(380, 50, 70, 25);
b1.addActionListener(this);
b2 = new JButton("取消");//取消按钮的监听
add(b2);
b2.setBounds(480, 50, 70, 25);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String cmd=e.getActionCommand();
if(cmd.equals("取消"))
txt.setText("");
}
});
//表
String[ ]columnHeaderVector = {"宿舍楼号","宿舍号","姓名","性别","空缺人数"};
table = new JTable();
JScrollPane srp = new JScrollPane(table);
srp.setBounds(0, 80, 1080,500);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
add(srp);
table.setModel(tableModel);
tableModel.setColumnIdentifiers(columnHeaderVector);
for(int i=0;i<table.getColumnCount();i++){
DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
TableColumn col = colModel.getColumn(i);
int width = 10; TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false,
false, 10, 10);
width = comp.getPreferredSize().width;
col.setPreferredWidth(width+180);
}
}
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if(e.getSource() instanceof JButton){
if(cmd.equals("确定"))
{
try {
check();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
public void check() throws SQLException
{ if(txt.getText().equals(""))
{
JOptionPane.showMessageDialog(f,"请填写查询条件");
return;
}
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
System.out.println("加载驱动程序失败,请检查");
}
try{
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D://AccomodationControl.mdb" ;
conn = DriverManager.getConnection(url);
stm = conn.createStatement();
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("宿舍楼号")){
r = stm.executeQuery("select 宿舍号,姓名,性别,空缺人数 from 宿舍查询 ");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("宿舍号")){
r = stm.executeQuery("select 宿舍楼号,姓名,性别,空缺人数 from 宿舍查询");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("姓名")){
r = stm.executeQuery("select 宿舍楼号,宿舍号,姓名,性别 ,空缺人数 from 宿舍查询");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("性别")){
r = stm.executeQuery("select 宿舍楼号,宿舍号,姓名,空缺人数 from 宿舍查询");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("空缺人数")){
r = stm.executeQuery("select 宿舍楼号,宿舍号,空缺人数 from 宿舍查询 where 空缺人数 >=1");
}
int columnCount =r.getMetaData().getColumnCount();
while(r.next())
{
Vector singleRow=new Vector();
for(int i=0;i<columnCount;i++)
singleRow.addElement(r.getObject(i+1));
rowVectors.addElement(singleRow);
}
ResultSet rsColumns=conn.getMetaData(). getColumns(null,null,"宿舍查询",null);
while(rsColumns.next())
{
columnHeaderVector.addElement(rsColumns.getString("COLUMN_NAME"));
}
tableModel.setDataVector(rowVectors,columnHeaderVector);
stm.close();
conn.close();
}catch(SQLException ae){
JOptionPane.showMessageDialog(f,"没有此信息");
}
}
public static void main(String[] args){
new dormitory_Inquire();
}
}
有一个搜索界面 无论我选择哪个条件 输入什么内容 都会显示出来 当我不停按确定 就会累计地弹出数据...
第一个是代码逻辑问题 我刚接触数据库 很多不懂 我希望大家教教我纠正这两个问题 下面是我的代码:
数据库那边用ACCESS 刚学JAVA 现在应用 ACCESS比较简单吧
import java.awt.*;
import java.sql.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;import javax.swing.*;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class dormitory_Inquire extends JFrame implements ActionListener{
Vector rowVectors=new Vector();;
Vector columnHeaderVector=new Vector();
JButton b1,b2;
JTextField txt;
JComboBox box;
JTable table;
JScrollPane p1 = new JScrollPane();
DefaultTableModel tableModel=new DefaultTableModel ( );
dormitory_Inquire f;
ResultSet r;
Connection conn;
Statement stm;
//构造方法
dormitory_Inquire()
{ super("宿舍查询");
setLayout(null);
setSize(1080,540);
setResizable(false);
setVisible(true);
txt = new JTextField(50);
add(txt);
txt.setBounds(320, 20, 250, 25);
box = new JComboBox();
add(box);
box.setBounds(580, 20, 90, 25);
box.addItem("宿舍楼号");
box.addItem("宿舍号");
box.addItem("姓名");
box.addItem("性别");
box.addItem("空缺人数");
b1 = new JButton("确定");
add(b1);
b1.setBounds(380, 50, 70, 25);
b1.addActionListener(this);
b2 = new JButton("取消");//取消按钮的监听
add(b2);
b2.setBounds(480, 50, 70, 25);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String cmd=e.getActionCommand();
if(cmd.equals("取消"))
txt.setText("");
}
});
//表
String[ ]columnHeaderVector = {"宿舍楼号","宿舍号","姓名","性别","空缺人数"};
table = new JTable();
JScrollPane srp = new JScrollPane(table);
srp.setBounds(0, 80, 1080,500);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
add(srp);
table.setModel(tableModel);
tableModel.setColumnIdentifiers(columnHeaderVector);
for(int i=0;i<table.getColumnCount();i++){
DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel();
TableColumn col = colModel.getColumn(i);
int width = 10; TableCellRenderer renderer = col.getHeaderRenderer();
if (renderer == null) {
renderer = table.getTableHeader().getDefaultRenderer();
}
Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false,
false, 10, 10);
width = comp.getPreferredSize().width;
col.setPreferredWidth(width+180);
}
}
public void actionPerformed(ActionEvent e){
String cmd = e.getActionCommand();
if(e.getSource() instanceof JButton){
if(cmd.equals("确定"))
{
try {
check();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
public void check() throws SQLException
{ if(txt.getText().equals(""))
{
JOptionPane.showMessageDialog(f,"请填写查询条件");
return;
}
try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
System.out.println("加载驱动程序失败,请检查");
}
try{
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D://AccomodationControl.mdb" ;
conn = DriverManager.getConnection(url);
stm = conn.createStatement();
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("宿舍楼号")){
r = stm.executeQuery("select 宿舍号,姓名,性别,空缺人数 from 宿舍查询 ");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("宿舍号")){
r = stm.executeQuery("select 宿舍楼号,姓名,性别,空缺人数 from 宿舍查询");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("姓名")){
r = stm.executeQuery("select 宿舍楼号,宿舍号,姓名,性别 ,空缺人数 from 宿舍查询");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("性别")){
r = stm.executeQuery("select 宿舍楼号,宿舍号,姓名,空缺人数 from 宿舍查询");
}
else
if((!(txt.getText().equals("")))&& box.getSelectedItem().equals("空缺人数")){
r = stm.executeQuery("select 宿舍楼号,宿舍号,空缺人数 from 宿舍查询 where 空缺人数 >=1");
}
int columnCount =r.getMetaData().getColumnCount();
while(r.next())
{
Vector singleRow=new Vector();
for(int i=0;i<columnCount;i++)
singleRow.addElement(r.getObject(i+1));
rowVectors.addElement(singleRow);
}
ResultSet rsColumns=conn.getMetaData(). getColumns(null,null,"宿舍查询",null);
while(rsColumns.next())
{
columnHeaderVector.addElement(rsColumns.getString("COLUMN_NAME"));
}
tableModel.setDataVector(rowVectors,columnHeaderVector);
stm.close();
conn.close();
}catch(SQLException ae){
JOptionPane.showMessageDialog(f,"没有此信息");
}
}
public static void main(String[] args){
new dormitory_Inquire();
}
}
解决方案 »
- 高分求一SWT编译不通过
- 去掉html源代码里标签之间的空格和换行(顶者有分)
- 小女子求:jbuilder中的TableDataSet得到数据库中的数据!急用!最好给个用jbuilder开发的实例
- 高分问一个问题...请高手们指教谢谢....
- JScrollPane不能显示的问题
- 请教关于线程同步问题??
- 如何把一段创建新线程的代码封装成一个类,然后另一个类中引用?如何引用?
- 为什么在Null的Layout的JPanel中添加组件显示失败呢?
- 有个小问题,如何将一字符串按一定规则分割成字符串数组?
- java 模拟画图板 不知道改怎么实现保存图像的功能
- 如何判断一个类中是否存在指定名字的字段
- 询问一个有关dao的问题
你debug了 没有?
你的所有功能都是在点击"确定"中实现的,肯定是点一次执行一遍
就上面一点点东西,你用edbug模式调试一下就知道了....
if(txt.getText().equals(""))
{
JOptionPane.showMessageDialog(f,"请填写查询条件");
return;
}
之后 加上
columnHeaderVector.clear() 就可以解决了 输入什么条件都有内容的那个 应该是你生产 sql语句的那段逻辑不正确
其实 columnHeaderVector 这个东西 对于你这个需求 就是 写到 方法内 做成 局部变量 就OK了 没次点确定 新new一个 里面就是空的了
如何做到每次按确定 就把内容清空一次?可以留个QQ联系方式吗?我在CSDN不太懂发图片