回顾JDBC

本文介绍了JDBC的基本概念,包括核心接口与类的作用,数据库URL标识的格式与作用,以及JDBC编程的基本步骤。深入探讨了如何加载驱动、建立数据库连接、创建Statement对象并执行SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回顾JDBC

 

java.sql.*包下的接口和类:

 

         1).Driver: 驱动的标准接口。

         2).DriverManager: 驱动管理器,管理多个加载的驱动程序;

                                             能够根据数据库的url标识,自动查找合适的数据库驱动类。

         3).Connection: 和数据库连接的对象形式,代表了一个和数据库的连接;

         4).Statement:  用以执行SQL语句

                     a. Statement;

                     b. PreparedStatement(继承自Statement);

         5).ResultSet: 结果集,用来获取select语句返回的数据结果

 

JDBC的执行流程:

         1.由DriverManager根据数据库的URL标识,自动识别查找注册给DriverManager的多各Driver对象,

         2.通过调用Driver对象的Connect方法和数据库之间建立起来连接(此时返回Connection对象)

         3.建立起来了解之后,由Statement对象负责搬运sql语句到数据库服务端执行,然后将执行结果搬回程序端

         4.处理程序端返回的ResultSet。

 

数据库的URL标识:

 

          数据库url标识的存在主要是为了能够让DriverManager通过这个标示可以正确的识别使用的数据库,以及查找到正确的Driver对象,并且通过这个Driver可以和数据库之间建立起来连接。

 

          这个url由数据库厂商提供。

          基本格式:

                  jdbc:subprotocol:subname

                  oracle :jdbc:oracle:thin:@localhost:1521:xe

                  mysql : jdbc:mysql://localhost:3306/javademo?characterEncoding=UTF8

db2:jdbc:db2://{host}[:{port}]/{database}

         note:其中还可以包含用户名密码编码等信息,

 

JDBC编程步骤:

  1.注册驱动/加载驱动

  2.获取连接

  3.创建Statement对象

  4.执行sql

  5.处理结果集

  6.关闭资源。

 

1.注册驱动(加载驱动)

                  注册的方式:

                    1.使用类加载器(使用反射的方式)

                           Class.forName(driverName);//driverName=”数据库驱动类全类名”;

                    2.实例化Driver

                           Driver driver =

                                            new oracle.jdbc.driver.OracleDriver();

                           DriverManager.registerDriver(driver);

                    3.System.setProperty("jdbc.drivers", "oracle.jdbc.driver.OracleDriver");

                       或者运行程序时填加虚拟机参数jdbc.drivers

                          -Djdbc.drivers=oracle.jdbc.driver.OracleDriver        

全类名:

Db2:com.ibm.db2.jcc.DB2Driver

Oracle:oracle.jdbc.driver.OracleDriver

Mysql:com.mysql.jdbc.Driver

 2.建立连接

                  连接方式:

                  1.DriverManager的getConnection方法

                    getConnection(url);//url中需要有用户名密码,比如mysql连接就可以

                    getConnection(url,properties);//将用户名密码存放在java.util.Properties对象中

                    getConnection(url,user,passwd);

 

DriverManager中的getConnection其实也是调用的Driver.connect方法,因此可以直接使用。

                  2.直接调用Driver.connect方法执行

                    Driver d = new DriverClass();

                    d.connect(url,properties);

3.创建Statement:

                  Statement:connection.createStatement();

                    1.创建时不需要传递sql语句,但是执行时需要传递sql语句

                    2.如果涉及到动态参数的传递,必须使用字符串拼接

                  PreparedStatement:connection.prepareStatement(String sql);

                    1.创建时就需要传递sql语句,执行的时候不需要传递sql语句

                    2.如果涉及到动态参数的传递,可以使用字符串拼接,也可以使用?占位的形式

                          给?号传值使用的是

                           pstmt.setType(index,value);

                           index从1开始

                    3.提供预编译的功能,某种程度上可以避免sql注入的问题

                    4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常

 

 

4.执行sql语句

                  execute:返回boolean类型的值,代表是否有结果集返回

executeUpdate:返回int类型的值,代表的是,操作执行完成后,受影响的数据库的行计数(针对于insert,update,delete)

                  executeQuery:返回的是ResultSet

                  ResultSet:类似于指针或者游标的东西,里边保存的不是所有的结果,而是指向结果集的正上方。所以如果一旦连接关闭那么ResultSet将取不到值。一个statement对象对应一个resultSet对象

5.处理结果:有结果集,处理结果集

         ResultSet

         next(),每执行一次,向下移动一次,如果有值,返回true,如果没值返回false

         while(rs.next()){

             rs.getType(index/columnName);

             如果传的是index,那么索引是从1开始的。

                  例如:

                          执行select id,last_name from s_emp;

                          那么1代表的就是id,依次类推

         }

6.关闭资源

         先开的后关

 

笔试面试总结:

1.注册Driver的三种方式

         Class.ForName()

         new Driver();//new oracle.jdbc.driver.OracleDriver();

         System.setProperty("jdbc.drivers","oracle.jdbc.driver.OracleDriver");

2三种执行方法的返回值分别是什么含义execute(sql)

         execute();         boolean 是否有结果集返回

         executeUpdate();     int 操作影响了多少行

         executeQuery()     返回结果集

3.StatementPreparedStatement之间的关系和区别.

         Statementconnection.createStatement();

             1.创建时不需要传递sql语句,但是执行时需要传递sql语句

             2.如果涉及到动态参数的传递,必须使用字符串拼接

         PreparedStatementconnection.prepareStatement(String sql);

             1.创建时就需要传递sql语句,执行的时候不需要传递sql语句

             2.如果涉及到动态参数的传递,可以使用字符串拼接,也可以使用?占位的形式

         ?号传值使用的是

                  pstmt.setType(index,value);

                  index1开始

             3.提供预编译的功能,某种程度上可以避免sql注入的问题

         4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值