zoukankan      html  css  js  c++  java
  • 学习记录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包,还望指出,万分感谢!!!

  • 相关阅读:
    GNU make manual 翻译(九十九)
    GNU make manual 翻译( 九十五)
    Shell的 for 循环小例子
    makefile中对目录遍历的小例子
    GNU make manual 翻译(九十三)
    GNU make manual 翻译( 一百)
    GNU make manual 翻译( 九十七)
    GNU make manual 翻译( 九十八)
    mapserver4.8.3 的readme.win32的中文翻译文件
    遥控器编程
  • 原文地址:https://www.cnblogs.com/huajidafahao/p/11265711.html
Copyright © 2011-2022 走看看