您好,欢迎访问三七文档
JDBC基础王乐天WepullInformationService数据持久化持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。WepullInformationServiceJava中的数据存储技术在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库JDO技术第三方O/R工具,如Hibernate,ibatis等JDBC是java访问数据库的基石,JDO,Hibernate等只是更好的封装了JDBC。WepullInformationServiceJDBC基础JDBC(JavaDataBaseConnectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API)。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。J2SE的一部分,主要由java.sql和javax.sql包组成。WepullInformationService简介JDBC应用程序、JDBCAPI、数据库驱动和数据库之间的关系。WepullInformationServiceJDBCJDBC(Java数据库连接)(sun公司提供)Java应用程序编程接口Java应用程序数据库插入修改删除查询WepullInformationService连接数据库步骤1.加载驱动(只做一次)2.建立连接(Connection)3.创建Statement对象4.执行语句并获取结果集(ResultSet)5.处理结果集6.释放资源下面按这6大步骤,写一个查询数据库程序的程序。WepullInformationServiceDriver接口Java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不用的实现在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现WepullInformationService一、加载与注册JDBC驱动加载JDBC驱动需调用Class类的静态方法forName(),向其传递要加载的JDBC驱动的类名DriverManager类是驱动程序管理器类,负责管理驱动程序JDBCURL用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接。Class.forName(com.mysql.jdbc.Driver);//1.加载驱动自己运行一下程序,如果以上代码写的有错误的话会报:ClassNotFoundException异常WepullInformationService二、建立连接可以调用DriverManager类的getConnection()方法建立到数据库的连接JDBCURL用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接。JDBCURL的标准由三部分组成,各部分间用冒号分隔。jdbc:子协议:子名称协议:JDBCURL中的协议总是jdbc子协议:子协议用于标识一个数据库驱动程序子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息Connectionconn=DriverManager.getConnection(jdbc:mysql://localhost:3306/wp1009,root,123)WepullInformationService几种常用数据库的JDBCURL对于Oracle数据库连接,采用如下形式:jdbc:oracle:thin:@localhost:1521:sid对于SQLServer数据库连接,采用如下形式:jdbc:microsoft:sqlserver//localhost:1433;DatabaseName=sid对于MYSQL数据库连接,采用如下形式:jdbc:mysql://localhost:3306/sidjdbc:mysql://localhost:3306/wlt协议子协议子名称WepullInformationService三、创建一个statement对象数据库连接被用于向数据库服务器发送命令和SQL语句,在连接建立后,需要对数据库进行访问,执行sql语句在java.sql包中有3个接口分别定义了对数据库的调用的不同方式:StatementPrepatedStatement–CallableStatementWepullInformationServiceStatement通过调用Connection对象的createStatement方法创建该对象该对象用于执行静态的SQL语句,并且返回执行结果Statement接口中定义了下列方法用于执行SQL语句:ResultSetexcuteQuery(Stringsql)(用于查询语句)intexcuteUpdate(Stringsql)(用于修改语句)WepullInformationService四、执行语句--ResultSet通过调用Statement对象的excuteQuery()方法创建该对象ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next()方法移动到下一行ResultSet接口的常用方法:booleannext()getString()…WepullInformationServiceResultSetResultSet对象完全依赖于Statement对象和Connection对象每次执行SQL语句时,都会用新的结果重写结果集当相关的Statement关闭时,ResultSet对象会自动关闭Next()getType()此方法将光标从当前位置下移一行从ResultSet对象返回数据WepullInformationService数据类型转换表java类型SQL类型booleanBITbyteTINYINTshortSMALLINTintINTEGERlongBIGINTStringCHAR,VARCHAR,LONGVARCHARbytearrayBINARY,VARBINARYjava.sql.DateDATEjava.sql.TimeTIMEjava.sql.TimestampTIMESTAMPWepullInformationService六、释放资源释放ResultSet、Statement、Connection(关闭顺序ResultSet--Statement--Connection)数据连接(Connection)是非常珍贵的资源,用完后必须马上释放,如果不能及时正确的关闭将导致系统崩溃。使用Connection的原则是:尽量晚创建,尽量早释放。WepullInformationServiceJDBC程序访问数据库的步骤2-1开始导入java.sql包加载并注册驱动程序创建一个Connection对象创建一个Statement对象执行语句关闭ResultSet对象关闭Statement对象关闭连接结束使用ResultSet对象JDBC步骤图解1.加载驱动(只做一次)2.建立连接(Connection)3.创建Statement4.执行语句,获取结果(ResultSet)5.处理结果集6.释放资源WepullInformationService随堂练习创建一个user表,具有以下字段:id主键姓名密码性别年龄分数写一个方法findById(intid),通过id查询数据写一个方法validate(Stringname,Stringpassword),对用户名和密码进行匹配验证。WepullInformationService随堂练习--表createtableuser(idintauto_incrementprimarykey,namevarchar(20),passvarchar(50)notnull,sexvarchar(8),ageint,scoredouble)insertintouservalues(null,'张冯喜','123','女',7,60);insertintouservalues(null,'杜拉拉','456','女',25,95.5);insertintouservalues(null,'狄仁杰','789','男',99,50);insertintouservalues(null,'武则天','000','女',66,98);select*fromuser;descuser;WepullInformationServiceSQL注入攻击SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令(例如:''or1or''),从而利用系统的SQL引擎完成恶意行为的做法对于Java而言,要防范SQL注入,只要用PreparedStatement取代Statement就可以了WepullInformationServicePreparedStatement可以通过调用Connection对象的preparedStatement()方法获取PreparedStatement对象PreparedStatement接口是Statement的子接口,它表示一条预编译过的SQL语句PreparedStatement对象所代表的SQL语句中的参数用问号(?)来表示,调用PreparedStatement对象的setXXX()方法来设置这些参数.setXXX()方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从1开始),第二个是设置的SQL语句中的参数的值WepullInformationServicePreparedStatementvsStatement代码的可读性和可维护性.PreparedStatement能最大可能提高性能:DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.(语法检查,语义检查,翻译成二进制命令,缓存)PreparedStatement可以防止SQL注入WepullInformationServicePreparedStatement接口3-1PreparedStatement接口(预编译的SQL语句)PreparedStatement用于提高运行时效率执行PreparedStatement对象比执行Statement对象快Statement接口PreparedStatementvsStatementWepullInformationServiceJDBCAPI小结1java.sql.DriverManager用来装载驱动程序,获取数据库连接。java.sql.Connection完成对某一指定数据库的联接j
本文标题:JDBC教学
链接地址:https://www.777doc.com/doc-3780144 .html