• 学习记录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包,还望指出,万分感谢!!!

  • 相关阅读:
    487-3279(电话号码)
    【模板】二分图匹配
    【模板】网络最大流
    P3879 [TJOI2010]阅读理解
    10.10 考试T1 低仿机器人
    P4025 [PA2014]Bohater
    线段树合并 从入门到入土
    CF547B Mike and Feet
    10.6洛谷月赛划水记
    P4552 [Poetize6] IncDec Sequence
  • 原文地址:https://www.cnblogs.com/huajidafahao/p/11265711.html
Copyright © 2020-2023  润新知