JDBC--数据库连接、注入攻击与防止攻击

数据库的连接与基本操作

public class JDBCDemo {
			public static void main(String[] args)throws ClassNotFoundException,SQLException{
				//1.注册驱动 反射技术,将驱动类加入到内容
				// 使用java.sql.DriverManager类静态方法 registerDriver(Driver driver)
				// Diver是一个接口,参数传递,MySQL驱动程序中的实现类
				//DriverManager.registerDriver(new Driver());
				//驱动类源代码,注册2次驱动程序
				Class.forName("com.mysql.jdbc.Driver");
				
				//2.获得数据库连接  DriverManager类中静态方法
				//static Connection getConnection(String url, String user, String password)  
				//返回值是Connection接口的实现类,在mysql驱动程序
				//url: 数据库地址  jdbc:mysql://连接主机IP:端口号//数据库名字
				String url = "jdbc:mysql://localhost:3296/mybase";
				String username="root";
				String password="123";
				Connection con = DriverManager.getConnection(url, username, password);
				
				//3.获得语句执行平台, 通过数据库连接对象,获取到SQL语句的执行者对象
				// con对象调用方法   Statement createStatement() 获取Statement对象,将SQL语句发送到数据库
				// 返回值是 Statement接口的实现类对象,,在mysql驱动程序
				Statement stat = con.createStatement();
				//	4.执行sql语句
				// 通过执行者对象调用方法执行SQL语句,获取结果
				// int executeUpdate(String sql)  执行数据库中的SQL语句, insert delete update
				// 返回值int,操作成功数据表多少行
				int row = stat.executeUpdate
						("INSERT INTO sort(sname,sprice,sdesc) VALUES('汽车用品',50000,'疯狂涨价')");
				System.out.println(row);
				
				//6.释放资源  一堆close()
				stat.close();
				con.close();
			}
		}

注入攻击

public class JDBCDemo2 {
			public static void main(String[] args)throws Exception {
				Class.forName("com.mysql.jdbc.Driver");
				String url = "jdbc:mysql://localhost:3296/mybase";
				String username = "root";
				String password = "123";
				Connection con = DriverManager.getConnection(url, username, password);
				Statement stat = con.createStatement();
				
				Scanner sc = new Scanner(System.in);
				String user = sc.nextLine();
				String pass = sc.nextLine();
				
		//执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败
		//		String sql = "SELECT * FROM users WHERE username='dsfsdfd' AND PASSWORD='wrethiyu' OR 1=1";
				String sql = "SELECT * FROM users WHERE username='"+user+"' AND PASSWORD='"+pass+"'";
				System.out.println(sql);
				ResultSet rs = stat.executeQuery(sql);
				while(rs.next()){
					System.out.println(rs.getString("username")+"   "+rs.getString("password"));
				}
				
				rs.close();
				stat.close();
				con.close();
			}
		}

PrepareStatement接口预编译SQL语句

public class JDBCDemo3 {
			public static void main(String[] args)throws Exception {
				Class.forName("com.mysql.jdbc.Driver");
				String url = "jdbc:mysql://localhost:3296/mybase";
				String username = "root";
				String password = "123";
				Connection con = DriverManager.getConnection(url, username, password);
				Scanner sc = new Scanner(System.in);
				String user = sc.nextLine();
				String pass = sc.nextLine();
				
				//执行SQL语句,数据表,查询用户名和密码,如果存在,登录成功,不存在登录失败
				String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?";
				//调用Connection接口的方法prepareStatement,获取PrepareStatement接口的实现类
				//方法中参数,SQL语句中的参数全部采用问号占位符
				PreparedStatement pst =  con.prepareStatement(sql);
				System.out.println(pst);
				//调用pst对象set方法,设置问号占位符上的参数
				pst.setObject(1, user);
				pst.setObject(2, pass);
				
				//调用方法,执行SQL,获取结果集
				ResultSet rs = pst.executeQuery();
				while(rs.next()){
					System.out.println(rs.getString("username")+"   "+rs.getString("password"));
				}
				
				rs.close();
				pst.close();
				con.close();
			}
		}

PrepareStatement接口预编译SQL语句执行修改

public class JDBCDemo {
			public static void main(String[] args) throws Exception{
				Class.forName("com.mysql.jdbc.Driver");
				String url = "jdbc:mysql://localhost:3296/mybase";
				String username="root";
				String password="123";
				Connection con = DriverManager.getConnection(url, username, password);	
				
				//拼写修改的SQL语句,参数采用?占位
				String sql = "UPDATE sort SET sname=?,sprice=? WHERE sid=?";
				//调用数据库连接对象con的方法prepareStatement获取SQL语句的预编译对象
				PreparedStatement pst = con.prepareStatement(sql);
				//调用pst的方法setXXX设置?占位
				pst.setObject(1, "汽车美容");
				pst.setObject(2, 49988);
				pst.setObject(3, 7);
				//调用pst方法执行SQL语句
				pst.executeUpdate();
				
				pst.close();
				con.close();
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值