世界杯足球赛成绩系统.docx
《世界杯足球赛成绩系统.docx》由会员分享,可在线阅读,更多相关《世界杯足球赛成绩系统.docx(24页珍藏版)》请在冰点文库上搜索。
世界杯足球赛成绩系统
//附加程序代码。
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjavax.swing.table.*;
importjava.sql.*;
publicclassBrowseJFrameextendsJFrameimplementsListSelectionListener
{
privateDataBaseOperationdboper;//操纵数据库的对象
privateStringtable;//数据库中的表名
privateString[]columnNames;//指定表中所有列的中文标题
privateStringlist_column;//表中的列
privateStringsort_column;//指定排序依据的列
privateJListlist_group;//列表框,显示分类列的不重复值
privateJTabletable_team;//表格组件,显示数据库中指定的内容
privateDefaultTableModeltableModel;//JTable使用的模式
publicBrowseJFrame(DataBaseOperationdboper,Stringtable,String[]columnNames,Stringlist_column,Stringsort_column)//构造方法,指定表名
{
this.dboper=dboper;
this.table=table;
this.columnNames=columnNames;
this.list_column=list_column;
this.sort_column=sort_column;
this.setSize(640,240);//界面设计
this.setLocation(300,240);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JSplitPanesplitter_h=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT);//分割窗格,水平分割
this.add(splitter_h);
try
{
String[]groupdata=dboper.selectDistinct(table,list_column);//获得指定列不重复的值
this.list_group=newJList(groupdata);
this.list_group.setSelectedIndex
(1);//选中第1项
splitter_h.add(newJScrollPane(this.list_group));
this.list_group.addListSelectionListener(this);//注册选择事件监听器
tableModel=newDefaultTableModel(columnNames,0);//默认表格模式
this.valueChanged(null);//执行列表框的选择事件处理程序
this.table_team=newJTable(tableModel);
//this.table_team.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
splitter_h.add(newJScrollPane(table_team));
}
catch(Exceptione)
{
e.printStackTrace();
}
this.setVisible(true);
}
publicvoiddisplay(StringcolumnValue)
{
Stringconditions="";
if(columnValue!
=null&&!
columnValue.equals("全部"))
conditions=this.list_column+"='"+columnValue+"'";
try
{
dboper.select(this.table,conditions,sort_column,this.tableModel);//查询并显示指定组的数据结果集
}
catch(SQLExceptionsqle)
{
sqle.printStackTrace();
}
}
publicvoidvalueChanged(ListSelectionEvente)//在列表框中选择数据项时触发
{//在表中查询指定组的数据,将数据结果集显示在表格组件中
Stringselecteditem=(String)list_group.getSelectedValue();
if(selecteditem!
=null)
display(selecteditem);
}
publicstaticvoidmain(Stringargs[])
{
Stringdriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//指定SQLServerJDBC驱动程序
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=WorldCup2006";//指定SQLServer数据库student的URL
Stringuser="sa";//指定用户名
Stringpassword="yeheya";//指定用户口令
try
{
DataBaseOperationdboper=newDataBaseOperation(driver,url,user,password);
String[]team_columnNames={"组别","球队1","球队2","场次","比赛时间","队1进球数","队2进球数"};
BrowseJFrameteam_browse=newBrowseJFrame(dboper,"MatchRecord",team_columnNames,"group1","number");
team_browse.setTitle("第18届世界杯足球赛小组赛记录表(赛程安排及战况记录)2006年6月9日~7月10日德国");
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
/*
//小组赛记录表
//小组赛积分榜
String[]team_columnNames={"排名","组别","球队","国旗","场次","胜","平","负","进球","失球","净胜球","积分"};
BrowseJFrameteam_browse=newBrowseJFrame(dboper,"TeamScore",team_columnNames,"group1","rank");
team_browse.setTitle("第18届世界杯足球赛小组赛积分榜");
publicvoidvalueChanged(ListSelectionEvente)//在列表框中选择数据项时触发
{//在表中查询指定组的数据,将数据结果集显示在表格组件中
Stringselecteditem=(String)list_group.getSelectedValue();
Stringconditions=this.list_column+"='"+selecteditem+"'";
try
{
dboper.select(this.table,conditions,sort_column,this.dataModel);//查询并显示指定组的数据结果集
}
catch(SQLExceptionsqle)
{
sqle.printStackTrace();
}
}
*/
//【例11.2】连接指定数据库并获得数据库属性信息。
//【例11.3】执行数据操纵的SQL语句。
//数据库操作类
importjava.sql.DriverManager;
importjava.sql.Connection;
importjava.sql.DatabaseMetaData;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.sql.ResultSet;
importjava.sql.ResultSetMetaData;
importjavax.swing.*;
importjavax.swing.table.*;
publicclassDataBaseOperation
{
privateConnectionconnection;//数据库连接对象
//构造方法,连接指定数据库。
4个参数分别指定JDBC驱动程序、数据库URL、用户名和口令
publicDataBaseOperation(Stringdriver,Stringurl,Stringuser,Stringpassword)
throwsClassNotFoundException,SQLException
{
this.connection=null;
Class.forName(driver);//指定JDBC驱动程序
this.connection=DriverManager.getConnection(url,user,password);//返回数据库连接对象
}
publicDataBaseOperation(Stringdriver,Stringurl)throwsClassNotFoundException,SQLException
{
this.connection=null;
Class.forName(driver);
this.connection=DriverManager.getConnection(url);
}
publicvoidfinalize()throwsSQLException//析构方法,关闭数据库连接
{
this.connection.close();
}
publicStringgetDBAbout()throwsSQLException//获得所连接数据库的属性信息,返回字符串
{
Stringmessage="";
DatabaseMetaDatadbmd=this.connection.getMetaData();
message="JDBC驱动程序:
"+dbmd.getDriverName()+""+dbmd.getDriverVersion()+"\r\n"+
"JDBCURL:
"+dbmd.getURL()+"\r\n"+
"数据库:
"+dbmd.getDatabaseProductName()+"\r\n"+
"数据库版本:
"+dbmd.getDatabaseProductVersion()+"\r\n"+
"用户名:
"+dbmd.getUserName()+"\r\n";
returnmessage;
}
//【例11.3】执行数据操纵的SQL语句。
//执行数据更新的SQL语句,包括INSERT、UPDATE、DELETE语句
//执行成功返回所影响的行数,否则返回0
publicintdataUpdate(Stringsql)throwsSQLException
{
Statementstatement=this.connection.createStatement();
intresult=statement.executeUpdate(sql);
statement.close();
returnresult;
}
//执行数据查询的SELECT语句,参数table指定表名,conditions指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
publicvoidselect(Stringsql)throwsSQLException
{
Statementstatement=this.connection.createStatement();
ResultSetresultset=statement.executeQuery(sql);//执行数据查询SELECT语句
ResultSetMetaDatarsmd=resultset.getMetaData();//返回元数据对象
intcolumnCount=rsmd.getColumnCount();//获得列数
for(intj=1;j<=columnCount;j++)
System.out.print(rsmd.getColumnLabel(j)+"");//获得列名
System.out.println();
while(resultset.next())//从前向后访问每行
{
for(intj=1;j<=columnCount;j++)//获得每列值
System.out.print(resultset.getString(j)+"");//获得当前行指定列的值
System.out.println();
}
resultset.close();
statement.close();
}
//实验11按省份分类浏览student数据库中的stuinfo表。
//【例13.1】输入并分类浏览参赛队信息。
//执行数据查询的SELECT语句,参数table指定表名,conditions指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
publicString[]selectDistinct(Stringtable,Stringcolumn)throwsSQLException
{
String[]results=null;
if(table!
=null&&table!
="")
{
Stringsql="SELECTDISTINCT"+column+"FROM"+table+"ORDERBY"+column;//获得指定列不重复的值
Statementstatement=this.connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);//设置结果集属性为可滚动、只读
ResultSetresultset=statement.executeQuery(sql);//执行数据查询SELECT语句
if(resultset!
=null)
{
introwCount=0;
while(resultset.next())//获得结果集总行数
rowCount++;
results=newString[rowCount+1];//按列数分配一维数组空间
results[0]="全部";
resultset.beforeFirst();//移动指针到第一行之前
inti=1;
while(resultset.next())//获得每列数据
{
results[i]=resultset.getString
(1);//获得当前行指定列的值
i++;
}
}
resultset.close();
statement.close();
}
else
thrownewSQLException("表名不能为空。
");
returnresults;
}
//执行包含集函数的数据查询SELECT语句
publicintselectCount(Stringsql)throwsSQLException
{
Statementstatement=this.connection.createStatement();
ResultSetresultset=statement.executeQuery(sql);//执行数据查询SELECT语句
resultset.next();
intcount=resultset.getInt
(1);
resultset.close();
statement.close();
returncount;
}
//执行数据查询的SELECT语句,参数table指定表名,conditions指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
publicvoidselect(Stringtable,Stringconditions,Stringsort_column,DefaultTableModeltableModel)throwsSQLException
{
if(table!
=null&&table!
="")
{
Stringsql="SELECT*FROM"+table;//查询全部列时
if(conditions!
=null&&conditions!
="")
sql+="WHERE"+conditions;//增加查询条件
sql+="ORDERBY"+sort_column;//按指定列的升序排序
//sql+="ORDERBY'#1'";//默认按第1列的升序排序,SQLServer不支持#1
//System.out.println(sql);
Statementstatement=this.connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);//设置结果集属性为可滚动、只读
ResultSetresultset=statement.executeQuery(sql);//执行数据查询SELECT语句
if(resultset!
=null)
{
introwCount=0;
while(resultset.next())//获得结果集总行数
rowCount++;
ResultSetMetaDatarsmd=resultset.getMetaData();//返回元数据对象
intcolumnCount=rsmd.getColumnCount();//获得列数
tableModel.setRowCount(rowCount);
tableModel.setColumnCount(columnCount);
resultset.beforeFirst();//移动指针到第一行之前
inti=0;
while(resultset.next())//获得每列数据
{
for(intj=1;j<=columnCount;j++)
tableModel.setValueAt(resultset.getString(j),i,j-1);//获得当前行指定列的值
i++;
}
//dataModel.fireTableChanged(null);
}
else
tableModel.setRowCount(0);
resultset.close();
statement.close();
}
else
thrownewSQLException("表名不能为空。
");
}
}
/*
①执行数据插入INSERT语句的方法
在DataBaseOperation类中添加下列insert()方法。
insert()方法将参数指定的表、列及列值转换成一条数据插入的INSERT语句,参数table指定表名,columns[]数组指定多个列,values[]数组指定多个列对应的取值,执行成功返回1,否则返回0。
该方法声明如下。
②执行数据查询SELECT语句的方法
在DataBaseOperation类中添加下列select()方法。
select()方法将参数指定的表及条件转换成一条数据查询的SELECT语句,参数table指定表名,conditions指定WHERE子句的查询条件,多个条件时用逻辑运算符连接。
由于调用executeQuery()方法执行SELECT语句返回一个结果集ResultSet对象,这个对象需要在保持数据库连接的状态才能访问,而select()方法调用是不基于数据库连接的,所以,select()方法不能简单返回一个ResultSet对象,需要将ResultSet对象中的数据读出并转移到一个二维数组Object[][]中。
该方法声明如下。
其中,将ResultSet对象属性设置为可滚动的,按从前向后的方向对结果集访问了两次,第一次循环获得结果集的总行数,以确定二维数组的维数,再调用beforeFirst()方法使结果集指针回到第1行之前,准备再一次对结果集进行访问。
*/
/*
//执行数据查询的SELECT语句,参数table指定表名,conditions指定WHERE子句的查询条件,多个条件时用逻辑运算符连接
//执行成功返回数据结果集,否则返回null。
publicObject[][]select(Stringtable,Stringconditions)throwsSQLException
{
Object[][]resultobj=null;
if(table!
=null&&table!
="")
{
Stringsql="SELECT*FROM"+table;//查询全部列时
if(conditions!
=null&&conditions!
="")
sql+