JDBC详解

最近看了许多岗位,有要求使用JDBC SERVLET JSP,突然有点懵,只记得jdbc,servlet,jsp已经是许久以前学的了,当时也是为了学框架,顺便学了jdbc,servlet这些底层,还有el和jstl表达式来使用jsp。还有一些 xml 的 自定义dtd约束等。 后来开发项目都逐渐使用,框架,前后端分离,这些知识就有点遗忘。但是因为以前都学过,所以捡起来比较容易。
对jdbc单纯的开发过程的总结和弊端
转载于 JDBC编程

JDBC(7)

(1)加载数据库驱动

//加载数据库驱动的代码如下(反射加载数据库驱动)
Class.forName("com.mysql.jdbc.Driver");

(2)定义数据库的url(统一资源定位符)

//url是获取连接的必须要素,其格式如下:协议、IP地址、端口号、数据库名
//我们定义的url如下:
String url = “jdbc:mysql://localhost:3306/databases?characterEncoding=utf-8

(3)获得数据库连接(Connection对象)

//获得数据库连接对象的代码如下:(url,数据库用户名root,密码)
Connection conn = DriverManager.getConnection(url, username, password);

(4)创建Statement并初始化
我们还可以使用prepareStatement
二者区别详见 defference between prepareStatement and Statement

//创建Statement对象的代码如下:
Statement stmt = conn.createStatement();

(5)执行SQL语句,并获取结果集

String sql="";
//第一种操作方式,无返回值
stmt.execute(sql)
//第二种操作方式,有结果集返回
ResultSet rs = stmt.executeQuery(sql);

(6)释放数据库资源

代码抽取(4)

为了降低程序复杂程度,增加代码复用性,我们将共性模块进行抽取
抽取的模块主要有:

  1. 数据库信息模块
#db.properties
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8
username = root
password = root
  1. 资源读取模块
    pro创建一个静态的Properties对象
    JDBCUtil.class是创建一个JDBCUtil的Class对象
    Class类的作用是运行时提供或获得某个对象的类型信息(可参考Dependence Injection) , 和C++中的typeid()函数类似
    Class是反射技术的基础,要想操纵类中的属性和方法,都必须从获取Class开始
    获取Class对象的方式:Class对象由虚拟机创建,只能获取
    详细内容见:JDBC中的反射
static {
       //对资源文件的读取
        Properties pro = new Properties();
        try {
       		InputStream s = JDBCUtils.class.getResourceAsStream("db.properties");
            p.load(s);
        } catch (IOException e) {
            e.printStackTrace();
        }
        driverClass = p.getProperty("driver");
        url = p.getProperty("url");
        userName = p.getProperty("username");
        passWord = p.getProperty("password");
        try {
        	//通过反射获取数据库驱动
            Class.forName(driverClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
  1. 连接获取模块
public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
  1. 资源释放模块(有无结果集,导致关闭资源方式不一样,所以进行重载)
 public static void closeResource(ResultSet result, Statement stmt, Connection conn) {
        try {
            result.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public static void closeResource(PreparedStatement stmt, Connection conn) {
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值