数据库实验四报告.docx
- 文档编号:7189915
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:15
- 大小:146.65KB
数据库实验四报告.docx
《数据库实验四报告.docx》由会员分享,可在线阅读,更多相关《数据库实验四报告.docx(15页珍藏版)》请在冰豆网上搜索。
数据库实验四报告
实验四数据库数据查询
一.实验目的:
理解并掌握利用.net和Delphi、Java(JBuilder或Eclipse)等编程平台进行数据库访问的基本过程,熟悉数据库访问方法。
二.实验属性:
设计性。
三.实验仪器设备及器材:
装有.net和Delphi7、.net或JDK编译器及SQLServer的计算机。
四.实验要求
1.预习数据库访问的方式:
i.对于Delphi通过BDE、ODBC和ADO三种访问方法。
ii.对于.net编译环境要熟练掌握三种数据库连接方法:
SqlConnection(或者OleDbConnection,或者OdbcConnection);
SqlCommand(或者OleDbCommand,或者OdbcCommand);
SqlDataReader(或者OleDbDataReader,或者OdbcDataReader);
iii.对于java使用JDBC进行数据库连接。
1.调用Driver.forName方法加载驱动程序。
2.调用DriverManager对象的getConnection()方法,获得一个Connection对象。
3.创建一个Statement对象,准备一个SQL语句,这个SQL语句是Statement对象(立即执行的语句)、PreparedStatement语句(预编译的语句)或CallableStatement(存储过程中调用的语句)。
4.调用executeUpdate()等方法执行SQL语句,不返回ResultSet对象的结果。
5.对返回的ResultSet对象进行显示等相应的处理。
2.熟悉掌握数据库数据查询的组件:
a)对于.net和Delphi编译环境
ADO组件栏的组件:
TADOConnection、TADOTable、TADOQuery、TADOStoredProc
BDE组件栏的组件:
TTable、TQuery、TStoredProc、TDatabase
DataAccess组件栏的组件:
TdataSource
DataControl组件栏的组件:
TDBGrid、TDBText、TDBMemo、TDBEdit、TDBImage、TDBListBox、TDBCheckBox、TDBComboBox
等数据库操作常用组件的使用。
b)对于.net环境下的C#语言数据库编程,熟练掌握三种数据库连接方法。
数据库操作类的使用,如:
DataSet、SqlDataAdapter、dataGridView等。
c)对于Java(JBuilder或Eclipse)编译环境利用JDBC进行数据库连接。
数据库连接后使用Database、QueryDataSet、TableDataSet、DataSetView等类进行数据库操作。
2.接着上次的实验进行。
3.实验中要求完成如下步骤:
a.复合查询。
给定一定的查询字段,有用户进行选择进行查询。
注意使用模糊匹配。
b.动态查询。
给出数据库的所有字段,有用户选择后进行查询。
对于不同的字段类型,由程序自动给出操作运算符,如果用户选择了一个数据类型是char型的字段,操作运算符只能是“=”,“<>”。
注意使用模糊匹配。
五、试验的步骤
1、定义用于数据库操作的类
publicclassLinkDataBase
{
privatestringcomputername="";
privateSqlConnectionmyconnection=newSqlConnection();
privateSqlCommandmycmd=newSqlCommand();
publicLinkDataBase()
{
mycmd.Connection=myconnection;
}
publicstringpcomputername
{
get{returncomputername;}
set{computername=value;}
}
publicSqlConnectionpconnection
{
get{returnmyconnection;}
set{myconnection=value;}
}
publicSqlCommandpcmd
{
get{returnmycmd;}
set{mycmd=value;}
}
publicstringLink()
{
stringstr=ConfigurationManager.ConnectionStrings["Mysql"].ConnectionString.ToString();
str+=computername+
ConfigurationManager.ConnectionStrings["Mysql1"].ConnectionString.ToString();
myconnection.ConnectionString=str;
try
{
myconnection.Open();
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message.ToString(),"提示");
return"连接失败";
}
return"连接成功";
}
publicvoidShow(DataGridViewdview)
{
SqlDataAdapterAdapter=newSqlDataAdapter();
Adapter.SelectCommand=mycmd;
DataSetmyDS=newDataSet();
Adapter.Fill(myDS);
dview.DataSource=myDS.Tables[0].DefaultView;
}
publicboollogin(stringname,stringpassword)
{
Exceptionex=newException();
mycmd.CommandText="SELECT*FROMlogin";
mycmd.Connection=myconnection;
SqlDataReadermyread=mycmd.ExecuteReader();
try
{
while(myread.Read())
{
if(myread.GetValue(0).ToString().Trim()==name.ToString().Trim())
{
if(myread.GetValue
(1).ToString().Trim()==password.ToString().Trim())
{
myread.Close();
myconnection.Close();
returntrue;
}
else
{
ex=newException("密码输入错误");
throwex;
}
}
}
ex=newException("用户名输入有误");
throwex;
}
catch(ExceptionEx)
{
switch(Ex.Message)
{
case"密码输入错误":
MessageBox.Show("密码输入有误","提示!
",MessageBoxButtons.OK);
myread.Close();
myconnection.Close();
returnfalse;
case"用户名输入有误":
MessageBox.Show("用户名输入有误","提示!
",MessageBoxButtons.OK);
myread.Close();
myconnection.Close();
returnfalse;
default:
myread.Close();
myconnection.Close();
returnfalse;
}
}
}
}
2、数据库登录界面及其中操作的设置
界面设计:
在该对话框类Form1中定义静态类用于数据库的操作
staticpublicLinkDataBaseldb=newLinkDataBase();
点击登录按钮是所运行的操作
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(textBox1.Text.Trim()=="")
{
MessageBox.Show("计算机名不能为空!
!
!
!
!
","提示",MessageBoxButtons.OK);
return;
}
ldb.pcomputername=textBox1.Text.Trim();
if(ldb.Link()=="连接失败")
return;
if(ldb.login(textBox2.Text.Trim(),textBox3.Text.Trim()))
{
this.Hide();
Queryf=newQuery();
f.ShowDialog();
this.Close();
}
}
3、数据库查询界面及其中操作的设置
界面设计:
作用于“查询某学生的信息”界面的关键代码:
privatevoidbutton1_Click(objectsender,EventArgse)
{
if(textBox1.Text!
="")
{
Form1.ldb.pcmd.CommandText=@"SELECT*
FROMStudent
WHERESnameLIKE@name";
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@name",SqlDbType.VarChar,8).Value=
textBox1.Text.Trim();
Form1.ldb.Show(dataGridView1);
statusStrip1.Items[1].Text=("共查到"+(dataGridView1.RowCount-1).ToString()+"条记
录");
}
else
MessageBox.Show("姓名不能为空!
!
!
");
}
作用于“按选择条件查询”界面的关键代码
privatevoidbutton2_Click(objectsender,EventArgse)
{
stringstr="";
if(comboBox2.Text==""||comboBox1.Text==""||textBox2.Text=="")
{
MessageBox.Show("不能为空");
return;
}
switch(log)
{
case1:
str="";
switch(comboBox1.Text)
{
case"成绩大于":
str=">";
break;
case"成绩大于等于":
str=">=";
break;
case"成绩小于":
str="<";
break;
case"成绩小于等于":
str="<=";
break;
case"成绩等于":
str="=";
break;
case"成绩不等于":
str="!
=";
break;
default:
MessageBox.Show("输入有误");
return;
}
str=@"SELECTSname姓名,Cname课程名,Grade成绩
FROMStudent,SC,Course
WHEREStudent.Sno=SC.SnoAndSC.Cno=Course.CnoAND
Grade"+str+"@grade";
Form1.ldb.pcmd.CommandText=str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@grade",SqlDbType.VarChar,10).Value=
textBox2.Text.Trim();
break;
case2:
str="";
switch(comboBox1.Text.Trim())
{
case"在":
str="=";
break;
case"不在":
str="!
=";
break;
default:
MessageBox.Show("输入有误");
return;
}
str=@"SELECTSno学号,Sname姓名,Sdept院系
FROMStudent
WHERESdept"+str+"@dept";
Form1.ldb.pcmd.CommandText=str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@dept",SqlDbType.VarChar,15).Value=
textBox2.Text.Trim();
break;
case3:
str="";
switch(comboBox1.Text.Trim())
{
case"年龄大于":
str=">";
break;
case"年龄大于等于":
str=">=";
break;
case"年龄小于":
str="<";
break;
case"年龄小于等于":
str="<=";
break;
case"年龄等于":
str="=";
break;
case"年龄不等于":
str="!
=";
break;
default:
MessageBox.Show("输入有误");
return;
}
str=@"SELECT*
FROMStudent
WHERESage"+str+"@age";
Form1.ldb.pcmd.CommandText=str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@age",SqlDbType.VarChar,3).Value=
textBox2.Text.Trim();
break;
case4:
str="";
switch(comboBox1.Text.Trim())
{
case"选修了":
str="=";
break;
case"未选修":
str="!
=";
break;
default:
MessageBox.Show("输入有误");
return;
}
str=@"SELECTStudent.Sno学号,Sname姓名,Cname课程名
FROMStudent,SC,Course
WHEREStudent.Sno=SC.SnoANDSC.Cno=Course.CnoAND
Cname"+str+"@name";
Form1.ldb.pcmd.CommandText=str;
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@name",SqlDbType.VarChar,10).Value=
textBox2.Text.Trim();
break;
}
Form1.ldb.Show(dataGridView2);
statusStrip1.Items[1].Text=("共查到"+(dataGridView2.RowCount-1).ToString()+"条记录");
}
作用于“查询某学生的选课情况”界面的关键代码
privatevoidbutton3_Click(objectsender,EventArgse)
{
Form1.ldb.pcmd.CommandText=@"SELECTCno课程号,Cname课程名,Cpno先修课
程号,Ccredit学分
FROMCourse
WHERECnoIN(
SELECTCno
FROMSC
WHERESnoIN(
SELECTSno
FROMStudent
WHERE
Sname=@name
)
)";
Form1.ldb.pcmd.Parameters.Clear();
Form1.ldb.pcmd.Parameters.Add("@name",SqlDbType.VarChar,10).Value=
textBox3.Text.Trim();
Form1.ldb.Show(dataGridView3);
statusStrip1.Items[1].Text="共选修"+(dataGridView3.RowCount-1).ToString()+"门课程";
}
4、数据库登录查询系统的测试及部分查询结果
该程序的测试:
由于该程序是一个较小的程序,所以相对来说错误较小,基本上不需要太大的更改,测试的过程通过分析查询的过程及最终结果可以知道程序是否有问题。
该程序的部分查询结果(用图示于下面):
经过分析可知此程序没有错误。
六、心得体会
经过这次的试验,我对数据库的操作中数据库查询的功能及使用有了更深的了解,同时也懂得了类的封装在数据库系统以及其他类似系统中的重要性,一个类如果封装的好,就会使程序的编写更加的简洁,易于操作的实现,同时也有利于类的移植(从一个程序中取出应用于另一个程序)。
在这个程序中自己封装了一个用于数据库链接及操作(这里主要指数据库的查询操作)的类,然而该类的封装还有待增强,从在试验三与实验四中的应用中可以看出相对来说此类地可移植性较好,能够复用。
但是,该类中封装的用于数据库操作的功能还太少,有待于在此方面扩充。
随着对数据库更深的了解,此类的功能及其他方面会有更大的进步。
在该程序中实现的查询功能有:
1、给定某个学生的姓名然后查询并输出这个学生在Student表中的记录信息。
2、给定某个条件:
按成绩查询,按学院查询,按年龄查询,按课程查询。
给定条件后,从中选择满足条件的学生记录并将其输出。
3、给定某个学生姓名然后查询并输出这个学生的选课记录信息。
其中虽然实现了部分功能,但是还不够完善,已经实现的功能可能组织形式与实现方式有些不妥,在今后的学习中有待提高。
总而言之,经过这次的试验,我对数据库的认识更加的深刻。
不论是从理论的检验,还是从理论应用于实践的能力都有很大提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告