《jdbc3Statement的sql注入教学文稿》由会员分享,可在线阅读,更多相关《jdbc3Statement的sql注入教学文稿(6页珍藏版)》请在金锄头文库上搜索。
1、jdbc3Statement的sql注入精品文档package cn.itcast.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JdbcUtils /*属性,方法,等能定义成私有的就定义成私有的, * 这样在后期修改的时候就会少影响到其他的*/private static String url = jdbc:mysql:/loca
2、lhost:3306/user;private static String user = root;private static String password = 123456;/*防止别人直接访问这个类的方式私有化构造方法*/private JdbcUtils()/注册驱动,保证注册驱动这一块只会做一次。/注册驱动二:通过键值对建立连接。如果注册多个在后面一个字符串后面用冒号分割开就行了。/System.setProperty(jdbc.drivers,com.mysql.jdbc.Driver:驱动二.);/注册方式三:通过类名称,将类转载到虚拟机上来。这里不一定有实例。static t
3、ryClass.forName(com.mysql.jdbc.Driver);catch(ClassNotFoundException e)throw new ExceptionInInitializerError(e);/创建连接public static Connection getConnection() throws SQLExceptionreturn DriverManager.getConnection(url,user,password);/释放资源public static void free(ResultSet rs,Statement st,Connection conn
4、) /为了让每个关闭资源的操作都被执行,这里每个都要通过trycatch关闭tryif(rs!=null)rs.close();catch(SQLException e)e.printStackTrace();finallytryif(st!=null)st.close();catch(SQLException e)e.printStackTrace();finallyif(conn!=null)tryconn.close();catch(SQLException e)e.printStackTrace();package cn.itcast.jdbc;import java.sql.Conn
5、ection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.Statement;public class SQLInject /* * param args * throws Exception */public static void main(String args) throws Exception / read(zha);/ read(or 1 or);/这里的1表示true,sql注入,要防止这种工作使用:PreparedStatement ps/ =null;read(zha)
6、;/* * 根据传入的名字来查 preparedStatement还会检查语法等。 preparedStatement的优点: 1.防止sql注入 * 2.提高执行速度,Statemen会使数据库频繁编译SQL,可能造成数据库 缓冲区溢出。 * 3.数据库和驱动可以对PreparedStatement进行优化,(只有在相关联的数据库连接没有关闭的情况下) * 带有参数的尽量使用preparedStatement来使用。 * * */static void read(String name) throws Exception Connection conn = null;PreparedStat
7、ement ps = null;ResultSet rs = null;try / 2.创建连接conn = JdbcUtils.getConnection();/ String sql =/ select id,name,money,birthday from user where name=+name+;/ 为了防止SQL注入,这是得使用以下方式解决了。String sql = select id,name,money,birthday from user where name=?;/* 告诉PreparedStatement哪个问好到底是什么。表示第几个问好,用name替代第几个 */p
8、s.setString(1, name);/* * 3创建语句,它的作用是在构造的时候对一些字符做特殊的处理,过滤。 这是在执行的时候就不用给它了 */ps = conn.prepareStatement(sql);/ 4执行语句rs = ps.executeQuery();/ 5处理结果while (rs.next() System.out.println(rs.getObject(id) + t+ rs.getObject(name) + t+ rs.getObject(birthday) + t+ rs.getObject(money); finally /工具类中使用的是statement,这里是preparedStatement,这样仍然是这样。JdbcUtils.free(rs, ps, conn);收集于网络,如有侵权请联系管理员删除