《数据库系统概论》实验7报告

这篇具有很好参考价值的文章主要介绍了《数据库系统概论》实验7报告。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

《数据库系统概论》实验报告

实验题目:通过ODBC方式访问数据库

实验环境:Windows 10、MySQL、SQL Server

实验步骤

一、MySQL数据源配置

1、安装MySQL的ODBC驱动安装包

https://dev.mysql.com/downloads/connector/odbc/,选择32位的8.0.21的msi版本,进行安装

2、添加驱动程序

打开控制面板——系统和安全——管理工具——ODBC数据源(32位),在用户DSN中添加MySQL ODBC 8.0 ANSI Driver

《数据库系统概论》实验7报告

3、配置数据源

分别配置数据源名字、数据源描述(这个随意)、TCP/IP Server(设为本机)、端口、用户名、密码和数据库名,点击Test,如果成功则点击OK

《数据库系统概论》实验7报告

4、注

如果出现了下面的情况,则需要在管理员模式下的命令提示符中使用语句net start 数据库名将数据库启动

《数据库系统概论》实验7报告

二、SQL Server数据源配置

1、下载并安装SQL Server

在官网下载SSMS-Setup-CHS.exeSQL2019-SSEI-Dev.exe根据网上教程进行各种配置

双击SQL2019-SSEI-Dev.exe并根据网上教程进行各种配置(jdk使用了原来的版本,图为IDEA的Project Structure中的设置)

《数据库系统概论》实验7报告

使用管理员模式运行SSMS-Setup-CHS.exe,然后不断下一步,最后重启即可完成安装

2、设置账户sa

打开Microsoft SQL Server Management Studio,在左侧的安全性——登录名中找到账户sa

《数据库系统概论》实验7报告

右键sa,进入属性,配置好密码,服务器角色勾选上sysadmin

《数据库系统概论》实验7报告

《数据库系统概论》实验7报告

3、配置服务器连接

如图所示,配置服务器连接(我一开始用的是Windows身份认证,遇到了各种连不上的问题)

《数据库系统概论》实验7报告

4、新建查询

在db_lab7_server数据库下创建一个course表

《数据库系统概论》实验7报告

5、添加驱动程序并配置数据源

像MySQL部分一样,打开 ODBC数据源(32位),在用户DSN中添加ODBC Driver 17 for SQL Server并进行数据库相关信息的配置

《数据库系统概论》实验7报告

《数据库系统概论》实验7报告

《数据库系统概论》实验7报告

三、代码部分

1、适用于MySQL的代码

#include <windows.h>
#include <iostream>
#include <assert.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;
int main(){
    SQLHENV serverhenv;
    SQLHDBC serverhdbc;
    SQLHSTMT serverhstmt;
    SQLRETURN ret;
    SQLCHAR sno[20]={0},sex[20]={0},sname[20]={0},dept[20]={0},classno[20]={0},bdate[30]={0},cno[20]={0},cname[20]={0},semester[10]={10};
    SQLINTEGER grade=0,length;

    //分配环境句柄
    ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);

    //设置环境属性
    ret = SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
    if(!SQL_SUCCEEDED(ret))
    {
        cout<<"AllocEnvHandle error!"<<endl;
        system("pause");
    }

    //分配连接句柄
    ret = SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);
    if(!SQL_SUCCEEDED(ret))
    {
        cout<<"AllocDbcHandle error!"<<endl;
        system("pause");
    }

    //MySQL连接
    ret = SQLConnect(serverhdbc,(SQLCHAR*)"数据库名",SQL_NTS,(SQLCHAR*)"数据库用户名",SQL_NTS,(SQLCHAR*)"数据库密码",SQL_NTS);
    if(!SQL_SUCCEEDED(ret))
    //if(!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO))
    {
        cout<<"SQL_Connect error!"<<endl;
        system("pause");
    }

    //分配执行语句句柄
    ret = SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);

    //执行SQL语句
    ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"insert into course values('C01','数据库概论',01,6,'秋');",SQL_NTS);
    ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"select cno,cname,semester from course",SQL_NTS);
    if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO){
        //绑定数据
        SQLBindCol(serverhstmt,1, SQL_C_CHAR, (void*)cno,sizeof(cno), &length);
        SQLBindCol(serverhstmt,2, SQL_C_CHAR, (void*)cname,sizeof(cname), &length);
        SQLBindCol(serverhstmt,3, SQL_C_CHAR, (void*)semester,sizeof(semester), &length);
        //将光标移动到下行,即获得下行数据
        while(SQL_NO_DATA != SQLFetch(serverhstmt))
        {
            cout<<"cno:"<<cno<<" cname:"<<cname<<" semester:"<<semester;
            cout<<endl;
        }
    }

    //释放语句句柄
    ret=SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);
    if(SQL_SUCCESS!=ret && SQL_SUCCESS_WITH_INFO != ret)
        cout<<"free hstmt error!"<<endl;

    //断开数据库连接
    ret=SQLDisconnect(serverhdbc);
    if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
        cout<<"disconnected error!"<<endl;

    //释放连接句柄
    ret=SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
    if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
        cout<<"free hdbc error!"<<endl;

    //释放环境句柄句柄
    ret=SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
    if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
        cout<<"free henv error!"<<endl;
    system("pause");
}

2、适用于SQL Server的代码

#include <windows.h>
#include <iostream>
#include <assert.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;
int main(){
    SQLHENV serverhenv;
    SQLHDBC serverhdbc;
    SQLHSTMT serverhstmt;
    SQLRETURN ret;
    SQLCHAR sno[20]={0},sex[20]={0},sname[20]={0},dept[20]={0},classno[20]={0},bdate[30]={0},cno[20]={0},cname[20]={0},semester[10]={10};
    SQLINTEGER grade=0,length;

    //分配环境句柄
    ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);

    //设置环境属性
    ret = SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
    if(!SQL_SUCCEEDED(ret))
    {
        cout<<"AllocEnvHandle error!"<<endl;
        system("pause");
    }

    //分配连接句柄
    ret = SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);
    if(!SQL_SUCCEEDED(ret))
    {
        cout<<"AllocDbcHandle error!"<<endl;
        system("pause");
    }

    //SQL Server连接
    ret = SQLConnect(serverhdbc,(SQLCHAR*)"数据库名",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"数据库密码",SQL_NTS);
    if(!SQL_SUCCEEDED(ret))
    //if(!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO))
    {
        cout<<"SQL_Connect error!"<<endl;
        system("pause");
    }

    //分配执行语句句柄
    ret = SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);

    //执行SQL语句
    ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"use db_lab7_server;",SQL_NTS);
    ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"insert into course values('C01','数据库概论',01,6,'秋');",SQL_NTS);
    ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"select cno,cname,semester from course",SQL_NTS);
    if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO){
        //绑定数据
        SQLBindCol(serverhstmt,1, SQL_C_CHAR, (void*)cno,sizeof(cno), &length);
        SQLBindCol(serverhstmt,2, SQL_C_CHAR, (void*)cname,sizeof(cname), &length);
        SQLBindCol(serverhstmt,3, SQL_C_CHAR, (void*)semester,sizeof(semester), &length);
        //将光标移动到下行,即获得下行数据
        while(SQL_NO_DATA != SQLFetch(serverhstmt))
        {
            cout<<"cno:"<<cno<<" cname:"<<cname<<" semester:"<<semester;
            cout<<endl;
        }
    }

    //释放语句句柄
    ret=SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);
    if(SQL_SUCCESS!=ret && SQL_SUCCESS_WITH_INFO != ret)
        cout<<"free hstmt error!"<<endl;

    //断开数据库连接
    ret=SQLDisconnect(serverhdbc);
    if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
        cout<<"disconnected error!"<<endl;

    //释放连接句柄
    ret=SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
    if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
        cout<<"free hdbc error!"<<endl;

    //释放环境句柄句柄
    ret=SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
    if(SQL_SUCCESS!=ret&&SQL_SUCCESS_WITH_INFO!=ret)
        cout<<"free henv error!"<<endl;
    system("pause");
}

四、运行结果

​ 代码其实就是执行如下指令

insert into course values('C01','数据库概论',01,6,'秋');
1、mysql部分
1)Codeblocks运行结果

《数据库系统概论》实验7报告

2)数据库结果

《数据库系统概论》实验7报告

2、SQL Server部分
1)Codeblocks运行结果

《数据库系统概论》实验7报告

2)数据库结果

《数据库系统概论》实验7报告

《数据库系统概论》实验7报告

五、遇到的问题

一)32位而非64位

​问题:下载了MySQL的64位的8.0.29版本的驱动程序,配置完成后却连接不到数据源

​解决:查询网上资料,发现Codeblocks是32位的,需要对应的32位程序才能正常运行,所以下载MySQL的32位的8.0.29版本的驱动程序

二)8.0.21而非8.0.29

​问题:安装了MySQL的32位的8.0.29版本的驱动程序,创建新数据源里却看不到相关的选项

​解决:由于中途曾经配过Ubuntu中的数据源,发现8.0.29版本的驱动程序经常出问题,所以改成8.0.21版本的驱动程序

三)无法连接数据源

​问题:按照教程配置好数据源,代码却显示连接不到数据源

​解决:在同学的帮助下,发现代码的蓝框部分应当填写数据源的名称(原先填的是数据库名称)

《数据库系统概论》实验7报告

四)添加use语句

​问题:对于SQL Server,发现始终无法进入这个if语句之中

《数据库系统概论》实验7报告

​解决:回看MySQL的配置步骤,发现数据源中已经写好了连接的数据库名称,但是SQL Server并没有写明,这就导致了insert语句和select语句执行时并没有进入对应数据库,因此需要加入一条use语句进入数据库(即图中注释部分)

五)Ubuntu下安装部分

​ Ubuntu下的安装,起始于Windows下安装失败,决定转战Ubuntu,使用Postgresql和MySQL完成实验,但在配完了MySQL的数据源后,发现代码部分基本都有include <windows.h>,寻找良久,没有好的解决方案,于是重回Windows,下面是Ubuntu下的安装过程记录:

1、使用下面语句下载unixodbc及相关软件包
sudo apt-get install unixodbc
sudo apt-get install unixodbc unixodbc-dev
2、手动下载unixODBC

《数据库系统概论》实验7报告

1)解压缩

tar xvf unixODBC-2.3.9.tar.gz

2)进入文件夹

cd unixODBC-2.3.9

3)编译

./configure
make
make install

4)测试安装结果(安装成功则显示版本号和驱动地址)

odbcinst -j

《数据库系统概论》实验7报告

3、使用下面语句安装数据库
sudo apt-get install mysql-server mysql-client
4、手动安装驱动程序mysql_odbc_connector

1)刚开始下载最新版的8.0.29

《数据库系统概论》实验7报告

2)不知道啥原因,我用8.0.29会报错

《数据库系统概论》实验7报告

3)点击上图中的Archives,将驱动程序的版本换成8.0.21

《数据库系统概论》实验7报告

《数据库系统概论》实验7报告

5、配置驱动程序

1)使用下面语句打开相关文件(即测试安装结果中的DRIVERS)

sudo gedit /etc/odbcinst.ini

2)内容如下(我这里自动配好的)

[MySQL ODBC 8.0 Unicode Driver]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so
UsageCount=1

[MySQL ODBC 8.0 ANSI Driver]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8a.so
UsageCount=1
6、配置数据源

1)使用下面语句打开相关文件(即测试安装结果中的SYSTEM DATA SOURCES)

sudo gedit /etc/odbc.ini

2)内容如下

[MYSQL]
Driver = MySQL ODBC 8.0 ANSI Driver
Description = connection to MYSQL
Server = 127.0.0.1
Host = 127.0.0.1
Port = 3306
Database = mysql
CHARSET = UTF8
User = root
Password = 123456
SSLMODE = DISABLED
7、尝试连接数据库

发现无法连接,错误如下:

《数据库系统概论》实验7报告

尝试使用mysql -u root -p进行连接,发现也无法连接,想起数据库刚安装,没有设置root用户的密码

8、设置MySQL的root用户的密码

1)使用下面指令查找数据库设置的随机账户和密码

sudo gedit /etc/mysql/debian.cnf

2)使用随机账户debian-sys-maint登录MySQL(密码随机生成,不要修改)

mysql -u debian-sys-maint -p

3)使用下面的SQL语句修改root用户的密码

use mysql;
update user set authentication_string='' where user='root';
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
9、再次尝试连接

​ 成功!

《数据库系统概论》实验7报告文章来源地址https://www.toymoban.com/news/detail-470752.html

到了这里,关于《数据库系统概论》实验7报告的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库原理实验报告

    这门课是大二学年数据库原理这门必修理论课中需要写报告的部分,要求学会使用sql语句,之前忘发了,今天想起来上传一下。 当时是和室友一起讨论着写完的,因为其中有几个问题实现起来还是比较复杂的,我推荐大家不要闷头自己写,否则万一写错了也不知道。但也不是

    2024年02月09日
    浏览(46)
  • 数据库实验报告

    实验报告一 数据库工具使用及数据库的创建与管理 实验目的 希望学生通过上机操作了解并掌握SQL Server 各组件的主要功能以及查询编译器是如何使用的 了解数据库及数据库对象 了解数据库的结构并熟练掌握使用SQL Server 管理平台和SQL 语句直接创建数据库的方法 实验内容 查

    2024年02月04日
    浏览(44)
  • 数据库实验报告一

    实验要求: 创建名为 TESTDB 的数据库。 相关SQL语句如下: 实验要求: 在 TESTDB 数据库中创建教师表( teacher ),表结构如下: 字段名 数据类型(长度) 备注 tno CHAR(4) 工号 tname VARCHAR(12) 姓名 sex CHAR(3) 性别 title VARCHAR(15) 职称 birthday DATE 出生日期 相关SQL语句如下: 实验要求

    2023年04月19日
    浏览(51)
  • 数据库系统概论-00引言

    -数据库系统的发展经历了三代演变 层次/网状数据库系统,关系数据库系统,新一代数据库系统。 -造就了四位图灵奖得主 C.W.Bachman,E.F.Codd,James Gray,M.R.Stoebraker.。 -发展了一门计算机基础学科· 数据建模和DBMS核心技术为主,内容丰富,领域宽广。 -带动了一个巨大软件产业 D

    2024年01月22日
    浏览(56)
  • 数据库实验报告一-创建数据库和表

    一 ,实验目的 1、了解SQL Server数据库的操作环境; 2、了解SQL Server的基本数据类型、表的结构和空值的概念; 3、掌握在企业管理器中创建数据库和表; 4、熟练掌握使用T-SQL语句创建数据库和表; 5、熟悉主码、外码、Check约束和索引的建立和删除操作 二,实验原理 建立表,

    2023年04月13日
    浏览(48)
  • 数据库系统概论—恢复与并发

    查询处理可分为四个阶段:查询分析、检查检查、查询优选和查询执行(其中查询优化可分为代数和物理优化) 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且在于系统可以比用户程序“优化”做的更好 会将建立原始树,并能够将其转化为优

    2024年02月13日
    浏览(51)
  • 【数据库系统概论】期末复习4

    期末复习1 期末复习2 期末复习3 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 数据库的完整性是指数据的正确性和相容性。 数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数

    2024年02月02日
    浏览(56)
  • 《数据库系统概论》SQL Server 数据库导出、导入教程

    在SQL Server的使用过程中,大家难免遇到数据库表的导出、导入,从而实现用其它电脑打开数据库。 如果是使用学校实验室(机房)电脑做实验的同学,一定要掌握本技能!!! 1、右键点击数据库,“任务”,“生成脚本”,如下图 2、选择对象操作如图,“选择具体的数据

    2024年02月10日
    浏览(75)
  • 1.数据库的管理(实验报告)

    目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑命令(代码)运行结果 了解SQL Server数据库的逻辑结构和物理结构的特点; 掌握使用SQL Server管理平台对数据库进行管理的方法; 掌握使用Transact-SQL语句对数据库进行管理的方法。 操作系统:Window

    2024年02月02日
    浏览(40)
  • MySQL数据库 实验报告(一)

    实验报告(一) 1、实验目的 (1)掌握系统数据类型的特点和功能 (2)掌握创建、修改表结构的方法 (3)掌握数据添加的方法 2、实验预习与准备 (1)MYSQL中创建数据库的命令 (2)表结构的创建、修改和删除 (3)MYSQL导入导出表数据的方式 (4)添加数据的SQL命令 3、实

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包