代码区

还是一个工具类

代码:

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. 200-Java语言基础-Java编程入门-006 | Java数组定义及使用(引用数据类型)

    一.数组概述和定义格式说明 为什么要有数组(容器): 为了存储同种数据类型的多个值 数组概念: 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引 ...

  2. 推荐模型DeepCrossing: 原理介绍与TensorFlow2.0实现

    DeepCrossing是在AutoRec之后,微软完整的将深度学习应用在推荐系统的模型.其应用场景是搜索推荐广告中,解决了特征工程,稀疏向量稠密化,多层神经网路的优化拟合等问题.所使用的特征在论文中 ...

  3. [倍增]luogu P4155 [SCOI2015]国旗计划

    题面 https://www.luogu.com.cn/problem/P4155 问在环上最少取多少个区间能完全覆盖环 分析 首先发现是环,先把端点变为2n方便处理,注意离散化 其次要删去贡献不如其 ...

  4. 【安全研究】Domain fronting域名前置网络攻击技术

    出品|MS08067实验室(www.ms08067.com) 千里百科 Domain Fronting基于HTTPS通用规避技术,也被称为域前端网络攻击技术.这是一种用来隐藏Metasploit,Co ...

  5. 使用 Android Studio 开发 widget 安卓桌面插件

    •What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...

  6. Python代码简化

    让代码更Pythonic 当然不要过分追求简洁,不然阅读的人就遭殃了, 部分逻辑复杂的情况还应按照清晰的逻辑脉络去写方便阅读, 毕竟我们是用代码实现功能然后维护,而不是单单的炫技. ######### ...

  7. [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.2 考虑电感铜损

    3.2 考虑电感铜损 可以拓展图3.3的直流变压器模型,来对变换器的其他属性进行建模.通过添加电阻可以模拟如功率损耗的非理想因素.在后面的章节,我们将通过在等效电路中添加电感和电容来模拟变换器动态. ...

  8. Java生鲜电商平台-API接口设计之token、timestamp、sign 具体设计与实现

    转载:https://www.cnblogs.com/jurendage/p/12653865.html 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安 ...

  9. Unity 渲染流水线 :CPU与GPU合作创造的艺术wfd

    前言 对于Unity渲染流程的理解可以帮助我们更好对Unity场景进行性能消耗的分析,进而更好的提升场景渲染的效率,最后提升游戏整体的性能表现 Unity的游戏画面的最终的呈现是由CPU与GPU相互配 ...

  10. java中的|=符号

    今天看mybaits源码的时候,发现了这个特殊的符号用法,|=. for (ParameterMapping pm : boundSql.getParameterMappings()) { Strin ...