【Java作业】JDBC程序设计

分类专栏:
Java作业

文章标签:
Java
mysql
原创

一、实验名称

(1)了解JDBC工作的基本原理 (2)掌握JDBC编程的基本步骤 (3)熟悉SQL的DML部分命令:select,update,insert,delete

二、实验内容

(1)设置ODBC数据源。 (2)按要求编写一个Java Application程序,并编译、运行这个程序。

三、实验目的

参照如下所示的SQL命令,在Microsoft Access数据库中创建用户信息表“userinfo”,并输入如表1所示的数据。 create table userinfo( code varchar(4) not null, / * 用户代码 * / name varchar(10), / * 用户姓名 * / password varchar(6), / * 用户密码 * / email varchar(40), / * 用户电子邮件地址 * / primary key(code)); 表1:用户信息表中的数据

代码 姓名 密码 电子邮件地址
7101 宋晓梅 123456 xiaomei@yahoo.com.cn
7102 关松杰 654321 songjie@263.net
7103 李晓梅 123654 xiaomei@yahoo.com.cn
7104 张松岩 456123 songyan@yahoo.com.cn
7105 王亚杰 321456 yajie@hotmail.com
7106 曲小声 654321 xiaosheng@263.net

编写JDBC应用程序,首先将用户信息表中的数据在屏幕上显示出来,然后插入一个记录,最后将更新以后数据表中的数据在屏幕上显示出来。

四、类图/类关系图/交互图等

在这里插入图片描述

设计思路:

Pool类时一个简单的数据库连接池,封装了获取连接和放回连接的方法,提升使用性能。 Display类为展示查询结果的类,其中有静态方法display。 Main为测试类,测试题目要求的操作。

五、程序

Pool类:

其原理就是内部维护了一个Map映射集合,如果connection空闲,值为1;若不空闲则为0。通过getConnection()方法来选择取出空闲的连接或者重新创建连接返回,layConnection就是标记Map中相应的value为1来表示该连接已空闲。

package com.dreamchaser.jdbc;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * 一个简单的数据库连接池
 */
public class Pool {
    private static Driver driver;

    static {
        try {
            driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    private static Map<Connection,Integer> pool=new HashMap<>();
    private static String url="jdbc:mysql://localhost:3306/example?serverTimezone=Asia/Shanghai";
    private static String user="root";
    private static String password="jinhaolin";

    /**
     * 从连接池中获取一个空闲连接,如果没有则创建一个新的连接返回
     * @return
     */
    public static Connection getConnection(){
        for (Map.Entry entry:pool.entrySet()){
            if (entry.getValue().equals(1)) {
                entry.setValue(0);
                return (Connection) entry.getKey();
            }
        }
        Connection connection=null;
        try {
            connection=DriverManager.getConnection(url,user,password);
            pool.put(connection,0);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return connection;
    }
    /**
     * 放回connection连接对象
     * @param connection
     */
    public static void layConnection(Connection connection){
        pool.put(connection,1);
    }

    public static String getUrl() {
        return url;
    }

    public static void setUrl(String url) {
        Pool.url = url;
    }

    public static String getUser() {
        return user;
    }

    public static void setUser(String user) {
        Pool.user = user;
    }

    public static String getPassword() {
        return password;
    }

    public static void setPassword(String password) {
        Pool.password = password;
    }
}

Display展示工具类:

内置display(ResultSet rs)方法用来展示查询出来的数据

package com.dreamchaser.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Display {
    public static void display(ResultSet resultSet) {
        System.out.println("-------------------------------------------------");
        System.out.println("|\t代码\t\t姓名\t\t密码\t\t电子邮件地址\t");
        try {
            while (resultSet.next()){
                System.out.println("|\t"+resultSet.getString(1)+"\t"+resultSet.getString(2)
                        +"\t"+resultSet.getString(3)+"\t"+resultSet.getString(4)+"");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

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

    }
}

Main类:

进行jdbc操作,在最后按先进后出的原则释放相应资源。

package com.dreamchaser.jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Main {
    public static void main(String[] args) {
        Connection connection=Pool.getConnection();
        ResultSet resultSet=null;
        Statement statement=null;
        try {
            statement = connection.createStatement();
            String sql="select * from userinfo";
            resultSet=statement.executeQuery(sql);
            //展示打印查询结果
            Display.display(resultSet);
            String sql1="insert into userinfo values(7017,'金昊霖',123456,'767564319@qq.com')";
            statement.execute(sql1);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                resultSet.close();
                statement.close();
                //将连接放回连接池
                Pool.layConnection(connection);
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
}

六、测试

在这里插入图片描述

在这里插入图片描述

七、实验心得

jdbc(java database connection)就是java数据库链接的api,是java标准类库的扩展,用它可以应用sql访问数据库,完成对数据库的查找,更新。

与其它数据库编程环境相比,jdbc有java语言的特性,使用jdbc开发的程序可以跨平台运行,而且不受数据库供应商的限制。 为什么不受数据库供应商的限制呢? 就在于jdbc的设计。

  • sun公司为sql访问数据库提供一套“纯”java api;
  • 同时提供一个驱动管理器,以允许第三方驱动程序可以链接到特定的数据库,这样数据库供应商就可以提供自己的驱动程序,并插入到驱动管理器中,关键是所有的驱动程序都必须满足驱动管理器api提出的要求。
  • 需要一套简单的机制,以使得第三方驱动程序可以想驱动管理器注册。

现在通常使用的数据库操作框架mybatis也是基于jdbc进行开发的,所以学好jdbc也是挺重要的,它是连接Java和数据库的桥梁

  • 作者:金昊霖
  • 发表时间:2020-7-04
  • 版权声明:自由转载-非商用-非衍生-保留署名(创意共享3.0许可证)
  • 评论

    留言