【Java精品源码栏目提醒】:网学会员--在 Java精品源码编辑为广大网友搜集整理了:韩顺平_jdbc__课件 - 其它资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
主讲 韩顺平主讲:韩顺平email:hanshunpingtsinghua.org.cn 主讲 韩顺平jdbc 开发 主讲 韩顺平JDBC简介 数据库驱动 SUN公司为统一对数据库的操作,定义了一套
Java操 作数据库的规范,称之为JDBC。
应用程序 应用程序 JDBC MySQL驱动 Oracle驱动 MySQL驱动 Oracle驱动 MySQL Oracle MySQL Oracle 主讲 韩顺平JDBC简介 JDBC全称为:
Java Database Connectivity(
java 数据库连接),它主要由接口组成。
组成JDBC的2个包:
java.sql javax.sql 开发JDBC应用需要以上2个包的支持外,还需要导 入相应JDBC的数据库实现即数据库驱动 ojdbc.jar mysq/mysql-connector-
java-5.1.6-bin.jar/ sql server 有三 个包。
主讲 韩顺平第一个JDBC程序 编写一个程序,这个程序从user1表中读取数据,并打印 在命令行窗口中。
一、搭建实验环境 : 1、在oracle中创建一个库,并创建user1表和插入表的数据。
2、新建一个
Java工程,并导入数据驱动。
二、编写程序,在程序中加载数据库驱动 id number 主键 自增长 DriverManager. registerDriverDriver driver name varchar230 Class.forName“oracle.jdbc.driver.OracleDriver” passwd varchar250 email varchar2100 birthday date 三、建立连接Connection age number3 Connection conn DriverManager.getConnectionurluserpass 四、创建用于向数据库发送SQL的Statement对象,并发送sql Statement st conn.createStatement ResultSet rs st.excuteQuerysql 五、从代表结果集的ResultSet中取出数据,打印到命令行窗口 六、断开与数据库的连接,并释放相关资源 主讲 韩顺平程序详解—DriverManagerJdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个类的常用方法: DriverManager.registerDrivernew OracleDriver,注意: 在实际开发中,并不推荐采用这个方法注册驱动。
查看Driver 的源代码可以看到,如果采用此种方式,会导致驱动程序加 载两次,也就是在内存中会有两个Driver对象。
推荐方式: Class.forName“oracle.jdbc.driver.OracleDriver”采用此种方 式不会导致驱动对象在内存中重复出现,并且采用此种方式, 程序仅仅只需要一个字符串,不需要import驱动的API,这样 可使程序不依赖具体的驱动,使程序的灵活性更高。
DriverManager.getConnectionurl user password,根据 url获取数据库的链接。
主讲 韩顺平数据库URL URL用于标识数据库的位置,程序员通过URL地址告诉 JDBC程序连接哪个数据库,URL的写法为: jdbc:oracle:〔〕:localhost:1521:orcl 协议 子协议 主机:端口 数据库 常用数据库URL地址的写法: Oracle— jdbc:oracle:thin:localhost:1521:sid SqlServer—jdbc:microsoft:sqlserver://localhost:1433 DatabaseNamesid MySql—jdbc:mysql://localhost:3306/orcl 主讲 韩顺平程序详解—Connection接口Jdbc程序中的Connection,它用于代表数据库的链接,Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法: createStatement:创建向数据库发送sql的statement对象。
prepareStatementsql :创建向数据库发送预编译sql的 PrepareSatement对象。
prepareCallsql:创建执行存储过程的callableStatement对象。
setAutoCommitboolean autoCommit:设置事务是否自动提交。
commit :在链接上提交事务。
rollback :在此链接上回滚事务。
System.out.printl接口引用的某个类实例 将输出该类的全名十六机制的hash值该方法常用于查看某个接口引用指向的真正对象实例的类型是什么 面试常考 主讲 韩顺平程序详解—ResultSet Jdbc程序中的ResultSet用于代表Sql语句的执行结果。
Resultset封装执行结果时,采用的类似于表格的方式。
ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
示图ResultSetResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法: 获取任意类型的数据 getObjectint index getObjectstring columnName 获取指定类型的数据,例如: getStringint index getStringString columnName 提问:数据库中列的类型是varchar2,获取该列的数据调用什么 方法?Int类型呢?bigInt类型呢?Boolean类型?详见后ppt 主讲 韩顺平常用数据类型转换表oracle SQL类型 Jdbc对应方法 返回类型 number getBoolean Boolean number getByte byte number getShort short number getInt int number getLong long CHARNVARCHAR2VARCHAR2 getString String Textclob Blob getClob getBlob Clob Blob DATE getDate
java.sql.Date TIMESTAMP getTimestamp
java.sql.Timestamp number getFloat float number getDouble double 问题: 如果 oralce number3 列存放了 999 而在
java中 使用 rs.getByte 主讲 韩顺平程序详解—ResultSet ResultSet还提供了对结果集进行滚动的方法: next:移动到下一行 Previous:移动到前一行 absoluteint row:移动到指定行 row从1开始计算 beforeFirst:移动resultSet的最前面。
afterLast :移动到resultSet的最后面。
主讲 韩顺平程序详解—释放资源Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSetStatement和Connection对象。
特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。
Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。
主讲 韩顺平使用JDBC对数据库进行CRUDJdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。
Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数即增删改语句导致了数据库几行数据发生了变化。
Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
演示下面的综合练习练习:编写程序对Users表进行增删改查操作。
练习:编写工具类简化CRUD操作。
主讲 韩顺平CRUD操作-create使用executeUpdateString sql方法完成数据添加操作,示例操作: Statement st conn.createStatement String sql insert into user…. values….. int num st.executeUpdatesql ifnum0 System.out.println插入成功!!! 主讲 韩顺平CRUD操作-update使用executeUpdateString sql方法完成数据更新操作,示例操作: Statement st conn.createStatement String sql “update user set name‘’ where name‘’ int num st.executeUpdatesql ifnum0 System.out.println“修改成功!!! 主讲 韩顺平CRUD操作-delete使用executeUpdateString sql方法完成数据删除操作,示例操作: Statement st conn.createStatement String sql “delete from user where id1 int num st.executeUpdatesql ifnum0 System.out.println“删除成功!!! 主讲 韩顺平CRUD操作-retrieveread使用executeQueryString sql方法完成数据查询操作,示例操作: Statement st conn.createStatement String sql “select from user where id1 ResultSet rs st.executeUpdatesql whilers.next //根据获取列的数据类型,分别调用rs的相应方法 //映射到
java对象中 主讲 韩顺平实例练习—新闻管理系统用model1模式完成新闻管理系统,实现如下需求: 1、详见新闻管理系统.docSQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。
1、statement存在sql注入攻击问题,例如登陆用户名采用 or 11 or name‘ 2、防范 SQL 注入,需要采用PreparedStatement取代Statement。
3、或者通过程序来控制,这个比较麻烦推荐使用PrepareStatement来 完成.根据需要看看是否将 mode1改成mode2模式界面与后台分离.使用execl做出程序框架图. 主讲 韩顺平PreparedStatementPreperedStatement是Statement的子接口,它的实例对象可以通过调用Connection.preparedStatement方法获得,相对于Statement对象而言: PreperedStatement可以避免SQL注入的问题。
Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢 出。
PreparedStatement 可对SQL进行预编译,从而提高数据库 的执行效率。
并且PreperedStatement对于sql中的参数,允许使用占位符的形 式进行替换,简化sql语句的编写。
练习:使用PreparedStatement改写前面的Statement 主讲 韩顺平jdbc 开发 之 mysql