学习记录01 --- 访问JDBC,制作教务管理系统

首先说下我就一个菜鸡,只是记录下自己的学习过程,大佬们无视我就好。。。

---------------------------------------------------------------------------------------------------------

今天学习了JDBC,下午就做了一个经典的增删改查的案例,教务管理系统

自己也试着封装了一下,面向对象思想嘛

原来一直用的eclipse,直到今天接触到idea才知道啥叫真正的好用,但对于idea还是比较陌生,还得摸索一段时间。

这边就只记录我在进行数据库连接时产生的一些问题,其他的都太简单了,没有记录必要。

关于JDBC我单独写了一个类,先贴上我最开始写的一个版本

package org.lanqiao.jwgl;

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

public class Jdbc {
    static String url = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8";
    static String user = "root";
    static String pwd = "123456";

    //连接数据库,并返回连接对象
    public static void connetcDatabase() throws Exception {
        //导入驱动类
        Class.forName("com.mysql.jdbc.Driver");
        //创建连接对象
        Connection  conn = DriverManager.getConnection(url,user,pwd);
        //返回连接对象
        return conn;
    }

    //数据库查询操作
    public static ResultSet executeQueryDatabase(String sql) throws Exception {
        //调用连接数据库方法连接数据库
        Connection conn = connetcDatabase();
        //创建命令行
        Statement stt = conn.createStatement();
        //执行sql语句
        ResultSet result = stt.executeQuery(sql);

        //关闭数据库连接
        conn.close();
        stt.close();

        //返回操作结果
        return result;

}
    //数据库增删改操作
    public static int executeUpdateDatabase(String sql) throws Exception {
         //调用连接数据库方法连接数据库
        Connection conn = connetcDatabase();
        //创建命令行
        Statement stt = conn.createStatement();
        //执行sql语句
        int line = stt.executeUpdate(sql);
       //关闭数据库连接
        conn.close();
        stt.close();
        //返回影响行数
        return line;
    }

}

这样写的话,增删改没啥问题,都能正常操作,但唯独查询的时候报异常了

Operation not allowed after ResultSet closed

后来百度查询了一番,发现是因为在result进行遍历操作之前就把数据库连接给关闭了

就下面这段代码

    //数据库查询操作
    public static ResultSet executeQueryDatabase(String sql) throws Exception {
        //调用连接数据库方法连接数据库
        Connection conn = connetcDatabase();
        //创建命令行
        Statement stt = conn.createStatement();
        //执行sql语句
        ResultSet result = stt.executeQuery(sql);

        //就是下面这段的锅,导致在返回操作结果进行遍历之前关闭了数据库连接
        conn.close();
        stt.close();

        //返回操作结果
        return result;

}

后来左思右想,我干脆把Connection和Statement对象都创建成全局的,然后单独写个关闭数据库的方法

    //关闭数据库连接
    public static void closeDatabase() throws Exception {
        //关闭数据库连接
        conn.close();
        stt.close();
    }

然后每次增删改查操作后都调用这个方法关闭数据库连接,这样就解决了

然后其它的问题倒是没出现,最后贴上没有任何问题的代码

package org.lanqiao.jwgl;

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

public class Jdbc {
    static String url = "jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8";
    static String user = "root";
    static String pwd = "123456";

    //定义成全局变量方便关闭
    static Connection conn;
    static Statement stt;

    //连接数据库
    public static void connetcDatabase() throws Exception {
        //导入驱动类
        Class.forName("com.mysql.jdbc.Driver");
        //创建连接对象
        conn = DriverManager.getConnection(url,user,pwd);

    }

    //数据库查询操作
    public static ResultSet executeQueryDatabase(String sql) throws Exception {
        //调用连接数据库方法连接数据库
        connetcDatabase();
        //创建命令行
        stt = conn.createStatement();
        //执行sql语句
        ResultSet result = stt.executeQuery(sql);
        //返回操作结果
        return result;
    }

    //数据库增删改操作
    public static int executeUpdateDatabase(String sql) throws Exception {
        //调用连接数据库方法连接数据库
        connetcDatabase();
        //创建命令行
        stt = conn.createStatement();
        //执行sql语句
        int line = stt.executeUpdate(sql);
        //返回影响行数
        return line;
    }

    //关闭数据库连接
    public static void closeDatabase() throws Exception {
        //关闭数据库连接
        conn.close();
        stt.close();
    }

}

最后提一下,idea导出jar包是真蛋疼,开始导出一个,运行报错误,jar包损坏

再查了许久的资料后,发现选择jar后不要选择那个Empty,而是选另外一个,但是也得和mysql架包放在一起才能运行

第一次用idea不太熟练,希望有大佬知道如何正确导出jar包,还望指出,万分感谢!!!

原文地址:https://www.cnblogs.com/huajidafahao/p/11265711.html

时间: 2024-10-09 20:27:58

学习记录01 --- 访问JDBC,制作教务管理系统的相关文章

Activiti框架学习记录-01

Activiti框架学习记录-01 本篇主要是Activiti工作流框架的学习记录,以及对于该框架的基本使用和一些浅显的理解: 1.工作流框架基本概念 2.在eclipse中使用工作流框架 3.创建工作框架 4.使用框架提供API,操作框架实现业务逻辑 1.工作流框架基本概念(摘自百度百科) 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个

Spring学习记录(十四)---JDBC基本操作

先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJdbcInsert类,SimpleJdbcCall类,以及NamedParameterJdbcTemplate类.2.datasource即数据源包,访问数据源的实用工具类.它有多种数据源的实现,可以在JavaEE容器外部测试JDBC代码.3.object即对象包,以面向对象的方式访问数据库.它允许

Linux学习记录-01(Linux系统发展史)

对计算机一直感觉很神秘,想要学习,奈何不是计算机专业出身,最近决定开始学习,也算是充实一下自己,希望自己可以坚持下去. 一.Linux系统Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议.它支持32位和64位硬件.Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.Linux操作系统诞生于1991 年10 月5 日(这是第一次正

《Android第一行代码》学习记录01

第一章 开始启程,你的第一行Android代码 1.对Android开发的环境搭建(Eclipse+Android SDK+ADT)进行了介绍,正好我的渣渣笔记本也跑不了Android Studio,Eclipse就先用着. 2.添加LogCat到Eclipse,步骤:[Window菜单]->[Show View]->[Other]->[LogCat] 3.重要的是介绍了Android的系统架构,见下图: Linux Kernel层: 基于Linux2.6内核,为Android各种硬件提

微信开发学习记录 01

最近几天做了一下微信开发,总结了一些经验和教训. 首先是微信token链接,最开始连接的时候总是出现token连接失败,总以为是设置的不对,结果第二天就好了.而且发现,如果上传的代码(我用的是新浪云)有错误的话,可能会连不上(不知道对不对,我只是根据连接的经历总结的) 其次呢,就说一下编程时遇到的一些困难.最开始一两天的时候,总是觉得在网站上没有办法调试,根本不知道哪里会出错.后来发现其实是可以调试的,只是没有办法像编译器一样进行断点调试.但是一些语法问题还是可以发现的. 点击画篮圈的链接,可以

Webpack 学习记录-01

Webpack 2.0系列 1,output path路径必须为absolute path. { entry: './src/app.js', output: { filename: 'bundle.js', path: __dirname + '/build' } }   output.path  The output directory as an absolute path (required). 若写为:  path:"./dist/js"   则报错如下:Invalid co

C++的学习记录 - 01

动态内存分配和释放一直不怎么明白. 实验程序为: 1 # include <iostream> 2 # include <cstdlib> 3 using namespace std; 4 5 int main() 6 { 7 int *p; 8 if((p = new int(5)) == 0) 9 { 10 cout<<"can't allocate more memory, terminating.."<<endl; 11 exit

Node.js Windows系统学习记录 -- 01用法

1.安装Node 在我之前的文章Windows系统下安装fis3中提到过怎么安装Node 2.打开cmd输入: mkdir %USERPROFILE%\projects cd %USERPROFILE%\projects 3.创建一个js脚本 hello-world.js const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((

对于使用javaweb技术制作简单管理系统的学习

近期在老师的引导下我们学习了利用Javaweb技术制作简单的管理系统,其中涉及到的技术很多,由于大多都是自学 对这些技术的理解还太浅显但能实现一些相关功能的雏形. (一).登录功能 在登陆功能中通过与数据库的连接实现了验证用户账号与密码是否正确的功能,并添加了简易的权限设置使 不同用户登录成功后所呈现的主界面是不同的:同时还有验证码功能能检测验证码是否输入正确. 数据库: jsp: 1 <%@ page language="java" contentType="text