有关JAVA 显示SQL 查询结果的显示

 
import java.awt.*;
import javax.swing.*;
public class test extends JFrame {
private controls1 control;//
数据库表格控件类 , 内集成了表格操作的全部功能
private JScrollPane scroll;
public test() {
this.setTitle("
连接数据库 ");
control=new controls1("pubs","titles","sa","1");//pubs
数据库名 ,titles 表名 ,sa 用户名 ,1 为密码
scroll=new JScrollPane(control);//
表格可以滚动
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(scroll,BorderLayout.CENTER);
}
public static void main(String[] args) {
test frame=new test();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
运行结果为
第一行黑体为字段名,下面 1-18 显示的是记录 , 外部调用就一个构造函数 controls1 control=new controls1("pubs","titles","sa","1")//pubs 数据库名 ,titles 表名 ,sa 用户名 ,1 为密码
下面再举一些例子来说明这个控件,还是以数据库 pubs 为例 , 它下属有表
"titles","titleauthor","stores","sales","roysched","publishers","pub_info","jobs","employee","discounts","authors"
现在对数据库表与表格进行操作 ,其中包括对表格的插入,删除,修改,更新请看源程序
package
界面 ;// 包名,可缺省
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class databaseFrame extends JFrame implements ActionListener, ItemListener {
private JButton add,remove,laws,submit,update;//
增加,删除,修改,提交,刷新
private String[]table={"titles","titleauthor","stores","sales","roysched","publishers","pub_info","jobs","employee","discounts","authors"};//
表名
private JComboBox combox;//
表名组全框
private controls1 control;//
数据库控件类
private JScrollPane scroll;//
表格可滚动
private String s;//
选定的表名
public databaseFrame() {//
构造函数
JPanel p=new JPanel(new GridLayout(6,1,10,20));
add=new JButton("
增加 ");
remove=new JButton("
删除 ");
laws=new JButton("
修改 ");
submit=new JButton("
提交 ");
update=new JButton("
刷新 ");
combox=new JComboBox(table);
p.add(combox);
p.add(add);
p.add(remove);
p.add(laws);
p.add(submit);
p.add(update);
p.setBorder(new LineBorder(Color.black,1));
control=new controls1("pubs","titles","sa","1");
scroll=new JScrollPane(control);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(p,BorderLayout.EAST);
this.getContentPane().add(scroll,BorderLayout.CENTER);
add.addActionListener(this);
remove.addActionListener(this);
laws.addActionListener(this);
submit.addActionListener(this);
update.addActionListener(this);
combox.addItemListener(this);
this.setBounds(200, 100, 600, 500);
this.setTitle("
数据库 ");
this.setVisible(false);
}
public void actionPerformed(ActionEvent e) {
String click=e.getActionCommand();
if("
增加 ".equals(click)){
control.addRow();//
增加一行
add.setEnabled(false);
remove.setEnabled(false);
laws.setEnabled(false);
submit.setEnabled(true);
update.setEnabled(false);
}
else if("
删除 ".equals(click)){
control.removeRow();//
删除一行
add.setEnabled(false);
remove.setEnabled(false);
laws.setEnabled(false);
submit.setEnabled(false);
update.setEnabled(true);
}
else if("
修改 ".equals(click)){
control.sqlUpdate();//
修改一行
add.setEnabled(false);
remove.setEnabled(false);
laws.setEnabled(false);
submit.setEnabled(false);
update.setEnabled(true);
}
else if("
提交 ".equals(click)){
control.sqlAddRow();//
提交一行
submit.setEnabled(false);
update.setEnabled(true);
}
else{
add.setEnabled(true);
remove.setEnabled(true);
laws.setEnabled(true);
submit.setEnabled(true);
update.setEnabled(true);
control=new controls1("pubs",s,"sa","1");//
刷新
scroll.setViewportView(control);
scroll.validate();
}
}
public void itemStateChanged(ItemEvent e) {
s=(String)e.getItem();
control=new controls1("pubs",s,"sa","1");
scroll.setViewportView(control);
scroll.validate();
}
public static void main(String[] args) {
databaseFrame frame=new databaseFrame();
frame.setSize(600,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
请看运行结果
首先,我们来看控件的增加一行的功能,首先,点击增加按扭 , 马上调用 control.addRow(), 在其表格的尾部添加新的一行 , 运行如图所示
在其空白地方输入数据,点击提交按扭 , 马上调用 control.sqlAddRow(); 如果提交成功,则弹出消息对话框成功,否则失败
再点击刷新按扭 , 调用构造函数
control=new controls1("pubs",s,"sa","1");
重新连接表,即可得到刷新效果,
再来看表行的删除,首先选定一行记录,点击删除按扭 , 调用 control.removeRow() ,如果删除成功,则弹出对话框成功,否则失败,运行如下
再点击刷新按扭
再来看表行的的修改,先选定一行,修改了某个地方后,再点击修改按扭 , 调用 control.sqlUpdate() ,弹出对话框成功与否 , 再点击刷新按扭 , 运行如下
再点击刷新按扭 , 重新调用构造函数 control=new controls1("pubs",s,"sa","1")
Controls1
的主要属性
private JLabel[] jhlabels,jvlabels;//
列标签,行标签
private JTextField[][] txts;//
二维文本框
private int row=0;//
初始行数
private int column=0;//
初始列数
private String[] chrs;//
列标签名称
private GridBagLayout grid;
private GridBagConstraints cons;
private String database,table,username,pwd;//
数据库名,表名,用户名,密码
private String sql;//sql
语句
private boolean backrow,backcol;
private int selectrow,selectcolumn;//
选定的行与列
private Connection con;
private Statement a;
private ResultSet b;
private JLabel newJvlabels,newJhlabels;//
新增加的行与列
private JTextField[] newRowTxts,newColTxts;//
新增加的文本框
主要方法 :
构造函数
public controls1(String database,String table,String username,String pwd)
功能:连接数据库中的表,并以表格显示出来
参数: 1 ,数据库名。 2 ,表名。 3 ,用户名。 4 ,密码
构造函数
public controls1(String[]a,int row)
功能:生成指定行数,列数的表格,并且指定列标签的名称
参数: 1 ,列标签名数组。 2 ,行数
public void addColumn(String name)
功能:在最后一列处添加一列,并生成列标签
参数:列标签名称
public void addColumn(String name,int selectcolumn)
功能:在指定的列位置处旁边添加一列,并生成列标签
参数: 1 ,列标签名称。 2 ,指定的列
public void addRow()
功能:在行的最尾端处添加一行 , public void sqlAddRow() 配合使用
public void addRow(int selectrow)
功能:在指定的行的下一行添加一行 , public void sqlAddRow() 配合使用
public String[] getchrs()
功能:得到列标签的名称数组
public String getDatabase()
功能:得到数据库的名称
public Dimension getMinimumSize()
功能:得到控件面板的最小尺寸
public Dimension getPerferredSize()
功能:得到控件面板的最合适尺寸
public String getnewRowText(int column)
功能:得到新生成的那一行某一列的值
参数:列位置
public String getPwd()
功能:得到密码
public int getRow()
功能:得到行数
public String getText(int row,int column)
功能 :得到指定行与列的文本值
参数: 1 ,指定行, 2 ,指定列
public String getUserName()
功能:得到用户名
public void mouseClicked(MouseEvent e)
功能:产生选定行或列,并以颜色的形式显现
public void removeColumn()
功能:删除选定列
public void removeRow()
功能:删除选定行
public void setDatabase(String database)
功能: 设置数据库名
参数:数据库名
public void setPwd(String pwd)
功能:设置密码
参数:密码
public void setRow(int row)
功能:设置行数
参数:行数
public void setText(String txt,int row,int column)
功能:设置指定行与列位置的文本值
参数: 1 ,文本值。 2 ,指定行。 3 ,指定列
public void setUserName(String username)
功能:设置用户名
参数:用户名
public void sqlAddRow()
功能:把新生成的一行的数据写到数据库的表中
public void sqlUpdate()
功能:更新表
 
 
Java数据库查询结果的输出 摘自:北京海脉信息咨询有限公司   利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。 类Vector:   定义如下: public class Vector extends AbstractList implements List , Cloneable , Serializable{…} 类JTable:   JTable组件是Swing组件中比较复杂的小件,隶属于javax.swing包,它能以二维表的形式显示数据。类Jtable: 定义如下: public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible{…} 类AbstractTableModel:   定义如下: public abstract class AbstractTableModel extends Object implements TableModel, Serializable{…}   生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面三个方法: public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column);   我们可以建立一个简单二维表(5×5): TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 5; } public int getRowCount() { return 5;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); 数据库及其连接方法:   我们采用Sybase数据库数据库存放在数据库服务器中。路径为:D:WORKER,数据库名为:worker.dbf。具有以下字段: 字段名 类型 Wno(职工号) VARCHAR Wname(职工名) VARCHAR Sex(性别) VARCHAR Birthday(出生日期) DATE Wage(工资) FLOAT   要连接此数据库,需使用java.sql包中的类DriverManager。此类是用于管理JDBC驱动程序的实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据库访问登录超时等方法。   具体连接方法如下:   定位、装入和链接SybDriver类。 driver="com.sybase.jdbc.SybDriver"; SybDriver sybdriver=(SybDriver) Class.forName(driver).newInstance();   注册SybDriver类。 DriverManager.registerDriver(sybdriver);   取得连接(SybConnection)对象引用。 user="sa"; password=""; url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER"; SybConnection connection= (SybConnection)DriverManager.getConnection (url,user,password); 建立完连接后,即可通过Statement接口进行数据库查询与更改。 实现方法:   对象声明。   AbstractTableModel tm;   //声明一个类AbstractTableModel对象   JTable jg_table;//声明一个类JTable对象   Vector vect;//声明一个向量对象   JScrollPane jsp;//声明一个滚动杠对象   String title[]={"职工号","职工名",   "性别","出生日期","工资"};   //二维表列名   定制表格。   实现抽象类AbstractTableModel对象tm中的方法:   vect=new Vector();//实例化向量   tm=new AbstractTableModel(){   public int getColumnCount(){   return title.length;}//取得表格列数   public int getRowCount(){   return vect.size();}//取得表格行数   public Object getValueAt(int row,int column){   if(!vect.isEmpty())   return   ((Vector)vect.elementAt(row)).elementAt(column);   else   return null;}//取得单元格中的属性值   public String getColumnName(int column){   return title[column];}//设置表格列名   public void setValueAt   (Object value,int row,int column){}   //数据模型不可编辑,该方法设置为空   public Class getColumnClass(int c){   return getValueAt(0,c).getClass();   }//取得列所属对象类   public boolean isCellEditable(int row,int column){   return false;}//设置单元格不可编辑,为缺省实现   };   定制表格:   jg_table=new JTable(tm);//生成自己的数据模型   jg_table.setToolTipText("显示全部查询结果");   //设置帮助提示   jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   //设置表格调整尺寸模式   jg_table.setCellSelectionEnabled(false);   //设置单元格选择方式   jg_table.setShowVerticalLines(true);//   设置是否显示单元格间的分割线   jg_table.setShowHorizontalLines(true);   jsp=new JScrollPane(jg_table);//给表格加上滚动杠   显示查询结果。   连接数据库:已给出。   数据库查询:   Statement stmt=connection.createStatement();   ResultSet rs=stmt.executeQuery   ("select * from worker");   显示查询结果:   vect.removeAllElements();//初始化向量对象   tm.fireTableStructureChanged();//更新表格内容   while(rs.next()){   Vector rec_vector=new Vector();   //从结果集中取数据放入向量rec_vector中   rec_vector.addElement(rs.getString(1));   rec_vector.addElement(rs.getString(2)); rec_vector.addElement(rs.getString(3)); rec_vector.addElement(rs.getDate(4));   rec_vector.addElement(new Float(rs.getFloat(5)));   vect.addElement(rec_vector);   //向量rec_vector加入向量vect中   }   tm.fireTableStructureChanged();   //更新表格,显示向量vect的内容   实现示图中记录前翻、后翻的效果,有两种方法:   如果软件环境支持JDBC2.0,可直接利用rs.prevoius()和rs.next()获得记录,然后通过类JTextField中的setText()方法,显示出各个字段值。   如果不支持JDBC2.0,则可利用向量Vector按行取出JTable中数据。自定义一个指针,用来记录位置。当指针加1时,取出上一行数据放入Vector中显示;指针减1时,取出下一行数据显示显示方法同上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值