代码区

还是一个工具类

代码:

package cn.itcats.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//工具类 一个实例都不会有
public final class JdbcUtils {
// 优点修改的时候只需改这一处 私有对你以后类的演化有好处
private static String url = "jdbc:mysql://localhost:3306/test";
private static String user = "root";
private static String password = "123456";
private JdbcUtils() {

}

static {//放入静态代码块 只执行一次
try {// 优化的目的注册驱动只能进行一次
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}

}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}

public static void free(ResultSet rs,Statement st,Connection conn) {
try {
if(rs!=null)
rs.close();
}catch(SQLException e){
e.printStackTrace();
}finally {
try {
if(st!=null)
st.close();
}catch(SQLException e){
e.printStackTrace();
}finally {
if(conn!=null)
try {
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}

}

在这里我给        PreparedStatement   和   Statement   执行的时间做了比较      PreparedStatement  写法的优点较多

代码仅供参考:

package cn.itcats.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SQLInject {//C创建 R读取 U更新 D删除
public static void main(String[] args) throws Exception{
read1("Jack");
System.out.println("********************************");
read("Jack");
}

static void read1(String name) throws SQLException {
Connection conn = null;
/*
* 与Statement区别 程序修改引入PreparedStatement接口 做一些预处理 特殊字符过滤 系统的优化
* 解决SQl注入的问题
* 在不考虑SQl注入问题基础上 sql语句执行次数越多 那么PrepareStatement 效率较高(只有在数据库连接没有关闭的条件下)
*/
PreparedStatement ps = null;
ResultSet rs = null;
try {
//2建立连接 最耗时
conn = JdbcUtils.getConnection();
//3创建语句 不能用拼字符串的方式 很不安全
long start1 = System.currentTimeMillis(); //毫秒
String sql = "select id,name,birthday,money from user where name=?"; //and id=?and....
ps = conn.prepareStatement(sql);
ps.setString(1, name);
// 1,name 第一个问号替换 name
//4执行语句
System.out.println(sql);
rs = ps.executeQuery(); // 构造的时候已经给他了写不写sql都一样 不需要写sql

//5处理结果
while(rs.next()) { //行遍历
System.out.println( //四列 代码灵活性提高了
rs.getObject("id") + "\t" + rs.getObject("name") + "\t" +
rs.getObject("birthday") + "\t" + rs.getObject("money"));
}
long end1 = System.currentTimeMillis();
System.out.println("read1 " + (end1 - start1));


} finally {
JdbcUtils.free(rs, ps, conn);

}

}
static void read(String name) throws SQLException {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//2建立连接
conn = JdbcUtils.getConnection();
//3创建语句
long start = System.currentTimeMillis();
st = conn.createStatement();
//4执行语句
String sql = "select id,name,birthday,money from user where name='"
+ name + "'";

rs = st.executeQuery(sql);
//建议不要*不然会都查出来 可读性不好 写列名 维护成本低

//5处理结果
while(rs.next()) { //行遍历
System.out.println( //四列 代码灵活性提高了
rs.getObject("id") + "\t" + rs.getObject("name") + "\t" +
rs.getObject("birthday") + "\t" + rs.getObject("money"));
}
long end = System.currentTimeMillis();
System.out.println("read " + (end - start));


} finally {
JdbcUtils.free(rs, st, conn);

}
}
}

SQL注入,PreparedStatement和Statement的更多相关文章

  1. jdbc防止sql注入-PreparedStatement

    jdbc防止sql注入 jdbc防止sql注入-PreparedStatement public List getUserByName(String name,String password){    ...

  2. 利用PreparedStatement预防SQL注入

    1.什么是sql注入 SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为. 例如登录用户名采用  ' or 1=1 or username=‘,后台数据查询语句就变成 ...

  3. 1021上课演练----SQL注入与避免(银行系统)

    package com.bank; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Dat ...

  4. JAVA jdbc(数据库连接池)学习笔记(二) SQL注入

    PS:今天偶然间发现了SQL的注入...所以就简单的脑补了一下,都是一些简单的例子...这篇写的不怎么样...由于自己没有进行很深的研究... 学习内容: 1.SQL注入的概念...   所谓SQL注 ...

  5. Java学习之路- SQL注入

    用户名: __________ 密码:——————— 假如没有使用预处理的Statement 对象 拼接字符串查数据库的话,易收到sql注入攻击: 例如说 : mysql 中   #代表的是单行注释 ...

  6. Web安全篇之SQL注入攻击

    在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...

  7. sql注入二

    大家早上好!今天由我给大家带来<web安全之SQL注入篇>系列晨讲,首先对课程进行简单介绍,SQL注入篇一共分为三讲:        第一讲:“纸上谈兵:我们需要在本地架设注入环境,构造注 ...

  8. MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题

    JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...

  9. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  10. 在JDBC中使用PreparedStatement代替Statement,同时预防SQL注入

    本篇讲诉为何在JDBC操作数据库的过程中,要使用PreparedStatement对象来代替Statement对象. 在前面的JDBC学习中,对于Statement对象,我们已经知道是封装SQL语句并 ...

随机推荐

  1. vue+vuex 修复数据更新页面没有渲染问题

    不解: 为什么在关闭开关后,已经将data里的属性和vuex属性初始化后,页面就是不响应??? 问题: 由于切换路由后,获取到vuex的数据在created中赋值到data相对应的属性中,在关闭开关后 ...

  2. gtk+2.0中函数set_widget_font_size()函数在编译时未定义的解决办法

    自己写一个头文件即可,代码如下: 在.c文件中包含该头文件即可

  3. 使用C# (.NET Core) 实现模板方法模式 (Template Method Pattern)

    本文的概念内容来自深入浅出设计模式一书. 项目需求 有一家咖啡店, 供应咖啡和茶, 它们的工序如下: 咖啡: 茶: 可以看到咖啡和茶的制作工序是差不多的, 都是有4步, 其中有两步它们两个是一样的, ...

  4. 亲测有效,解决80端口被svchost.exe进程占用的问题,网上的方法不行,可以试试这个

    先说网上无效的方法(个人尝试无效,不具有代表性): 网上第一个说法:把IIS给关了,Windows10系统本身IIS是处于禁用状态的,并且没有额外安装IIS和启动IIS. 网上第二个说法:和SQL S ...

  5. 学习C#第二天

    变量 变量是什么? 在数学中,我们对变量的概念有一定的了解和认识,如y=x^2,其中,x,y都是变量. 定义 一个变量就是存储区(内存)中的一个存储单元 变量的声明及初始化 使用变量的步骤 声明一个变 ...

  6. 致命错误:Python.h:没有那个文件或目录

    yum search python3 | grep dev sudo yum install python3xxx-devel

  7. HTML5本地存储 localStorage操作使用详解

    1.html5几种存储形式 本地存储(localStorage && sessionStorage) 离线缓存(application cache) indexedDB 和 webSQ ...

  8. Markdown部分用法总结

    1.Markdown数学公式&符号 2.Cmd Markdown 公式指导手册

  9. 软工案例分析作业-CSDN

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 案例分析作业要求 我在这个课程的目标是 提升软件开发能力与团队意识 这个作业在哪个具体方面帮助我实 ...

  10. 一、python学习-基础语法

    1.计算机文件大小单位 b = bit 位(比特) 位代表 0 1 B = Byte字节 1Byte = 8 bit //一个字节等于8位 1KB = 1024B 1MB = 1024KB 1GB = ...