WEB08_MySQL&JDBC

MySQL 

1.创建一张表

create table 表名(

字段名 类型(长度) [约束],

字段名 类型(长度) [约束],

字段名 类型(长度) [约束]

);

2.查看数据库表

创建完成后,我们可以查看数据库表   show tables;

查看表的结构    desc 表名;

3.删除表记录

说说delete与truncate的区别?

delete删除的时候是一条一条的删除记录,它配合事务,可以将删除的数据找回

truncate删除,它是将整个表摧毁,然后再创建一张一模一样的表。它删除的数据无法找回

delete删除,uid不会重置!而使用truncate操作,uid会重置。 因为truncate删除了表结构,然后再创建一张一模一样的表,所以再次插入数据的数据的时候从1开始。

 

JDBC

 JDBC原理

JDBC开发步骤

测试sql注入问题

1 什么是SQL

在需要用户输入的地方,用户输入的是SQL语句的片段,最终用户输入的SQL片段与我们DAO中写的SQL语句合成一个完整的SQL语句。例如用户在登录时输入的用户名和密码都是为SQL语句的片段。

public void login(String username, String password) {
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		try {
			con = JdbcUtils.getConnection();
			stmt = con.createStatement();
			String sql = "SELECT * FROM user WHERE " +
					"username='" + username + 
					"' and password='" + password + "'";
			rs = stmt.executeQuery(sql);
			if(rs.next()) {
				System.out.println("欢迎" + rs.getString("username"));
			} else {
				System.out.println("用户名或密码错误!");
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			JdbcUtils.close(con, stmt, rs);
		}		
	}

 下面是调用这个方法的代码: 

login("a' or 'a'='a", "a' or 'a'='a");

这行会使我们登录成功!因为是输入的用户名和密码是SQL语句片段,最终与我们的login()方法中的SQL语句组合在一起!我们来看看组合在一起的SQL语句: 

SELECT * FROM tab_user WHERE username='a' or 'a'='a' and password='a' or 'a'='a'

2  防止SQL

  1. 过滤用户输入的数据中是否包含非法字符;
  2. 分步校验!先使用用户名来查询用户,如果查找到了,再比较密码;
  3. 使用PreparedStatement。

3 PreparedStatement是什么

PreparedStatement叫预编译声明,PreparedStatement是Statement的子接口,你可以使用PreparedStatement来替换Statement。

PreparedStatement的好处:

  1. 防止SQL攻击;
  2. 提高代码的可读性,以可维护性;
  3. 提高效率。

4  PreparedStatement的使

  1. 使用Connection的prepareStatement(String sql):即创建它时就让它与一条SQL模板绑定;
  2. 调用PreparedStatement的setXXX()系列方法为问号设置值
  3. 调用executeUpdate()或executeQuery()方法,但要注意,调用没有参数的方法;
public void login1(String username, String password) throws ClassNotFoundException, SQLException {
		// 1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08", "root", "root");
		// 3.编写sql语句
		String sql = "select * from tbl_user where uname=? and upassword=?";
		// 4.创建预处理对象
		PreparedStatement pstmt = conn.prepareStatement(sql);
		// 5.设置参数(给占位符)
		pstmt.setString(1, username);
		pstmt.setString(2, password);
		// 6.执行查询操作
		ResultSet rs = pstmt.executeQuery();
		// 7.对结果集进行处理
		if (rs.next()) {
			System.out.println("恭喜您," + username + ",登录成功!");
			System.out.println(sql);
		} else {
			System.out.println("账号或密码错误!");
		}
		if (rs != null)
			rs.close();
		if (pstmt != null)
			pstmt.close();
		if (conn != null)
			conn.close();
	}

猜你喜欢

转载自blog.csdn.net/zhouboke/article/details/82845508