数据库提高型实验报告(嵌入式SQL数据库访问)
数据库实验 通过嵌入式SQL访问数据库

数据库原理课程实验报告1. 实验题目:实验五通过嵌入式SQL访问数据库2.实验目的熟悉通过嵌入式SQL(主语言C语言)编程访问数据库3实验平台3.1 操作系统:Windows 2000或者Windows XP注:使用Professional版的操作系统建议安装数据库管理系统的教学版,Server 版的操作系统建议安装数据库管理系统的企业版。
3.2 数据库管理系统:SQL Server 2000数据库管理系统4 实验内容及要求内容:熟悉RDBMS的预编译程序。
掌握SQL Server 2000的预编译程序NSQLPREP.EXE 的使用(以课本例题1进行调试)。
要求:在本报告中列出程序代码及注释,保证程序能正确编译运行。
5. 实验内容与完成情况:嵌入式SQL的C语言应用程序在VC++6.0、SQL Server 2000环境下的调试可分为五步:第一步环境初始化;第二步预编译;第三步编译;第四步连接;第五步运行。
1、环境初始化(1) 将文件夹devtools复制到SQL Server的系统目录C:\Program Files\Microsoft SQL Server\(或在安装Microsoft SQL Server 2000时选择安装Development Tools,为使用嵌入式SQL语言准备必要的头文件和库文件。
)(2)初始化Visual C++ 6.0编译器环境。
在命令行方式下运行文件\Microsoft VisualStudio\VC98\Bin\vcvars32.bat。
运行文件\Microsoft Visual Studio\VC98\Bin\vcvars32.bat。
本人直接是由附件里的运行程序直接运行(3)初始化SQL Server的预编译环境。
在命令行方式下运行文件: C:\Program Files\Microsoft SQL Server\DEVTOOLS\SAMPLES\ESQLC\setenv.bat。
数据库sql 实验报告

数据库sql 实验报告数据库SQL实验报告1. 引言数据库是现代信息系统中不可或缺的组成部分,它提供了有效地存储和管理数据的能力。
结构化查询语言(SQL)是一种用于管理和操作关系型数据库的标准化语言。
本实验报告旨在通过实际操作和实验结果的分析,探讨SQL在数据库中的应用和效果。
2. 实验目的本次实验的主要目的是熟悉和掌握SQL语言的基本操作,包括数据的查询、插入、更新和删除等。
通过实验,我们可以进一步了解SQL语言的特点和使用方法,加深对数据库管理系统的理解。
3. 实验环境本次实验使用的数据库管理系统为MySQL,它是一种开源的关系型数据库管理系统。
MySQL提供了强大的功能和灵活的配置选项,被广泛应用于各种规模的应用程序中。
4. 实验步骤4.1 数据库连接在实验开始之前,我们首先需要建立与数据库的连接。
通过使用MySQL提供的连接函数,我们可以指定数据库的主机地址、用户名和密码等信息,以便进行后续的操作。
4.2 数据库创建在连接成功后,我们可以使用SQL语句创建一个新的数据库。
通过指定数据库的名称和字符集等属性,我们可以灵活地创建适合自己需求的数据库。
4.3 数据表创建数据库中的数据以表的形式进行组织和存储。
在本次实验中,我们将创建一个名为"students"的数据表,用于存储学生的基本信息。
通过指定表的字段和属性,我们可以定义每个字段的数据类型和约束条件。
4.4 数据插入在数据表创建完成后,我们可以使用SQL语句向表中插入数据。
通过指定插入的字段和对应的值,我们可以将具体的数据添加到表中。
在插入数据时,我们还可以使用事务来确保数据的完整性和一致性。
4.5 数据查询数据查询是SQL语言的核心功能之一。
通过使用SELECT语句,我们可以从表中检索所需的数据。
SELECT语句可以使用不同的条件和运算符进行过滤和排序,以满足不同的查询需求。
4.6 数据更新和删除除了查询,SQL语言还提供了更新和删除数据的功能。
嵌入式SQL访问数据库

黄冈师范学院提高型实验报告嵌入式SQL访问数据库实验课题(实验类型:□综合性■设计性□应用性)实验课程数据库实验时间2012年5月20号学生姓名专业班级信息1001班学号一,实验目的与要求。
编写嵌入式C程序,编程实现了对“学生课程数据库”的访问和操作:对Student表中年龄进行更新。
系统每输出一个学生记录,询问用户是否更新。
如果要更新,就输入新的年龄。
要求:将一段连续的SQL 操作写成嵌入到C 程序中的程序,调试程序,使得程序能完成一项复杂的数据处理功能,并提交程序。
嵌入式SQL 由SQL 语句和C/C++代码组成。
其中SQL 语句由预处理器翻译成C 或C++的源代码。
对预处理后的源代码进行编译、链接生成可执行程序后方可运行。
二, 实验条件联想G455笔记本一台三, 实验原理分析。
嵌入式SQL 是将SQL 语句嵌入程序设计语言中,被嵌入的程序设计语言,如C 、C++、JA V A,称为宿主语言,简称主语言。
对ESQL,RDBMS 一般采用预编译方法处理,即由RDBMS 的预处理程序对源程序进行扫描,识别出ESQL 语句,把他们转换成主语言调用语句,以使主语言编译程序能识别他们,然后又主语言的编译程序将纯的主语言程序编译成目标码。
简单的SQL 语句在VC6.0中无法正常运行编译,有了ESQL 编译过程,可以先对VC 设置改变环境,修改相应的头文件以及包含文件,然后预编译产生一个C 文件,运行VC++6.0,新建一个"WIN32 Console Application"(!!注意是"WIN32 Console Application"不要选成了"WIN32 Application"!!)的工程,然后将预编译生成的c 文件加入工程。
此时还不能编译成功,需添加两个库文件SQLakw32.lib,Caw32.lib 。
最后将相应的C 文件加入进去编译运行即可。
数据库实验3-SQL语言之数据查询(连接与嵌套查询)

实验三SQL数据查询(连接与嵌套查询)姓名:学号:专业:网络工程班级:20网络工程同组人:无实验日期:一、【实验目的与要求】1、熟练掌握SELECT 语句的基本语法格式;2、熟练掌握使用SQL语句进行嵌套查询和连接查询的使用;3、熟练掌握使用SQL标准语句和T-SQL扩展语句进行连接查询。
二、【实验内容】1.实验准备与说明本实验所涉查询为连接和嵌套,针对具体的问题,需要根据查询条件和目标列,确定数据来源为单表或多表。
在有些查询中,可能会用到另外一个查询的结果作为查询数据来源,这时,只要将子查询当成一个表来看待,也可以将该子查询取一别名,使用别名作为查询操作对象。
本实验及后面实验中所用测试数据库中表的字段及含义如下表:表-1 测试数据库表的字段及含义2.连接查询2.1内连接(1).查询编号为C2002的客户购买的产品名称、购买数量和产品价格。
请给出相应语句:Use SalesDB;select Pname,Scount,Pricefrom Product,Saleswhere o='C2002'and Sales.Pno=Product.Pno;请给出运行结果:(2).查询所在城市为“厦门”的客户名称、所购产品名和对应的价格。
请给出相应语句:select Cname,Pname,Price,Cityfrom Product,Customer,Saleswhere Customer.City='厦门'and o=o and Sales.Pno=Product.Pno;请给出运行结果:(3).查询名称为“厦门人人乐”的客户编号、客户名称、购买的产品名称和数量。
请给出相应语句:select o,Cname,Pname,Scountfrom Product,Customer,Saleswhere ame='厦门人人乐'and o=o and Sales.Pno=Product.Pno;请给出运行结果:(4).查询“海尔洗衣机”的产品编号、销售日期、销售数量和销售额(销量*价格)。
嵌入式sql

实验四:访问数据库一、实验目的利用ODBC和任意一种高级语言,编写一段访问数据库的程序。
要求该程序可以实现查询,插入、删除和更新功能。
二、实验代码这次试验是使用C#编写的,界面与代码如下:string connString = "Data Source=(local);Initial Catalog=Factory;Integrated Security=True;";SqlConnection connection = new SqlConnection(connString);connection.Open();string SCommand = "select * from 工作人员表;SqlDataAdapter adapter = new SqlDataAdapter(SCommand, connection);DataSet DSet = new DataSet();adapter.Fill(DSet, "工作人员表");dataGridView1.AutoGenerateColumns = true;dataGridView1.DataSource = DSet.Tables[0].DefaultView;connection.Close();string connString = "Data Source=(local);Initial Catalog=Factory;Integrated Security=True;";SqlConnection connection = new SqlConnection(connString);connection.Open();if (textBox1.Text.Length == 0){linkLabel1.Visible = true;}else if (textBox2.Text.Length == 0){linkLabel1.Visible = false;linkLabel2.Visible = true;}else{linkLabel1.Visible = false;linkLabel2.Visible = false; ;string data = string.Format("insert into 工作人员表values('" + textBox1.Text + "','" + textBox2.Text + "','" + comboBox1.Text + "','{0}','" + comboBox2.Text +"')",dateTimePicker1.Value.ToString("yyyy/MM/dd")); //写成comboBox1.SelectedText不行,记得区分SqlCommand com = new SqlCommand(data, connection);int m = com.ExecuteNonQuery();if (m != 0)MessageBox.Show("插入成功!");elseMessageBox.Show("不好意思,插入不成功,请重新插入!");}connection.Close();string connString = "Data Source=(local);Initial Catalog=Factory;Integrated Security=True;";SqlConnection connection = new SqlConnection(connString);connection.Open();string id = dataGridView2.CurrentRow.Cells["人员编号"].Value.ToString();//string data = "delete from 工作人员表where 人员编号? = '" + id + "'";SqlCommand com = new SqlCommand(data, connection);int m = com.ExecuteNonQuery();if (m != 0)MessageBox.Show("删¦除成功!");elseMessageBox.Show("不好意思,删除不成功,请重新删¦除!");this.dataGridView2.Rows.Remove(this.dataGridView2.CurrentRow);//connection.Close();string connString = "Data Source=(local);Initial Catalog=Factory;Integrated Security=True;";SqlConnection connection = new SqlConnection(connString);connection.Open();string人员编号= dataGridView3.CurrentRow.Cells["人员编号"].Value.ToString();//string姓名= dataGridView3.CurrentRow.Cells["姓名"].Value.ToString();string性别= dataGridView3.CurrentRow.Cells["性别"].Value.ToString();DateTime出生日期=Convert.ToDateTime(dataGridView3.CurrentRow.Cells["出生日期"].Value.ToString().Trim());// DateTime 出生日期= Convert.ToDateTime(dataGridView3.CurrentRow.Cells["出生日期"].Value.ToString()); ////this.dataGridView3.CurrentRow.Cells["出生日期"].Value.ToString();string职务= dataGridView3.CurrentRow.Cells["职务"].Value.ToString();string data = string.Format("update 工作Á人员表set 人员编À号= '" + 人员编À号+ "',姓名= '" + 姓名+ "',性别= '" + 性别+ "',出生日期={0},职务= '" + 职务?+ "' where 人员编号= '" + 人员编号+ "'",出生日期.ToString("yyyy/MM/dd"));SqlCommand com = new SqlCommand(data, connection);int m = com.ExecuteNonQuery();if (m != 0)MessageBox.Show("更新成功!");elseMessageBox.Show("不好意思,更新不成功,请重新更新!");this.dataGridView3.Update();connection.Close();三、运行结果查询:插入:四、实验总结要求个人填写(实验中发现的问题和解决的办法)这次实验是对嵌入式SQL的综合运用,我使用的是C#语言。
SQL数据库实验报告

一、实验名称:带条件查询二、日期三、实验目的和内容(这是实验报告极其重要的内容。
)1.SQL Server工具的环境和使用;2.利用SELECT语句实现简单的查询需求;3.掌握使用逻辑操作符来抽取基于多个满足条件的记录4.掌握使用范围操作符、列表操作符、模式匹配操作符、为空操作符来抽取满足条件的记录的方法5.掌握使用ORDER BY 从句来以特定的顺序抽取数据的方法6.掌握使用TOP 关键字仅抽取行的前面集合7.掌握使用DISTINCT 关键字消除重复行四、实验过程及结果(给出实验主要的步骤和实验结果,包括算法或代码)1.SELECT EmployeeID,Rate,rank()OVER(ORDER BY Rate desc)AS RANK FROM HumanResources.EmployeePayHistory2.SELECT EmployeeID,Rate,dense_rank()OVER(ORDER BY Rate desc)AS rankFROM HumanResources.EmployeePayHistory3. SELECT Title,convert(char(10),HireDate,2)As'Hire Date'FROM HumanResources.Employee4. SELECT EmployeeID,upper(Title)AsDesignation,datediff(yy,Birthdate,getdate())As AgeFROM HumanResources.Employee WHERE Title='Marketing Manager'OR Title='Marketing Specialist'5.SELECT EmployeeID,EndDate FROM HumanResources.EmployeeDepartmentHistory WHERE EndDate IS NULL6.SELECT EmployeeID,Title,LoginID FROM HumanResources.Employee WHERE Title IN('Recruiter','Stocker')7.SELECT DISTINCT Title FROM AdventureWorks.HumanResources.Employee WHERE Title LIKE'PR%'五、实验体会(包括有疑问的)这次实验,我了解了.SQL Server工具的环境和使用,学习了使用逻辑操作符来抽取基于多个满足条件的记录.,以及使用范围操作符、列表操作符、模式匹配操作符、为空操作符来抽取满足条件的记录的方法使用ORDER BY 从句来以特定的顺序抽取数据的方法等等。
数据库-实验2-通过嵌入式SQL进行MIS系统开发

实验二通过嵌入式SQL进行MIS系统开发1、实验目的:熟悉通过高级语言连接SQL Server 数据库的过程,通过嵌入式SQL对数据库进行操作,实现简单的MIS系统2、实验环境:1)使用SQL Server数据库2)自选高级语言开发工具如Powerbuider,VC++等3)举例介绍Powerbuilder连接SQL Server ODBC数据库的过程:打开SQL Server 2008的配置管理SQL Server Configuration Manager,查看右边的服务(如:SQL Server Browser)是否启动,如果没有则手动启动。
打开Powerbuilder选择tools菜单下Database Profile选择ODB ODBC 的Utilities下的ODBC Administrator,双击后选择添加数据源,选择SQL Server Native Client配置数据源名,服务器选择local选择认证方式修改默认链接数据库添加完成后,在Database Profiles对话框中,选中ODB ODBC,右键添加New ProfileData Source选则刚刚建立的数据库源完成后,即可连接新建的ODBC数据库3、实验内容:1)MIS系统的题目和内容自选(如学生学籍管理系统,医疗档案管理系统,图书管理系统等等)。
2)至少包含4个以上的库表。
3)有交互式界面,能通过界面插入、修改和删除数据,能够实现一些简单的查询操作。
4、实验报告列出所设计的数据库表结构。
截屏给出程序界面,操作界面和操作结果其中quit为退出,而hello与SQLcall是内部测试。
点击Insert:点击Select:四个按钮分别对应选择四个表的内容:选择Update:附上主要源代码#-File: dialog_SQL.pyimport mysql.connectorimport sys, osfrom tkinter import *class MyDialog:def __init__(self, root):frame = Frame(root)self.root = rootframe.pack()# SQL related initialization #########################user = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-courtDB.dat'create_database = "CRATE DATABASE courtDB"create_table_sql1 = "\CREATE TABLE IF NOT EXISTS cases ( \case_id int AUTO_INCREMENT PRIMARY KEY, \case_describe varchar(100)) \CHARACTER SET utf8\"create_table_sql2 = "\CREATE TABLE IF NOT EXISTS lawsuits ( \lawsuit_id int AUTO_INCREMENT PRIMARY KEY, \case_id int,\judge_id int,\plaintiff varchar(20), defendant varchar(20) ) \CHARACTER SET utf8\"create_table_sql3 = "\CREATE TABLE IF NOT EXISTS judges ( \judge_id int AUTO_INCREMENT PRIMARY KEY, \name varchar(20), age int ) \CHARACTER SET utf8\"create_table_sql4 = "\CREATE TABLE IF NOT EXISTS outcomes ( \outcome_id int AUTO_INCREMENT PRIMARY KEY, \lawsuit_id int UNIQUE,\lawsuit_winner varchar(20)) \CHARACTER SET utf8\"# SQL hello function #########################self.hi_there = Button(frame, text="Hello", command=self.say_hi, activebackground = 'green',activeforeground = 'white')# SQL goodbye function #########################self.quit = Button(frame, text="Quit", fg="red", underline = 0, command=self.bye_bye, activebackground = 'green',activeforeground = 'white') # SQL test function #########################self.sql_test_call = Button(frame, text="SQL call", command=self.sql_test_call, activebackground = 'green',activeforeground = 'white') # SQL call function #########################SQL_inserter = Button(frame, text="insert", command=self.SQL_insert)SQL_selecter = Button(frame, text="select", command=self.SQL_select)SQL_updateer = Button(frame, text="update", command=self.SQL_update)# gridSQL_inserter.grid(row=0,column=1,padx=10,pady=3)SQL_selecter.grid(row=1,column=1,padx=10,pady=3)SQL_updateer.grid(row=2,column=1,padx=10,pady=3)self.quit.grid(row=0,column=2,rowspan=3,padx=10,pady=9)self.hi_there.grid(row=4,column=1)self.sql_test_call.grid(row=4,column=2)# SQL table definition test #########################sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(create_table_sql1)except mysql.connector.Error as err:print("create table 'cases' failed.")print("Error: {}".format(err.msg))sys.exit()try:cursor.execute(create_table_sql2)except mysql.connector.Error as err:print("create table 'cases' failed.")print("Error: {}".format(err.msg))sys.exit()try:cursor.execute(create_table_sql3)except mysql.connector.Error as err:print("create table 'cases' failed.")print("Error: {}".format(err.msg))sys.exit()try:cursor.execute(create_table_sql4)except mysql.connector.Error as err:print("create table 'cases' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def sql_test_call(self):# SQL related initialization #########################user = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'create_table_sql = "\CREATE TABLE IF NOT EXISTS std_test ( \id int(10) AUTO_INCREMENT PRIMARY KEY, \name varchar(20), age int(4) ) \CHARACTER SET utf8\"insert_sql = "\INSERT INTO std_test(name, age) V ALUES ('Jay', 22 ), ('杰', 26)\"select_sql = "\SELECT id, name, age FROM std_test\"# SQL related definition #########################sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()# SQL standard create #########################try:cursor.execute(create_table_sql)except mysql.connector.Error as err:print("create table 'std_test' failed.")print("Error: {}".format(err.msg))sys.exit()# SQL standard insert #########################try:cursor.execute(insert_sql)except mysql.connector.Error as err:print("insert table 'std_test' failed.")print("Error: {}".format(err.msg))sys.exit()if os.path.exists(data_file):myfile = open(data_file)lines = myfile.readlines()myfile.close()for line in lines:myset = line.split()sql = "INSERT INTO std_test (name, age) V ALUES ('{}', {})".format(myset[0], myset[1])try:cursor.execute(sql)except mysql.connector.Error as err:print("insert table 'std_test' from file 'mysql-test.dat' --failed.")print("Error: {}".format(err.msg))sys.exit()# SQL standard select #########################try:cursor.execute(select_sql)for (id, name, age) in cursor:print("ID:{} Name:{} Age:{}".format(id, name, age)) except mysql.connector.Error as err:print("query table 'mytable' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_insert(self):# topwindow1 #########################top = self.top = Toplevel(root)self.insert_table = Entry(top)self.insert_attri = Entry(top)self.insert_value = Entry(top)self.insert_op = Button(top, text="INSERT",command=lambda:self.SQL_insert_operate(TAB=self.insert_table.ge t(),ATR=self.insert_attri.get(),V AL=self.insert_value.get()), activebackground = 'green',activeforeground = 'white')Label(top, text="insert").grid(row = 0,column=2)Label(top, text="TABLE ").grid(row=1,column=1)Label(top, text="ATTRIBUTE").grid(row=1,column=2)Label(top, text="V ALUE ").grid(row=1,column=3)self.insert_table.grid(row=2,column=1)self.insert_attri.grid(row=2,column=2)self.insert_value.grid(row=2,column=3)self.insert_op.grid(row=3,column=3)# Entry #########################def SQL_insert_operate(self,TAB,ATR,V AL):print(TAB,ATR,V AL)# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'insert_sql = "INSERT INTO "+TAB+"("+ATR+") V ALUES ("+V AL+")"print(insert_sql);sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(insert_sql)except mysql.connector.Error as err:print("insert table "+TAB+" failed.")print("Error: {}".format(err.msg))sys.exit()if os.path.exists(data_file):myfile = open(data_file)lines = myfile.readlines()myfile.close()for line in lines:myset = line.split()sql = "INSERT INTO "+TAB+" ("+ATR+") V ALUES ('{}',{})".format(myset[0], myset[1])try:cursor.execute(sql)except mysql.connector.Error as err:print("insert table "+TAB+" from file 'mysql-test.dat' -- failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_select(self):# topwindow1 #########################top = self.top = Toplevel(root)self.select_cases = Button(top,text="CASES",command=self.SQL_select_cases,activebackground = 'green',activeforeground = 'white')self.select_lawsuits = Button(top,text="LAWSUITS",command=self.SQL_select_lawsuits,activebackgroun d = 'green',activeforeground = 'white')self.select_judges = Button(top,text="JUDGES",command=self.SQL_select_judges,activebackground = 'green',activeforeground = 'white')self.select_outcome = Button(top,text="OUTCOMES",command=self.SQL_select_outcomes,activebackgro und = 'green',activeforeground = 'white')self.select_cases.pack(padx=10,pady=5)self.select_lawsuits.pack(padx=10,pady=5)self.select_judges.pack(padx=10,pady=5)self.select_outcome.pack(padx=10,pady=5)# Entry #########################def SQL_select_cases(self):# topwindow1 #########################top = self.top = Toplevel(root)self.S_C_ID = Entry(top)Label(top, text="ID of the Case").pack()self.S_C_ID.pack(padx=20,pady=40)self.select_cases_op = Button(top, text="SELECT FROM CASES",command=lambda:self.SQL_S_C_op(ID=self.S_C_ID.get()), activebackground = 'green',activeforeground = 'white').pack()def SQL_S_C_op(self,ID):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT case_id, case_describe FROM cases WHERE case_id = "+str(ID)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (id, describe) in cursor:print("ID:{}\ndescribe:{}".format(id, describe))except mysql.connector.Error as err:print("query table 'cases' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_select_lawsuits(self):# topwindow1 #########################top = self.top = Toplevel(root)# case_idself.S_L_CID = Entry(top)Label(top, text="ID of the Case").grid(row=0,column=1)self.S_L_CID.grid(row=1,column=1)self.select_lawsuits_op = Button(top, text="SELECT",command=lambda:self.SQL_S_L_CID(CID=self.S_L_CID.get()), activebackground = 'green',activeforeground = 'white').grid(row=2,column=1) # lawsuit_idself.S_L_LID = Entry(top)Label(top, text="ID of the Lawsuit").grid(row=0,column=2)self.S_L_LID.grid(row=1,column=2)self.select_lawsuits_op = Button(top, text="SELECT",command=lambda:self.SQL_S_L_LID(LID=self.S_L_LID.get()), activebackground = 'green',activeforeground = 'white').grid(row=2,column=2) def SQL_S_L_CID(self,CID):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT * FROM lawsuits WHERE case_id = "+str(CID)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (lawsuit_id,case_id,judge_id,plaintiff,defendant) in cursor:print("Lawsuit_ID:{} Case_ID:{} Judge_ID:{} plaintiff:{} defendant:{}".format(lawsuit_id,case_id,judge_id,plaintiff,defendant))except mysql.connector.Error as err:print("query table 'lawsuit' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_S_L_LID(self,LID):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT * FROM lawsuits WHERE lawsuit_id ="+str(LID)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (lawsuit_id,case_id,judge_id,plaintiff,defendant) in cursor:print("Lawsuit_ID:{} Case_ID:{} Judge_ID:{} plaintiff:{} defendant:{}".format(lawsuit_id,case_id,judge_id,plaintiff,defendant))except mysql.connector.Error as err:print("query table 'lawsuit' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_select_judges(self):# topwindow1 #########################top = self.top = Toplevel(root)# judge_idself.S_J_JID = Entry(top)Label(top, text="ID of the Judge").grid(row=0,column=1)self.S_J_JID.grid(row=1,column=1)self.select_judges_CID = Button(top, text="SELECT",command=lambda:self.SQL_S_J_JID(JID=self.S_J_JID.get()), activebackground = 'green',activeforeground = 'white').grid(row=2,column=1) # ageself.S_J_AGE = Entry(top)Label(top, text="Age of the Judge").grid(row=0,column=2)self.S_J_AGE.grid(row=1,column=2)self.select_judges_op = Button(top, text="SELECT",command=lambda:self.SQL_S_J_AGE(AGE=self.S_J_AGE.get()), activebackground = 'green',activeforeground = 'white').grid(row=2,column=2) def SQL_S_J_JID(self,JID):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT * FROM judges WHERE judge_id = "+str(JID)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (judge_id,name,age) in cursor:print("Judge ID:{} name:{},age:{}".format(judge_id,name,age)) except mysql.connector.Error as err:print("query table 'judges' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_S_J_AGE(self,AGE):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT * FROM judges WHERE age = "+str(AGE)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (judge_id,name,age) in cursor:print("Judge ID:{} name:{},age:{}".format(judge_id,name,age)) except mysql.connector.Error as err:print("query table 'judges' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_select_outcomes(self):# topwindow1 #########################top = self.top = Toplevel(root)# case_idself.S_O_OID = Entry(top)Label(top, text="ID of the Outcome").grid(row=0,column=1)self.S_O_OID.grid(row=1,column=1)self.select_outcome_OID = Button(top, text="SELECT",command=lambda:self.SQL_S_O_OID(OID=self.S_O_OID.get()), activebackground = 'green',activeforeground = 'white').grid(row=2,column=1) # lawsuit_idself.S_O_LID = Entry(top)Label(top, text="ID of the Lawsuit").grid(row=0,column=2)self.S_O_LID.grid(row=1,column=2)self.select_outcome_LID = Button(top, text="SELECT",command=lambda:self.SQL_S_O_LID(LID=self.S_O_LID.get()), activebackground = 'green',activeforeground = 'white').grid(row=2,column=2) def SQL_S_O_OID(self,OID):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT outcome_id, lawsuit_id, lawsuit_winner FROM outcomes WHERE outcome_id = "+str(OID)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (outcome_id,lawsuit_id,lawsuit_winner) in cursor:print("outcome_ID:{} Lawsuit_ID:{} lawsuit_winner:{}".format(outcome_id,lawsuit_id,lawsuit_winner))except mysql.connector.Error as err:print("query table 'outcome' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_S_O_LID(self,LID):# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'# Entry #########################select_sql = "\SELECT outcome_id, lawsuit_id, lawsuit_winner FROM outcomes WHERE lawsuit_id = "+str(LID)+"\"sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(select_sql)for (outcome_id,lawsuit_id,lawsuit_winner) in cursor:print("outcome_ID:{} Lawsuit_ID:{} lawsuit_winner:{}".format(outcome_id,lawsuit_id,lawsuit_winner))except mysql.connector.Error as err:print("query table 'outcome' failed.")print("Error: {}".format(err.msg))sys.exit()sql_mit()cursor.close()sql_cnx.close()def SQL_update(self):# topwindow1 #########################top = self.top = Toplevel(root)self.update_table = Entry(top)self.update_set_attri = Entry(top)self.update_set_value = Entry(top)self.update_lim_attri = Entry(top)self.update_lim_value = Entry(top)self.update_op = Button(top, text="UPDATE",command=lambda:self.SQL_update_operate(TAB=self.update_table .get(),SET_ATR=self.update_set_attri.get(),SET_V AL=self.update_set_value.get(),LI M_ATR=self.update_lim_attri.get(),LIM_V AL=self.update_lim_value.get()), activebackground = 'green',activeforeground = 'white')Label(top, text="update").grid(row = 0,column=2)Label(top, text="TABLE ").grid(row=1,column=1)Label(top, text="UPDATE ATTRIBUTE").grid(row=1,column=2)Label(top, text="UPDATE V ALUE ").grid(row=1,column=3)Label(top, text="LIMIT ATTRIBUTE").grid(row=1,column=4)Label(top, text="LIMIT V ALUE ").grid(row=1,column=5)self.update_table.grid(row=2,column=1)self.update_set_attri.grid(row=2,column=2)self.update_set_value.grid(row=2,column=3)self.update_lim_attri.grid(row=2,column=4)self.update_lim_value.grid(row=2,column=5)self.update_op.grid(row=3,column=5)# Entry #########################def SQL_update_operate(self,TAB,SET_ATR,SET_V AL,LIM_ATR,LIM_V AL): print(TAB,SET_ATR,SET_V AL,LIM_ATR,LIM_V AL)# SQL related argumentuser = 'root'pwd = 'harbin141421'host = '127.0.0.1'db = 'courtDB'data_file = 'mysql-court.dat'update_sql = "UPDATE "+TAB+" SET "+SET_ATR+"="+str(SET_V AL)+" WHERE "+LIM_ATR+"="+str(LIM_V AL);print(update_sql);sql_cnx = mysql.connector.connect(user=user, password=pwd, host=host, database=db)cursor = sql_cnx.cursor()try:cursor.execute(update_sql)except mysql.connector.Error as err:print("update table "+TAB+" failed.")print("Error: {}".format(err.msg))# sys.exit()if os.path.exists(data_file):myfile = open(data_file)lines = myfile.readlines()myfile.close()for line in lines:myset = line.split()sql = "INSERT INTO "+TAB+" ("+SET_ATR+") V ALUES ('{}',{})".format(myset[0], myset[1])try:cursor.execute(sql)except mysql.connector.Error as err:print("insert table "+TAB+" from file 'mysql-test.dat' -- failed.")print("Error: {}".format(err.msg))# sys.exit()sql_mit()cursor.close()sql_cnx.close()def say_hi(self):print("hi there, everyone!")def bye_bye(self):print ("see you sir")self.root.destroy()root = Tk()root.update()d = MyDialog(root)root.mainloop()####################。
嵌入式系统技术报告(题目 SQLite数据库的概述和使用)

合肥学院嵌入式系统设计课程技术报告(2014- 2015第2学期)报告题目:SQLite数据库概述和使用专业:自动化班级:级自动化卓越班姓名:指导老师:干开峰摘要自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。
正与数据库管理系统非常关键一样,它们也变的非常庞大,并占用相当多的系统资源。
嵌入式数据库直接在应用程序进程中运行,提供了零配置运行模式,并且资源占用非常少。
作为一个开源的嵌入式数据库产品,SQLite具有系统开销小,检索效率高的特性,嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。
更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。
嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式, 而后者是引擎响应式。
嵌入式数据库的一个很重要的特点是体积非常小,同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。
SQLite 是D·理查德·希普开发出来的用一个小型C库实现的一种强有力的嵌入式关系数据库管理体制。
SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库。
关键词:SQLite;嵌入式;数据库目录1 SQLite简介 (1)2 SQLite工作原理 (1)3 SQLite的功能特性 (2)4 SQLite的结构 (2)5 SQLite的使用 (4)5.1 SQLite里面的一些基本的操作: (4)5.2 SQLite的一些类的使用及说明: (5)5.3 SQLite嵌入式数据库使用注意: (10)6 总结 (11)1 SQLite简介SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
黄冈师范学院提高型实验报告实验课题嵌入式SQL访问数据库(实验类型:□综合性■设计性□应用性)实验课程数据库系统概论实验时间2012年5月25日学生姓名邵旭东专业班级信息1001班学号201021240106一、实验目的和要求1. 编写嵌入式C程序,编程实现了对“学生课程数据库”的访问和对Student表中年龄进行更新。
2. 安装SQL Server2000和Visual C++程序。
3、将一段连续的SQL操作写成嵌入到C程序中的程序,调试程序,使得程序能完成一项复杂的数据处理功能,并提交程序。
二、实验条件R429三星笔记本电脑一台。
三、实验原理分析四、实验方案或步骤1.初始化编译环境将SQL安装光盘内的DEVTOOLS文件夹复制到SQL的安装目录下(!!默认下为C:\Program Files\Microsoft SQL Server\),执行.\DEVTOOLS\SAMPLES\ESQLC\目录中的UNZIP_ESQLC.EXE文件(!!点击finish,默认解压到当前目录下!!),解压预编译必要的头文件和库文件,然后运行解压出来的批处理文件setenv.bat初始化SQL预编译环境(这项操作实际上设置两个环境变量)。
接下来添加SQL预编译接口,将安装光盘中X86\BINN中的nsqlprep.exe,sqlaiw32.dll,sqlakw.32.dll复制到SQL安装目录(!!默认下为C:\Program Files\Microsoft SQL Server\)中的\MSSQL\Binn\(注:\MSSQL\Binn\改为:\MSSQL\Binn;)目录下,并将C:\Program Files\Microsoft SQL Server\MSSQL\Binn添加到环境变量中(方法是:右击我的电脑,点击我的电脑属性,点击高级,点击环境变量,点击path ,粘贴在‘;’号后)。
SQL设置完了,现在开始设置VC编译环境。
进入VC安装目录(默认为C:\Program Files\Microsoft Visual Studio\),运行VC98\Bin目录中的批处理文件VCVARS32.BAT。
运行VC,添加二次编译ESQL程序的头文件和库文件:(1).工具->选项->目录->在Include files中添加SQL安装目录\devtools\include\ (默认为: C:\Program Files\Microsoft SQL Server\devtools\include)将SQL server自带的用于数据库开发的头文件包含到工程环境中。
(2).工具->选项->目录->在Lib files中添加SQL安装目录\devtools\x861ib\(默认为: C:\Program Files\Microsoft SQL Server\devtools\x86lib)将开发用到的包包含到工程中。
2.ESQL程序代码的编写与调试#include<stdio.h>#include<stdlib.h>EXEC SQL BEGIN DECLARE SECTION;char deptname[20];char HSno[9];char HSname[20];char HSsex[4];int HSage;int NEWAGE;EXEC SQL END DECLARE SECTION;long SQLCODE;EXEC SQL INCLUDE sqlca;int main(){int count=0;char yn;printf("请输入您要更新的系名(Sdept):");scanf("%s",&deptname);EXEC SQL CONNECT TO X6X8-20120111LP.sxd USER sa.123456;EXEC SQL DECLARE SX CURSOR FORSELECT Sno,Sname,Ssex,SageFROM StudentWHERE Sdept=:deptname;EXEC SQL OPEN SX;for(;;){EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage;if(sqlca->sqlcode==0)break;if(count++==0)printf("\n%-10s%-20s%-10s%-10s\n","Sno","Sname","Ssex","Sage");}printf("%-10s%-20s%-10s%-10d\n",HSno,HSname,HSsex,HSage);printf("是否修改年龄?(y/n)");do{scanf("%c",&yn);}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y');if(yn=='y'||yn=='Y'){printf("输入新的年龄:");scanf("%d",&NEWAGE);EXEC SQL UPDATE StudentSET Sage=:NEWAGEWHERE CURRENT OF SX;}else{printf("是否退出程序?(Y/N)");do{scanf("%c",&yn);}while(yn!='n'&&yn!='N'&&yn!='Y'&&yn!='y');if(yn=='y'||yn=='Y'){break;}}EXEC SQL CLOSE SX;EXEC SQL COMMIT WORK;EXEC SQL DISCONNECT ALL;}将该程序保存为sql.sqc保存在D盘。
3.建立数据库,数据的录入。
如上图建立数据库“sxd”在该数据库中建立表“student”,录入数据如上图。
同时必须打开了SQL server 身份验证模式。
并设置密码,设置密码的操作步骤如下:运行企业管理器,展开你要连接的服务器,再展开安全性目录,点击登录,在右边窗口用鼠标右击sa,单击属性,在密码一栏输入新密码,单击确定后再输入一次新密码,sa的密码就修改成功了。
在这里我所设置的密码为“123456”。
这时在“sql.sqc”中将“服务器名.数据库名 USER 登录名. 密码;”改为“X6X8-20120111LP.sxd USER sa.123456;”并保存。
4.进行ESQL程序的预编译打开命令提示符(cmd)。
进入VC安装目录(默认为C:\Program Files\Microsoft Visual Studio\),将VC98\Bin目录中的批处理文件VCVARS32.BAT拖入cmd窗口中运行。
然后再键入: “ nsqlprep程序保存路径\sql.sqc \SQLACCESS \DB 服务器名.数据库名 \PASS 登录名.密码”。
在这里我输入“nsqlprep D:\sql.sqc \SQLACCESS \DB X6X8-20120111LP.sxd \PASS sa.123456”。
完成预编译后则会在原sql.sqc文件存储位置处生成同名C文件即sql.c。
然后即可进行下一步C编译。
5.进行C编译运行VC++6.0,新建一个"WIN32 Console Application"(!!注意是"WIN32 Console Application"不要选成了"WIN32 Application"!!)的工程,然后将预编译生成的c文件加入工程。
此时还不能编译成功,需添加两个库文件SQLakw32.lib,Caw32.lib。
操作过程:(1). 文件->新建->工程->WIN32 Console Application->输入工程名->确定(2). 工程->设置->连接->在对象/库模块中输入SQLakw32.lib Caw32.lib (!!两个之间用空格分开!!)完成上述操作后, 就可以开始编译、连接及运行了。
运行好后在窗口出现如下:输入“CS”。
出现如下:然后修改年龄如下:如此完成了实验数据的修改。
五、实验结果此时数据库中的数据如下图:李勇的年龄已由23改为25;刘晨的年龄已由21改为23。
到此,实验完成!六、讨论在此次实验中我遇到了很多困难:在“cmd”窗口中输入“nsqlprep D:\sql.sqc \SQLACCESS \DB X6X8-20120111LP.sxd \PASS sa.123456”时若出现“nsqlprep不是内部或外部命令,也不是可运行的程序或批处理文件”则表示在设置环境变量时出错,需重新设置环境变量;若出现“Source file must have .SQC extension”则表示在输入“nsqlprep D:\sql.sqc \SQLACCESS \DB X6X8-20120111LP.sxd \PASS sa.123456”时在每段字符中间没有用空格间隔。
则重新输入,且每段字符用空格隔开即可。
另外注意:打开“cmd”后要先将VC98\Bin目录中的批处理文件VCV ARS32.BAT 拖入cmd窗口中运行。
在修改数据库密码的时候,要注意切换下面的数据库为自己建立的数据库,这里我建立的是“sxd”,因此要切换成“sxd”。
若在VC运行后窗口中只出现列项而没有数据显示,则是数据库密码前后不一致,则重新在cmd窗口输入生成新的预编译代码。
在做此次试验以前,由于数据课上,并没有学习环境变量的设置,数据库密码的修改等等。
所以,课后花了很多时间去上网学习,搜索视频教程。
过程是痛苦的,将书一遍遍的读,起初老是弄不明白代码的意思,也不懂书上的程序到底是怎样连接上数据库的,在接二连三的碰壁之后,终于有点儿理解了。
此次实验虽然有很多不足之处,但实现了实验的要求,相信在以后学习SQL的路上,会越走越远。