sql注入及事务

Statement会有一个关于sql注入的bug ,所以基本不使用

一般使用PreparedStatement

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.huawei.utils.DBUtil;

public class TestJDBC02 {

public static void testPreparedStatement() throws Exception{

/**
* 预处理sql语句 不会出现sql注入的bug
*/
Connection connection = DBUtil.getConnection();

String sql = "select * from users where username=?";
//得到sql语句的 预处理对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.setObject(1, "admin1‘ or 1=1 or username=‘");

ResultSet rs = preparedStatement.executeQuery();

while(rs.next()){
System.out.println(rs.getObject(1));
}

DBUtil.close(rs,preparedStatement,connection);

}

public static void testTransaction() throws Exception{
Connection connection = DBUtil.getConnection();
//默认 事务是自动提交的
//要达到手动提交的目的 必须关闭 自动提交
connection.setAutoCommit(false);
PreparedStatement ps = null;
PreparedStatement ps1 = null;
try{
ps = connection.prepareStatement("insert into A (a) values (‘lisi21‘)");
ps1 = connection.prepareStatement("insert into B (b) values (‘lisi123‘)");
ps.executeUpdate();
ps1.executeUpdate();
//执行完成以后 提交到数据库
connection.commit();

}catch (Exception e) {
//如果产生任何的错误 则回滚
connection.rollback();
e.printStackTrace();
}
DBUtil.close(ps,ps1,connection);
}

public static void main(String[] args) throws Exception {
testTransaction();
}

}

时间: 2024-11-06 23:35:43

sql注入及事务的相关文章

06 数据库入门学习-视图、sql注入、事务、存储过程

一.视图 1.什么是视图 视图本质是一张虚拟的表 2.为什么要用 为了原表的安全 只要有两大功能 1.隐藏部分数据,开放指定数据 2.视图可以将查询结果保存,减少sql语句的次数 特点: 1.视图使用永久保存的,而且保存的仅仅是一条 as sql语句 2.每次对视图的查询,都是再次执行了保存的sql语句 3.对于视图的任何修改都会同步到原表 3.如何使用 语法: create view 视图名 as select * from 原表名; 验证:对视图的任何修改会改变原表  验证 二.sql注入

sql注入,预编译和事务

sql注入: 事务:

PDO的基本应用【访问不同的数据库】【事务功能】【防止SQL注入】

PDO 1.访问不同的数据库2.自带事务功能3.防止SQL注入 访问  自带的事务功能展示, 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"&

游标操作/pymysql事务/sql注入/索引

游标操作 import pymysql from pymysql.cursors import DictCursor # 1)建立数据库连接对象 conn conn = pymysql.connect(user='root', passwd='root', db='oldboy') # 2)通过 conn 创建操作sql的 游标对象 cursor = conn.cursor(DictCursor) # 3)编写sql交给 cursor 执行 sql = 'select * from t1' #

jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一个客户可以对应多个订单,一个订单只属于一个客户! * 建表原则: * 在多的一方创建一个字段,作为外键指向一的一方的主键!!! * 多对多: * 一个学生可以选择多个课程,一个课程也可以被多个学生选择! * 建表原则: * 创建第三张表,第三张表中放入两个字段,作为外键分别指向多对多双方的主键! *

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = conn

预处理prepareStatement是怎么防止sql注入漏洞的?

序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStatement的预编译和防止SQL注入功能 大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入. 用法就是如下边所示: String sql="update cz_zj_d

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

问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = conn

初探SQL注入

1.1注入语句(通过时间注入函数) 数据库名称 localhost:8080/ScriptTest/userServlet?username='union SELECT IF(SUBSTRING(current,1,1)=CHAR(101),BENCHMARK(10000000,ENCODE('sasssG','zcxczx')),null),count(*) FROM (SELECT Database() as current) as tbl;--  password=W 判断该数据库的系统用