【Java作业】JDBC程序设计

简介: 【Java作业】JDBC程序设计

一、实验名称

(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应用程序,首先将用户信息表中的数据在屏幕上显示出来,然后插入一个记录,最后将更新以后数据表中的数据在屏幕上显示出来。


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

q3.png


设计思路:

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();
            }
        }
    }
}



六、测试



q2.png

q1.png

七、实验心得

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


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

为什么不受数据库供应商的限制呢?

就在于jdbc的设计。


sun公司为sql访问数据库提供一套“纯”java api;

同时提供一个驱动管理器,以允许第三方驱动程序可以链接到特定的数据库,这样数据库供应商就可以提供自己的驱动程序,并插入到驱动管理器中,关键是所有的驱动程序都必须满足驱动管理器api提出的要求。

需要一套简单的机制,以使得第三方驱动程序可以想驱动管理器注册。

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

相关文章
|
3月前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
69 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
20天前
|
Java 数据库连接 数据库
springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver应该如何解决
通过上述步骤,可以有效解决Spring Boot项目中遇到的 `java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver`问题。确保在项目中正确添加达梦数据库的JDBC驱动依赖,并在配置文件中正确配置数据源信息,是解决此问题的关键。通过这些方法,可以确保Spring Boot项目能够正确连接达梦数据库并正常运行。
144 31
|
5月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
54 8
|
5月前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
44 7
|
5月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
51 3
|
3月前
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
134 63
|
3月前
|
Java 编译器 Android开发
java作业的提交规范与要求
java作业的提交规范与要求
35 0
|
3月前
|
SQL Java 数据库连接
如何在 Java 脚本中有效地使用 JDBC
如何在 Java 脚本中有效地使用 JDBC
23 0
|
5月前
|
SQL Java 关系型数据库
【前端学java】JDBC快速入门
【8月更文挑战第12天】JDBC快速入门
42 2
【前端学java】JDBC快速入门
|
5月前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)