码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2019-07-29 19:06:10      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:name   throws   损坏   语句   seda   ted   报错   数据   思想   

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

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

今天学习了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包,还望指出,万分感谢!!!

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

标签:name   throws   损坏   语句   seda   ted   报错   数据   思想   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!