1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.zhangbz.jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class JDBCDemo1 {
 
    public static void main(String[] args) {
        Connection conn = null//局部变量没有默认的初始化,类的成员变量才有
        Statement stat = null;
        ResultSet rs = null;
 
        try {
            //1.注册数据库驱动
            //--由于mysql在Driver类的实现中自己注册了一次,而我们又注册了一次,于是会导致mysql驱动被注册两次
            //--创建mysqldeDriver对象时,导致了程序和具体的mysql驱动绑死在了一起,在切换数据库时需要修改代码
            //DriverManager.registerDriver(new Driver());
            //反射
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day10", "root", "root");
            stat = conn.createStatement();
            rs = stat.executeQuery("select * from user");
            //5.遍历结果集获取查询对象
            while(rs.next()){
                String name = rs.getString("name");
                System.out.println(name);
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            //6.关闭资源//异常处理
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    rs = null;
                }
            }
            if (rs != null) {
                try {
                    stat.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    rs = null;
                }
            }
            if (rs != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    rs = null;
                }
            }
        }
    }
}

1.局部变量没有默认的初始化,类的成员变量才有。

2.Class.forName("com.mysql.jdbc.Driver");利用反射解决重复注册的问题,并且降低程序和数据库类型的耦合,需要切换数据库时,由原先的需要改变导入的变成修改字符串,而后者可以在配置文件中完成。

3.嵌套的异常处理和if判断确保资源的释放没有问题。

 

 posted on   zhangbz  阅读(526)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
阅读排行:
· 一个适用于 .NET 的开源整洁架构项目模板
· AI Editor 真的被惊到了
· API 风格选对了,文档写好了,项目就成功了一半!
· 【开源】C#上位机必备高效数据转换助手
· 关于linux网桥(Linux Bridge)的一些个人记录
点击右上角即可分享
微信分享提示