数据库实验六-通过嵌入式SQL访问数据库

通过嵌入式SQL访问数据库

实验环境:Windows 10操作系统、MySQL 8.0、eclipse2021-09

实验内容与完成情况:

  • 实验目的

熟悉通过嵌入式SQL(主语言为Java语言)编程访问数据库。

  • 实验平台和实验工具

在MySQL数据库管理系统上,通过Java语言编写访问数据库的应用程序来对数据库进行各种数据操作。

  • 实验内容和要求

熟悉RDBMS的预编译程序,通过嵌入式SQL编程访问数据库的基本步骤。

对学生课程数据库中的表,使用Java编程完成如下任务:

(1)查询某一门课程的信息。要查询的课程由用户在程序运行过程中指定,放在主函数中。

(2)查询选修某一门课程的选课信息,要查询的课程号由用户在程序运行过程中指定,放在主函数中,然后根据用户的要求修改其中某些记录的成绩字段。

(3)完成操作后使用java语句显示数据库中表。

  • 实验步骤
  1. 在eclipse中新建一个java项目

  1. 2.完成Java编程连接数据库操作

在test6项目下新建一个JDBC包,用于数据库连接

【数据库连接】

package JDBC;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.io.*;

//连接MySQL数据库

public class JDBCcon {

    public Connection connection = null;

    public String JDBC_DRIVER = "";

    public String URL = "";

    public String USER = "";

    public String PWD = "";

   

    //读取配置文件

    public void conf() throws IOException {

            try (BufferedReader br = new BufferedReader(new FileReader( "conf.txt"))) {

                String s = br.readLine();

                JDBC_DRIVER=s.substring(s.indexOf('"')+1, s.lastIndexOf('"'));

                s = br.readLine();

                URL=s.substring(s.indexOf('"')+1, s.lastIndexOf('"'));

                s = br.readLine();

                USER=s.substring(s.indexOf('"')+1, s.lastIndexOf('"'));

                s = br.readLine();

                PWD=s.substring(s.indexOf('"')+1, s.lastIndexOf('"'));

            }

    }

   

    //连接数据库

    public void insert() {

        //导入MySQL驱动

        //1.加载驱动

        try {

            Class.forName(JDBC_DRIVER);

            //2.建立连接

            connection = DriverManager.getConnection(URL, USER, PWD);

            System.out.println("数据库连接成功!");

        }catch(ClassNotFoundException |SQLException e) {

            System.out.println(e.getLocalizedMessage());

            System.out.println("数据库连接失败!");

        }

    }

   

    //断开数据库

    public void disconnect()

    {

        try {

            connection.close();

            System.out.println("数据库关闭成功!");

        } catch (SQLException e) {

            e.printStackTrace();

            System.out.println("数据库关闭失败!");

        }

    }

}

同时注意,需要在MySQL官网下载实验需要的数据库连接文件并添加到项目环境中

 

  1. 完成SQL操作写成嵌入到Java编程中,实现对学生表的操作。

package JDBC;

import java.io.IOException;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Student_OP {

    public Statement state=null;

   

    public void set_state(JDBCcon Database) throws IOException {

        try {

             state= Database.connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //创建学生表

    public void create_student() throws IOException {

        String sql="create table student(Sno varchar(10) PRIMARY KEY,Sname varchar(10))";

        try {

            state.executeUpdate(sql);

            System.out.println("创建学生表成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //删除学生表

    public void delete_student_table() throws IOException {

        String sql="drop table student;";

        try {

            state.executeUpdate(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //添加学生

    public void add_student(String Sno,String Sname) throws IOException {

        String sql="insert into student values('"+Sno+"','"+Sname+"')";

        try {

            state.executeUpdate(sql);

            System.out.println("添加学生"+ Sname + "成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //删除学生

    public void delete_student(String Sno) throws IOException {

        String sql="delete from student where Sno='"+Sno+"'";

        try {

            state.executeUpdate(sql);

            System.out.println("删除学生"+ Sno + "成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //显示学生

    public void show_student() throws IOException, SQLException {

        System.out.println("student表数据如下:");

        System.out.println("+----------+----------+");

        System.out.println("|    Sno   |   Sname  |");

        System.out.println("+----------+----------+");

        String sql="select * from student";

        ResultSet rs=null;

        try {

            rs = state.executeQuery(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        while (true) {

            try {

                if (!rs.next())

                    break;

                String s1 = rs.getString(1);

                String s2 = rs.getString(2);

                System.out.printf("|%-10s|%-10s|\n",s1 ,s2);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        System.out.println("+----------+----------+");

        rs.close();

    }

}

  1. 完成SQL操作写成嵌入到Java编程中,实现对课程表的操作。

package JDBC;

import java.io.IOException;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Class_OP {

    public Statement state=null;

   

    public void set_state(JDBCcon Database) throws IOException {

        try {

             state= Database.connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //创建课程表

    public void create_class() throws IOException {

        String sql="create table class(Cno varchar(10) PRIMARY KEY,Cname varchar(10))";

        try {

            state.executeUpdate(sql);

            System.out.println("创建课程表成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //删除课程表

    public void delete_class_table() throws IOException {

        String sql="drop table class;";

        try {

            state.executeUpdate(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //添加课程

    public void add_class(String Cno,String Cname) throws IOException {

        String sql="insert into class values('"+Cno+"','"+Cname+"')";

        try {

            state.executeUpdate(sql);

            System.out.println("添加课程"+ Cname + "成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //删除课程

    public void delete_class(String Cno) throws IOException {

        String sql="delete from class where Cno='"+Cno+"'";

        try {

            state.executeUpdate(sql);

            System.out.println("删除课程"+ Cno + "成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //显示具体某一课程的信息

    public void show_class(String Cno) throws IOException, SQLException {

        System.out.println("查询到该课程信息如下:");

        System.out.println("+----------+--------------------+");

        System.out.println("|    Cno   |         Cname      |");

        System.out.println("+----------+--------------------+");

        String sql="select * from class where Cno='"+Cno+"'";

        ResultSet rs=null;

        try {

            rs = state.executeQuery(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        while(rs.next()) {

            System.out.printf("|%-10s|%-15s\t|\n",rs.getString("Cno"),rs.getString("Cname"));

        }

        System.out.println("+----------+--------------------+");

    }

    //显示课程表

    public void show_class() throws IOException, SQLException {

        System.out.println("class表数据如下:");

        System.out.println("+----------+--------------------+");

        System.out.println("|    Cno   |         Cname      |");

        System.out.println("+----------+--------------------+");

        String sql="select * from class";

        ResultSet rs=null;

        try {

            rs = state.executeQuery(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        while (true) {

            try {

                if (!rs.next())

                    break;

                String s1 = rs.getString(1);

                String s2 = rs.getString(2);

                System.out.printf("|%-10s|%-15s\t|\n",s1 ,s2);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        System.out.println("+----------+--------------------+");

        rs.close();

    }

}

  1. 完成SQL操作写成嵌入到Java编程中,实现对学生选课表的操作。

package JDBC;

import java.io.IOException;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class SC_op {

    public Statement state=null;

   

    public void set_state(JDBCcon Database) throws IOException {

        try {

             state= Database.connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //创建学生选课表

    public void create_SC() throws IOException {

        String sql="create table SC(Sno varchar(10),Cno varchar(10),Cscore int, PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES student(Sno),FOREIGN KEY(Cno) REFERENCES class(Cno))";

        try {

            state.executeUpdate(sql);

            System.out.println("创建学生选课表成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //删除学生选课表

    public void delete_SC_table() throws IOException {

        String sql="drop table SC;";

        try {

            state.executeUpdate(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //添加选课

    public void add_SC(String Sno,String Cno,int Cscore) throws IOException {

        String sql="insert into SC values('"+Sno+"','"+Cno+"',"+Cscore+")";

        try {

            state.executeUpdate(sql);

            System.out.println("添加选课成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //删除选课

    public void delete_SC(String Sno,String Cno) throws IOException {

        String sql="delete from SC where Sno='"+Sno+"' and Cno='"+Cno+"'";

        try {

            state.executeUpdate(sql);

            System.out.println("删除选课成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //修改这一课程学生的成绩

    public void update_SC(String Sno,String Cno,int Cscore) throws IOException {

        String sql="update SC set Cscore="+Cscore+" where Sno='"+Sno+"' and Cno='"+Cno+"'";

        try {

            state.executeUpdate(sql);

            System.out.println("修改学生"+ Sno+"成绩成功。");

        } catch (SQLException e) {

            e.printStackTrace();

        }

    }

    //显示某一课程的信息

    public void show_SC(String Cno) throws IOException, SQLException {

        System.out.println("查询到该课程信息如下:");

        System.out.println("+----------+----------+----------+");

        System.out.println("|    Sno   |    Cno   |   Cscore |");

        System.out.println("+----------+----------+----------+");

        String sql="select * from SC where Cno='"+Cno+"'";

        ResultSet rs=null;

        try {

            rs = state.executeQuery(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        while (true) {

            try {

                if (!rs.next())

                    break;

                String s1 = rs.getString(1);

                String s2 = rs.getString(2);

                int s3 = rs.getInt(3);

                System.out.printf("|%-10s|%-10s|%-10s|\n",s1 ,s2 ,s3);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        System.out.println("+----------+----------+----------+");

        rs.close();

    }

    //显示选课表

    public void show_SC() throws IOException, SQLException {

        System.out.println("SC表数据如下:");

        System.out.println("+----------+----------+----------+");

        System.out.println("|    Sno   |    Cno   |   Cscore |");

        System.out.println("+----------+----------+----------+");

        String sql="select * from SC";

        ResultSet rs=null;

        try {

            rs = state.executeQuery(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        while (true) {

            try {

                if (!rs.next())

                    break;

                String s1 = rs.getString(1);

                String s2 = rs.getString(2);

                int s3 = rs.getInt(3);

                System.out.printf("|%-10s|%-10s|%-10s|\n",s1 ,s2 ,s3);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        System.out.println("+----------+----------+----------+");

        rs.close();

    }

}

  1. 在主函数中初始化数据,并完成实验要求。

package main;

import java.io.IOException;

import java.sql.SQLException;

import java.util.Scanner;

import JDBC.*;

public class main {

    public static void main(String[] args) throws IOException, SQLException{

        //与库建立连接

        System.out.println(System.getProperty("user.dir"));

        JDBCcon Database = new JDBCcon();

        Database.conf();

        Database.insert();

        Student_OP student_op = new Student_OP();

        student_op.set_state(Database);

        Class_OP class_op = new Class_OP();

        class_op.set_state(Database);

        SC_op sc_op = new SC_op();

        sc_op.set_state(Database);

        //初始化数据库

        sc_op.delete_SC_table();

        student_op.delete_student_table();

        class_op.delete_class_table();

       

        student_op.create_student();

        student_op.add_student("1","张三");

        student_op.add_student("2","李四");

        student_op.add_student("3","王五");

        student_op.add_student("4","赵六");

        student_op.add_student("5","孙七");

       

        class_op.create_class();

        class_op.add_class("1","软件工程");

        class_op.add_class("2","计算机科学");

        class_op.add_class("3","数学");

        class_op.add_class("4","物理");

        class_op.add_class("5","化学");

       

        sc_op.create_SC();

        sc_op.add_SC("1","1",60);

        sc_op.add_SC("2","1",100);

        sc_op.add_SC("3","1",80);

        sc_op.add_SC("4","1",90);

        sc_op.add_SC("5","1",70);

        sc_op.add_SC("1","2",60);

        sc_op.add_SC("2","2",100);

        sc_op.add_SC("3","2",80);

        sc_op.add_SC("4","2",90);

        sc_op.add_SC("5","2",70);

        sc_op.add_SC("1","3",60);

        System.out.println("数据库初始化成功!");

        //第四步 输出每个表格的信息

        student_op.show_student();

        class_op.show_class();

        sc_op.show_SC();

        try (//第一步 查询某一门课程的信息

        var sc = new Scanner(System.in)) {

            System.out.println("第一步 查询某一门课程的信息\n请输入要查询的课程号:");

            String class_id=sc.nextLine();

            class_op.show_class(class_id);

            //第二步 查询选修某一门课程的选课信息

            System.out.println("第二步 查询选修某一门课程的选课信息\n请输入要查询的课程号:");

            class_id=sc.nextLine();

            sc_op.show_SC(class_id);

            //第三步 修改这一课程学生的成绩

            System.out.println("请输入要修改的学生学号:");

            String student_id=sc.nextLine();

            System.out.println("请输入要修改的成绩:");

            String s=sc.nextLine();

            int score=Integer.parseInt(s);

            sc_op.update_SC(student_id,class_id,score);

        } catch (NumberFormatException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        //第四步 输出每个表格的信息

        student_op.show_student();

        class_op.show_class();

        sc_op.show_SC();

        Database.disconnect();

    }

}

  1. 编译结果:
    • 数据库初始化结果:
    • 数据库表格显示:
    • 第一步查询某一门课程的信息:
    • 第二步 查询选修某一门课程的选课信息并修改学生成绩:
    • 再次查看所有表并关闭数据库连接:

出现的问题:

  • 问题一:

数据库连接时显示连接失败。

 

解决方案:

  • 问题一:

发现是缺少连接MySQL的驱动文件,故在官网下载驱动再加入项目环境中。

 

实验心得:

通过本次实验,了解掌握了如何使用编程方法对数据库进行操作的技术。

嵌入式SQL把SQL语句嵌入到某种高级语言中,SQL语句用来存取数据库中的数据,主语言用来控制程序流程以及对取出的数据做进一步加工处理,利用高级语言的强大计算能力来实现复杂应用的需求。

同时,通过本次实验,对Java编程能力和SQL语句编写能力都有所提高。
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第六章 嵌入式SQL(E-SQL)简介 3 第一节 什么是嵌入SQL语言? 3 1.1 嵌入SQL程序的组成元素 3 1.2 什么是静态SQL和动态SQL? 4 1.3 什么是SQLCA? 4 1.4 什么是SQLDA? 5 第二节 SYBASE SQL SERVER嵌入式SQL语言 5 2.1 一个嵌入SQL语言的简单例子 5 2.2 嵌入SQL的处理过程 6 2.3 嵌入SQL语句总览 7 2.3.1 宿主变量 7 2.3.2 连接数据库 12 2.3.3 数据的查询和修改 13 2.3.4 游标的使用 13 2.3.5 SQLCA 15 2.3.6 WHENEVER 16 2.3.7 批处理 18 2.3.8 事务 18 2.4动态SQL语句 18 2.4 .1 动态修改 19 2.4.2 动态游标 20 2.4.3 SQLDA 23 2.4.4 DESCRIBE语句 27 2.5 两个例子程序 27 2.5.1 TELECOM程序 27 2.5.2 ADHOC程序 29 第三节 IBM DB2嵌入SQL语言 35 3.1 一个简单示例 35 3.2 嵌入SQL语句 37 3.2.1宿主变量 37 3.2.2单行查询 39 3.2.3多行查询 39 3.2.4插入、删除和修改操作 40 3.2.5 SQLCA 43 3.2.6事务 45 3.3 DB2的嵌入SQL程序处理过程 46 3.4 DB2的动态SQL嵌入语句 53 3.4.1 基本方法 53 3.4.2 动态游标 55 3.4.3 SQLDA 55 第四节 ORACLE数据库的嵌入SQL语言 66 4.1 基本的SQL语句 66 4.1.1宿主变量和指示符 66 4.1.2 查询 68 4.1.3 修改数据 68 4.1.4 游标 68 4.2 嵌入PL/SQL 71 4.3 动态SQL语句 72 4.3.1 ORACLE动态SQL语句的一些特点 72 4.3.2 使用动态SQL的四种方法 72 4.3.3 SQLDA 75 第五节INFORMIX的嵌入SQL/C语言 89 5.1 一个简单的入门例子 89 5.2 宿主变量 91 5.3 嵌入SQL的处理过程 96 5.4 动态SQL语言 96 5.4.1 SQLDA 97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言 105 6.1 一个嵌入SQL语言的简单例子 105 6.2 嵌入SQL的处理过程 106 6.3 嵌入SQL语句 112 6.3.1 声明嵌入SQL语句使用的C变量 112 6.3.2 连接数据库 115 6.3.3 数据的查询和修改 115 6.3.4 游标的使用 116 6.3.5 SQLCA 117 6.3.6 WHENEVER 118 6.4动态SQL语句 119 6.4 .1 动态修改 119 6.4.2 动态游标 120 6.4.3 SQLDA 122 6.4.4 DESCRIBE语句 130 6.5 API 130

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸饺吖~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值