详解JDBC(一)

本文介绍Java数据库连接(JDBC)的基本概念及使用步骤,涵盖DriverManager、Connection、Statement与ResultSet等核心接口,并提供示例代码。

一、JDBC简介

1、JDBC是SUN公司为了简化操作数据推出一套规范。数据库厂商的驱动就是对JDBC的实现。

2、Java Data Base Connectivity(java数据库连接),它主要由接口组成。

java.sql.* javax.sql.* JDK中
数据库的驱动jar包

二、JDBC的编码步骤

0、前提:拷贝数据库的驱动到构建路径中(classpath)
1、注册驱动
2、获取与数据库的链接
3、创建代表SQL语句的对象
4、执行SQL语句
5、如果是查询语句,需要遍历结果集
6、释放占用的资源
这里写图片描述

三、JDBC中常用的接口详解

1、DriverManager:

作用:

a、注册驱动:

方式一:(不建议使用)
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
原因:1、依赖具体驱动。2、导致驱动注册2遍
方式二:(建议)
Class.forName(“com.mysql.jdbc.Driver”);

new com.mysql.jdbc.Driver()源码
   static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can\'t register driver!");
        }
    }

所以静态代码块在,com.mysql.jdbc.driver用用来加载驱动

b、获取与数据库的链接

url:SUN和数据库厂商间的协议。具体查阅数据库的文档。

public static Connection getConnection(String url,String user,String password)
throws SQLException
public static Connection getConnection(String url,Properties info)
throws SQLException
public static Connection getConnection(String url)
throws SQLException

2、Connection

所有的数据库操作都是基于链接之上的。
Statement =conn.createStatement():创建向数据库发送sql的statement对象。

2、获取与数据库的链接
        //方式一:
//      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "sorry");

        //方式二:
//      Properties props = new Properties();
//      props.setProperty("user", "root");//  参数名:参考数据库的文档
//      props.setProperty("password", "sorry");
//      props.setProperty("useUnicode", "true");//编码有关的参数
//      props.setProperty("characterEncoding", "utf8");
//      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15",props);

        //方式三
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15?user=root&password=sorry")

3、Statement

作用:代表SQL语句对象。可以向数据库发送任何的SQL语句
ResultSet statement.executeQuery(String sql):sql一般都是查询语句
int executeUpdate(String sql):sql一般是DML语句。insert update delete。返回值,操作几条记录。
boolean execute(String sql):sql可以是任意的语句。返回值不是代表成功与否。如果是查询语句,就有结果集,返回true。没有返回结果集的,返回false。

4、ResultSet

作用:封装了查询的结果集
这里写图片描述

     List<User> users = new ArrayList<User>();
            User user = new User();
//          user.setId((Integer)rs.getObject("id"));
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setPassword(rs.getString("password"));
            user.setEmail(rs.getString("email"));
            user.setBirthday(rs.getDate("birthday"));

            users.add(user);

ResultSet游标

boolean next():游标下移。返回值是有无记录
boolean previous():游标上移。
boolean absolute(int count):定位到指定的行。第一行是1。
void beforeFirst():移动游标到第一行的前面。
void afterLast():移动游标到最后一行的后面。

四、释放占用的资源

public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "sorry");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select id,name,password,email,birthday from users");
            List<User> users = new ArrayList<User>();
            while(rs.next()){
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                user.setEmail(rs.getString("email"));
                user.setBirthday(rs.getDate("birthday"));
                users.add(user);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                rs = null;
            }
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                stmt = null;
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                conn = null;
            }
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值