## JDBC ## # 基本概念; >> 是一个针对各大数据库的接口, 由SUN公司定义的一个用Java操作数据库的规范; >> Java Data Base Connectivit |-- java.sql |-- javax.sql # 基本开发步骤; >> 注册驱动; |-- DriverManager.registerDriver(Driver driver); |-- 形参接收一个数据库驱动; |-- 数据库驱动的实现类; > 它是一个具体数据库的实现类; > 置于数据库jar包中的Driver类当中; > 使用时导入即可; >> 获取与数据库的联接; |-- DriverManager.getConnection(String url,String user,String password); |-- url 联接数据库的联接字符串; 指定联接的端口; |-- 格式;jdbc:mysql://...(参考MySQL文档); |-- user 登录数据库服务器的用户名; |-- password 联接数据库的密码; >> 得到代表发送和执行SQL语句的对象 --- Statement; |-- createStetement(); >> 执行语句; |-- execute(); >> 处理查询结果; >> 释放占用资源; |-- 先关结果集 |-- 再关Stetement |-- 最后关Connection # 结果集 --- ResultSet >> 用于存储查询结果的一个集合,自身带有方法可以用于处理对其中数据结果的操作; >> 注意事项; |-- JDBC的操作中没有"0"的概念; # JDBC的优化; >> 对于注册的优化; 通过查看源码,发现Driver类在加载的时候已经通过静态代码块注册了一次, 当我们再自己手写DriverManager.registerDriver(Driver driver); 时,会 再进行一次注册; |-- Class.forName("com.mysql.jdbc.Driver"); > 避免了对jar包的依赖; > 可以结合配置文件使用; >> 对于获取联接的优化; |-- getConnection(url,proerties); |-- 通过参考MYSQL文档决定用户名和密码的键名如何定义; >> 对于关闭资源的操作需要放到finally当中; >> 对于JDBCUtil工具类的抽取; ## 工厂设计模式 ## >> 通过一个工厂类来完成具体业务类对象的创建; >> 将业务类具体的实现对象使用配置文件的方式保存起来; ## SQL注入攻击 ## #基本原理; >> 通过在用户名栏当中使用一个结果始终为true的字符串; 会导致服务器在不判断用户名和密码是否匹配的情况就直接进行登录操作; #避免方式; >> PreparedStatement; |-- 基本概念; > 可以实现预编译; > 即将sql语句事先进行编译,保证传入的数据一定是一个值; |-- 格式; |-- 优点,提高了程序的执行效率 避免了sql语句注入攻击; >> 具体使用方式; PreparedStatement st= con.prepareStatement(sql);