SQL增删改查、SQL注入、事务

原创 2017年10月13日 16:17:36

SQL注入:
SELECT * FROM user WHERE name=”abcd” and password=”“;
当password设置为1234” or “1”=”1”;
SELECT * FROM user WHERE name=”abcd” and password=”1234” or “1”=”1”;
所以在JDBC中,使用?替代参数

事务写法:

将获取到的连接的自动提交关闭就OK
Connection con=...;
con.setAutoConnit(false);
//操作完成之后再提交
con.commit;

JavaBean建立

public class Student {
    private Integer Id;
    private String Name;
    private Integer Cno;

    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        Id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public Integer getCno() {
        return Cno;
    }

    public void setCno(Integer cno) {
        Cno = cno;
    }

    @Override
    public String toString() {
        return "Student [Id=" + Id + ", Name=" + Name + ", Cno=" + Cno + "]";
    }
}

数据库资源封装:

public class DataSource {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://192.168.216.3:3306/eclipse?useUnicode=true&characterEncoding=utf8";
    public static final String USER = "root";
    public static final String PASSWORD = "123456";
}
//我的数据库在虚拟机里,端口号和账号密码如上

增删改查封装:

public class jdbcutil {
    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName(util.DataSource.DRIVER);
            con = DriverManager.getConnection(util.DataSource.URL, util.DataSource.USER, util.DataSource.PASSWORD);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return con;
    }

    public static void closeAll(ResultSet rs, PreparedStatement pstmt, Connection con) {
        try {
            if (rs != null)
                rs.close();
            if (rs != null)
                pstmt.close();
            if (rs != null)
                con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static int executeUpdate(String sql, Object... params) {
        int result = 0;
        Connection con = getConnection();
        PreparedStatement pstmt = null;
        try {
            pstmt = con.prepareStatement(sql);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
            }
            result = pstmt.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            util.jdbcutil.closeAll(null, pstmt, con);
        }
        return result;
    }

    public static <T> List<T> executeQuery(String sql, RowMap<T> rowmap, Object... params) {
        Connection con = getConnection();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        List<T> result = new ArrayList<>();
        try {
            pstmt = con.prepareStatement(sql);
            if (params != null) {
                for (int i = 0; i < params.length; i++) {
                    pstmt.setObject(i + 1, params[i]);
                }
            }
            rs = pstmt.executeQuery();
            while (rs.next()) {
                T t = rowmap.RowMapping(rs);
                result.add(t);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            closeAll(rs, pstmt, con);
        }
        return result;
    }
}

接口定义:

public interface RowMap<T> {
    public T RowMapping(ResultSet rs);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

PHP实现增删改查以及防SQL注入

最近项目调研时,需要在集成板子上做个配置的网页,板子上装的是linux系统,配置信息在一个Sqlite数据库中,经过讨论大家决定用PHP做这个网页。由于项目组没一个会PHP的,所以安排我调研下写个De...
  • pfe_Nova
  • pfe_Nova
  • 2014年07月12日 20:57
  • 4650

对输入进行长度限制和字符过滤,防止SQL注入

长度限制和字符过滤 SQL注入攻击的总体思路: 发现SQL注入位置;判断服务器类型和后台数据库类型;确定可执行情况 对于有些攻击者而言,一般会采取sql注入法。下面我也谈一下自己关于...
  • dongge825
  • dongge825
  • 2013年12月30日 15:34
  • 5027

sql的delete删除和事务

一般都是 delete from table  where table.字段 = ... 如果table使用别名,则应该: DELETE a from ( select *,ROW_NUMBER...
  • DING135DING
  • DING135DING
  • 2015年07月30日 14:11
  • 1369

SQL Server数据库增删改查等语句实例(1)

查询语句前30
  • H_lukong
  • H_lukong
  • 2016年10月15日 19:49
  • 1656

SQL 增删改查(详细)

一、增:有2种方法1.使用insert插入单行数据: insert [into] [列名] values   insert into Strdents (name,age) values ('a...
  • qq_17326933
  • qq_17326933
  • 2015年08月14日 00:16
  • 1018

SQL Server 基本操作之增删改查

回顾一些学习和使用的数据库基础知识: 首先看下创建一个数据库操作类: #pragma once #import "C:\Program Files\Common Files\System\ADO\ms...
  • w1012747007
  • w1012747007
  • 2017年07月16日 13:08
  • 495

SQL Server数据库增删改查等语句实例(3)

增删改查(约束索引等)
  • H_lukong
  • H_lukong
  • 2016年10月23日 20:37
  • 1018

SQL注入测试实例分析

分享到一键分享QQ空间新浪微博百度云收藏人人网腾讯微博百度相册开心网腾讯朋友百度贴吧豆瓣网搜狐微博百度新首页QQ好友和讯微博更多...百度分享脚 本 之 家 www.jb51.net脚本云 专题 素材...
  • yiluyangguang1234
  • yiluyangguang1234
  • 2015年06月25日 13:20
  • 3507

sql常用语句整理(包括增删改查)

一、插入(复制)表数据 1、INSERT INTO 语句 (1)插入新的一行数据 INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10'...
  • yjb7268888
  • yjb7268888
  • 2015年12月10日 17:16
  • 3442

SQL注入攻击实例

一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试。这是安全评估的一个部分,所以尽管我们之前没有使用过SQL注入来渗透网络,但对其概念也相当熟悉了。最后我们在这项任务中大获成功,现在...
  • u012868901
  • u012868901
  • 2016年05月26日 15:17
  • 8475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL增删改查、SQL注入、事务
举报原因:
原因补充:

(最多只允许输入30个字)