北京传智播客基础【教学内容】JDBC介绍与入门案例JDBC介绍JDBC入门案例JDBCAPI详解DriverManagerConnectionStatementResultSetJDBC应用CRUD示例JdbcUtils工具登录操作SQL注入问题分析PreparedStatement介绍【教学总结】【第一阶段】【学习目标】【内容:JDBC介绍与入门案例】JDBC介绍JDBC定义JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序.JDBC的优点有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBCAPI,就不必为访问MySql数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问DB2数据库又编写另一个程序等等,程序员只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。我们可以通过下面一个图来更加清楚的说明JDBC的优点北京传智播客在上图中,出现了驱动,那么驱动是什么哪?驱动:两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信今天我们使用的是mysql的驱动mysql-connector-java-5.1.28-bin.jarJDBC作用能过上面介绍,我们知道了,如果要java语言来操作数据库,就需要使用JDBC,那么我们使用JDBC到底可以做些什么操作哪?简单的说,通过JDBC我们可以做三件事:与数据库建立连接发送sql语句给数据库处理返回数据集JDBCAPI常用类与接口在java体系结构中,有这样两个包是与jdbc有关的java.sql.*javax.sql.*在java.sql.*包下有以下类与接口,是我们在使用jdbc时需要用到的。DriverManager类:它主要用于管理驱动Connection接口:它用于与数据库建立连接Statement接口:它用于向数据库发送sql语句PreparedStatement接口:它是Statement的子接口,它提供了预编译功能CallableStatement接口:它是PreparedStatement的子接口,它用于处理存储过程ResultSet接口:它用封装查询操作返回的结果信息。JDBC入门案例下面我们完成一个jdbc连接mysql数据库的快速入门程序。功能描述查询出day06数据库中user表内所有信息功能分析1.创建数据库day06,创建数据表user2.在myeclipse下创建webprojectday06工程3.导入mysql驱动jar包4.编写java代码连接mysql数据库,并获取user表中数据a)通过DriverManger注册驱动北京传智播客)通过DriverManager获取连接对象Connectionc)通过Connection获取一个可以向数据库发送sql语句的对象Statementd)通过Statement对象执行sql语句(select)得到一个结果集ResultSete)遍历结果集ResultSet,得到数据表中的数据f)释放资源代码实现数据库建立CREATEDATABASEday06;USEday06CREATETABLEUSER(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(20)UNIQUENOTNULL,PASSWORDVARCHAR(20)NOTNULL,emailVARCHAR(40)NOTNULL);INSERTINTOUSERVALUES(NULL,'tom','123','tom@163.com');INSERTINTOUSERVALUES(NULL,'fox','456','fox@163.com');INSERTINTOUSERVALUES(NULL,'james','789','james@163.com');SELECT*FROMUSER;创建工程在myeclipse下创建一个webproject工程导入mysql的驱动程序mysql-connector-java-5.1.28-bin.jar编写代码北京传智播客通过DriverManger注册驱动DriverManager.registerDriver(newDriver());//2.通过DriverManager获取连接对象Connectioncon=DriverManager.getConnection(jdbc:mysql://localhost:3306/day06,root,abc);//3.通过Connection获取一个操作sql语句的对象StatementStatementst=con.createStatement();//4.执行sql语句(select)得到一个ResultSetStringsql=select*fromuser;ResultSetrs=st.executeQuery(sql);//5.操作结果集,得到数据while(rs.next()){System.out.println(ID:+rs.getInt(id)+\tUSERNAME:+rs.getString(username)+\tPASSWORD:+rs.getString(password)+\tEMAIL:+rs.getString(email));}//6.释放资源rs.close();st.close();con.close();结果【笔试面试题】简述jdbc的作用【重点总结】了解什么是jdbc及其作用了解什么是驱动掌握jdbc开发步骤【第二阶段】【学习目标】【内容:JDBCAPI详解】DriverManagerDriverManger是java.sql包下的一个类,它的作用是用于管理一组JDBC驱动程序的基本服务。常用方法:北京传智播客publicstaticvoidregisterDriver(Driverdriver)throwsSQLException该方法作用是用于注册驱动registDriver方法分析:我们可以查看mysql驱动中Driver类的加载,会发现在其内部有一个静态代码块static{try{java.sql.DriverManager.registerDriver(newDriver());}catch(SQLExceptionE){thrownewRuntimeException(Can'tregisterdriver!);}}在其中它也完成了一个注册操作,那么很明显在我们的程序中会将驱动注册两次。并且我们在使用registDriver方法是,还需要在程序中显示的导入mysql驱动中的driver类importcom.mysql.jdbc.Driver;通过以上分析,我们通过registDriver方法完成驱动的注册存在两个问题:1.驱动对象在内存中存在两个2.我们的程序依赖于数据库驱动为了解决上述问题,我们在实际开发中,一般会通过反射的方式来加载我们的驱动程序Class.forName(com.mysql.jdbc.Driver);publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException该方法作用试图建立到给定数据库URL的连接。DriverManager试图从已注册的JDBC驱动程序集中选择一个适当的驱动程序.getConnection方法分析:通过这个方法,我们可以获取一个java.sql.Connection对象getConnection方法有三个参数:url:URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库user:这个是数据库的用户名,对于我们来说,就是root用户password:这个是root用户的密码关于URL对于url,它的基本格式如下:协议子协议主机端口数据库例如:jdbc:mysql://localhost:3306/day06如果我们连接的是本机并且端口号是3306,以上代码也可以简写成Jdbc:mysql:///day06我们在jdbc中使用url很重要的一个目的是为了让DriverManager知道我们要通过哪一个数据库驱动来完成与数据库的连接。扩展:常用的数据库连接URLOracle写法:jdbc:oracle:thin:@localhost:1521:sid对于url来说,我们有时也会在其后面携带参数例如:jdbc:mysql://localhost:3306/day06?useUnicode=true&characterEncoding=UTF-8北京传智播客代表的是一个与数据库连接的对象,当我们获取了一个Connection对象时,我们就可以说,已经与数据库连接成功.Connection对象的获取是通过DriverManager的getConnection方法的返回值获取到的。常用方法:StatementcreateStatement()throwsSQLException创建一个Statement对象来将SQL语句发送到数据库PreparedStatementprepareStatement(Stringsql)throwsSQLException创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库CallableStatementprepareCall(Stringsql)throwsSQLException创建一个CallableStatement对象来调用数据库存储过程StatementStatement是java.sql包下的一个接口Statement对象用于执行静态SQL语句并返回它所生成结果的对象。常用方法:ResultSetexecuteQuery(Stringsql)throwsSQLException执行给定的sql语句,该语句通常是select,返回单个的ResultSet对象intexecuteUpdate(Stringsql)throwsSQLException执行给定的sql语句,该语句可能为update,delete,insert,返回的是行计数booleanexecute(Stringsql)throwsSQLException执行给定的sql语句,该语句返回多个结果,如果第一个结果为ResultSet对象,则返回true,其它则返回false,ResultSetResultSet是java.sql包下的一个接口ResultSet对象表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。Resultset封装执行结果时,采用的类似于表格的方式