简单上手JDBC

01_简介JDBC

JDBC是商标,是技术,是一个规范标准,具体是类和接口的集合。

商标:Java DateBase Connectivity,Java数据库连接

技术:通过它连接各种不同数据库,执行insert, delete, update, select, create table等DML(数据操作语言)DDL(数据定义语言)。

规范:是SUN公司制定的一套Java连接数据库规范标准,现版本4.0.

与之相似的ODBC是微软制定的应用程序连接数据库的规范标准,后升级命名为OLEDB。

02_JDBC具体类和接口

相关类和接口在java.sql包中

名称类型说明
Driver接口用来表示驱动程序类
Connection接口用于连接数据
Statement接口执行SQL语句并将数据检索到ResultSet中
ResultSet接口数据库结果集数据表,通常由执行查询数据库语句产生
PreparedStatement接口执行预编译SQL语句
DriverManager驱动程序管理器,通过它来得到连接对象

 03_使用JDBC

1_项目引用驱动jar包

在项目中新建文件夹,将从各厂商下载的JAR包放进文件夹,再导入。

2_加载驱动程序

try {
    Class.forName("实现java.sql.Driver接口的一个类DriverName");
} catch (ClassNotFoundException e) {
    System.out.println("驱动程序类没有找到");
    e.printStackTrace();
}

要点

1.DriverName根据连接的数据库种类不同所加载的驱动类不同,但不管是哪个类,他们一定实现了java.sql.Driver接口。

2.Class.forName("driverName")代码完成两个功能:一.把驱动程序加载到内存里;二.把当前加载的驱动程序自动去DriverManager注册。

3.此方法会报编译时异常ClassNotFoundException.通过自己内部加try,catch做异常处理。如果后面还会列出没有找到的类,那大多数原因是没加载程序jar包或类名写错。

4.DriverName在java.sql包里,当我们调用sql包里任何一个类(包括接口)的任何一个方法都会报一个编译时异常SQLException。

3_得到连接对象CONNECTION

通过DriverManager.getConnection()方法得到连接对象。

try {
    String url = "ip+port+dbName";
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection con = DriverManager.getConnection(url, "sa", "");
    System.out.println("驱动程序加载完毕");
} catch (ClassNotFoundException e) {
    System.out.println("驱动程序类没有找到");
    e.printStackTrace();
} catch (SQLException e) {
    System.out.println("发生了sql异常");
    e.printStackTrace();
}

1.DriverManager是类不是接口,他是一个服务类,用于管理JDBC驱动程序,提供getConnection方法建立应用程序与数据库连接。DriverManager类会注册JDBC驱动程序来创建到数据库的连接。

2.DriverManager在java.sql包里,当我们调用sql包里任何一个类(包括接口)的任何一个方法都会报一个编译时异常SQLException。

3.方法参数URL:统一资源定位符。

jdbc:sqlserver://ip:1433;databaseName=dbName

第一部分:jdbc表示jdbc驱动程序。

第二部分:sqlserver表示的是连接数据库种类。

第三部分:ip地址,我们也会使用localhost或者127.0.0.1表示本机。

第四部分:1433端口号(port),每个数据库不同,sqlserver为1433,mysql为3306,oracle为1521。

第五部分:databaeName,所创建的数据库名称

4_创建STATEMENT对象

如果把Connection比作路,这里将Statement比作刚建好的路上的一辆数据的车。

Statement sta = con.createStatement();
System.out.println("得到货车 sta = " + sta);

5_执行SQL语句

Statement提供了两个方法executeUpdate(sql)与executeQuery(sql),前者executeUpdate(sql)用来执行insert,update,delete语句,后者执行select语句。

String sql = "insert into student (stuName, age ,address, email) 
values('wangwang', 12, '玉祥门', 'shudaizi@163.com')";
int row = sta.executeUpdate(sql);
if (row == 1) {
    System.out.println("save success");
} else {
    System.out.println("save error");
}

1.executeUpdate()返回值为int型,表示sql语句影响的行数。

6_关闭资源

因为Statement,Connection都是大对象,最后我们使用完要关闭它释放资源。用finally块来实现,因为它不管有没有异常都会执行。

要点

1.Connection与Statement对象设为全局变量,需要在finally块中使用

2.sta.close()与con.close()会报异常,需要异常处理

3.创建资源与关闭资源顺序相反

4.当创建con后数据库密码错误时,直接跳到catch块,再执行finally块,finally块调用它的close()方法,会报出空指针异常,所以必须加上if语句。

实现代码

package com.chppain;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class TestJDBC1 {
    public static void main(String[] args) {
        Connection con = null;
        Statement sta = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("驱动程序加载完毕!");
            String url = "jdbc:sqlserver://localhost:1433;databaseName=PAS";
            con = DriverManager.getConnection(url, "登录名", "密码");
            System.out.println("con");
            sta = con.createStatement();
            String sql = "insert into teacher (teanum, teaName, teatitle, teatypeid, teabtd, pwd, static)\n" +
                    "values ('20210001', '张三', '搬砖老师', 1, '1981-7-5', 1, 1)";
            String sql2 = "delete from teacher where teaNum = '20210001'";
            int rows = sta.executeUpdate(sql2);
            if (rows == 1) {
                System.out.println("op success");
            } else {
                System.out.println("op error");
            }


        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序没有找到");
            e.printStackTrace();
        } catch (SQLException throwables) {

        } finally{
            try {
                if (sta != null) {
                    sta.close();
                    sta = null;
                }
                if (con != null) {
                    con.close();
                    con = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chppain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值