JDBC六部曲
2015-09-19 00:42
155 查看
JDBC
l 什么是JDBC?
n Java DataBase Connectivity
l 接口有什么作用?
n 使程序“可插拔”,易于扩展。
n 接口是一套规范,程序员应该面向接口去调用,不需要关心接口底层的具体实现。
l JDBC的本质是一套规范一套接口,是SUN定义的J2EE规范之一。所有的java程序员面向JDBC接口调用,所有的数据库厂商程序员面向JDBC规范实现。实现类被称作“驱动”。所有的驱动都是以.jar结尾的文件。所以在编写JDBC程序之前需要将驱动配置到环境变量CLASSPATH中,如:
u CLASSPATH= .;F:\bjpowernode\MySQL\mysql-connector-java-5.0.8-bin.jar
u 注意配置后一定要重启启动cmd
l JDBC编程六步曲
n 注册驱动
n 获取数据库连接
n 获取数据库操作对象
n 执行SQL语句
n 如果执行的是查询语句,处理结果集
n 释放资源(在finally语句块中释放)
l 注册驱动的第二种方式
l 不修改java程序,做到动态平滑移植数据库
l 编写JDBC代码完成简单的用户登录业务。理解使用Statement数据库操作对象会存在SQL注入现象。思考:如何防止SQL注入。
l 使用预编译数据库操作对象PreparedStatement防止SQL注入。
l JDBC事务处理
l JDBC批处理操作
l 连接池初步
l 关于模糊查询
l 什么是JDBC?
n Java DataBase Connectivity
l 接口有什么作用?
n 使程序“可插拔”,易于扩展。
n 接口是一套规范,程序员应该面向接口去调用,不需要关心接口底层的具体实现。
l JDBC的本质是一套规范一套接口,是SUN定义的J2EE规范之一。所有的java程序员面向JDBC接口调用,所有的数据库厂商程序员面向JDBC规范实现。实现类被称作“驱动”。所有的驱动都是以.jar结尾的文件。所以在编写JDBC程序之前需要将驱动配置到环境变量CLASSPATH中,如:
u CLASSPATH= .;F:\bjpowernode\MySQL\mysql-connector-java-5.0.8-bin.jar
u 注意配置后一定要重启启动cmd
l JDBC编程六步曲
n 注册驱动
//创建驱动对象 java.sql.Driver driver = new com.mysql.jdbc.Driver(); //java.sql.Driver driver = new oracle.jdbc.driver.OracleDriver(); java.sql.DriverManager.registerDriver(driver); |
//URL格式: 协议---IP---Port---DBNAME //Mysql jdbc:mysql://127.0.0.1:3306/bjpowernode //Oracle jdbc:oracle:thin:@ 127.0.0.1:1521:bjpowernode String url = “jdbc:mysql://127.0.0.1:3306/bjpowernode”; String username = “root”; String password = “root”; java.sql.Connection conn = DriverManager.getConnection(url,username,password); |
Statement stmt = conn.createStatement(); |
String sql = “DELETE FROM EMP_BAK WHERE EMPNO=7369”; stmt.executeUpdate(sql); //执行insert,update,delete (DML) String sql = “SELECT ENAME,SAL FROM EMP”; ResultSet rs = stmt.executeQuery(sql); //执行查询语句(DQL) |
while(rs.next()){ //SELECT ENAME AS A,SAL AS B FROM EMP; //通过查询结果的字段位置获取数据,获取为字符串类型 String ename = rs.getString(1); //通过查询结果的字段位置获取数据,获取为指定类型 double sal = rs.getDouble(2); //通过查询结果的字段名称获取数据(推荐),获取为字符串类型 String ename = rs.getString(“A”); //通过查询结果的字段名称获取数据(推荐),获取为指定类型 double sal = rs.getDouble(“B”); } |
//释放原则:从小到大依次释放,分别try…catch… finally{ if(rs!=null){ try{rs.close();}catch(SQLException e){} } if(stmt!=null){ try{stmt.close();}catch(SQLException e){} } if(conn!=null){ try{conn.close();}catch(SQLException e){} } } |
Class.forName(“com.jdbc.mysql.Driver”); 原理: package com.mysql.jdbc; public class Driver{ try { DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } |
编写一个属性文件dbinfo.properties,文件内容如下: driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/bjpowernode username=root password=root 如果要连接其他数据库则修改该属性文件即可。 |
l 使用预编译数据库操作对象PreparedStatement防止SQL注入。
PreparedStatement优点: 1. PreparedStatement可以将SQL语句框架预先编译。用户传递信息过来之后,即使信息中含有SQL语句关键字,那么该信息也会被看做普通的字符串处理,不会当做SQL语句的一部分被编译进去,从而解决了SQL注入问题。 2. 批量执行同构的SQL语句PreparedStatement效率高,因为编译一次执行多次。 3. PreparedStatement是类型安全的。 |
JDBC默认情况下采用的是自动提交机制,每执行一条DML(insert,update,delete)语句就提交一次。在现实的业务逻辑中应该一个完整的业务(完整事务,批量的DML语句)执行结束之后再提交。若业务处理过程中某个DML语句执行失败,则应该全部回滚。代码应该如下控制: 1. conn.setAutoCommit(false); //自动提交关闭 2. conn.commit(); //完整业务结束之后手动提交 3. conn.rollback(); //出现异常之后回滚 |
批量执行同构的SQL语句应该采用JDBC提供的批处理。代码如下: 第一, 参数添加到batch中 ps.addBatch(); 第二, batch中的参数达到一定数目之后,批量发送batch中的参数 ps.executeBatch(); 第三, 清空batch ps.clearBatch(); |
为了提高(Java)Server连接数据库的效率,可以在JavaServer服务器中创建一个集合存储多个连接对象,该集合被称作“连接池”,用户如果访问服务器,那么服务器只需要从“连接池”中拿连接对象即可。连接池有如下属性: 1. 最大连接数(连接池中连接对象的上限) 2. 最小连接数(连接池中最少的连接对象数目) 3. 最大等待时间(客户如果获取不到空闲连接对象则进入等待状态,最大等待时间设置,如果超时则抛出异常。) 4. URL 5. username 6. password 7. driverclass |
String sql = “select table_name from user_tables where table_name like ?”; ps = conn.prepareStatement(sql); ps.setString(1,”%T%”); rs = ps.executeQuery(); |
相关文章推荐
- emacs搜索和替换
- nc +tar 传送文件
- 加密你的SQLite
- 奇妙的位运算
- ssh sshd scp 基于密钥认证登陆 双机互信
- spring的annotation-driven配置事务管理器
- POJ 1320 Street Numbers 佩尔方程
- PostGreSQL 结合 Hibernate 在项目中的使用小结
- Android刷新页面
- EmguCV使用Stitcher类来拼接图像
- minSdkVersion、API level 以及兼容包appcompat三者之间的关系
- 解析VC++ Name Mangling 机制
- [J2EE]The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 经济学中的那些法则 ~
- 经济学中的那些法则 ~
- Quick-cocos2d-x3.3 Study (八)--------- 物理世界
- window.opener和window.open用法
- 003_短信发送器
- UNIX/Linux C 程序员需要掌握的七种武器
- Tomcat启动不了的问题