代码区

还是一个工具类

代码:

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 Element-ui el-menu 左侧导航条

    <template> <!--实现左侧导航条动态渲染(三级)--> <el-menu class="el-menu-vertical-demo" @o ...

  2. 深入理解Java并发框架AQS系列(一):线程

    深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一.概述 1.1.前言 重剑无锋,大巧不工 读j.u.c包下的源码,永远无法绕开的经典 ...

  3. 2019 GDUT Rating Contest II : Problem F. Teleportation

    题面: Problem F. Teleportation Input file: standard input Output file: standard output Time limit: 15 se ...

  4. arcgis10.2 的安装与离线发布地图

    一.ArcGIS for Desktop安装 ArcGIS安装 方法/步骤1:LicenseManager安装 1.首先要下载Arcgis 10.2软件,很大大约有4个多G.下载后可以用虚拟光驱,DA ...

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

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

  6. .net 预处理指令符的使用

    目录 什么是预处理指令符? 预处理指令符的使用 自定义指令符 使用Visual Studio快速定义指令符 定义指令符区域 什么是预处理指令符? 当C#编译器找到一条预处理指令#if,最后找到一条指令 ...

  7. vue-cli2 生成的项目打包优化(持续学习中)

    1.昨天看到自己的项目每次打包后都是30M左右,就觉得这个打包后的dist文件太大了,能不能小点呢, 然后就看网上的资料,提供了好多优化的办法,但是我只用了一个,后期再不断的优化吧. 打开工程项目文件 ...

  8. Python简单实现杨辉三角

    n=input("请输入要打印的行数")n=int(n)for x in range(0,n+1): p=1 print(''.rjust(n-x),end="" ...

  9. TCP的client和server的简单连接

    server: import socket as s import threading as t bind_ip = "0.0.0.0" bind_port = 80#配置服务器监 ...

  10. Leedcode算法专题训练(位运算)

    https://www.cnblogs.com/findbetterme/p/10787118.html 看这个就完事了 1. 统计两个数的二进制表示有多少位不同 461. Hamming Dista ...