MYSQL阶段_DAY01~DAY11(附笔记)

注意:(数据表如下)

sort表:

MYSQL阶段_DAY01~DAY11(附笔记)_第1张图片

user表:

MYSQL阶段_DAY01~DAY11(附笔记)_第2张图片

zhangwu表:

 MYSQL阶段_DAY01~DAY11(附笔记)_第3张图片

1.Part1

 JDBC操作数据库的步骤
    1.注册驱动
        告知JVM使用的是哪一个数据库的驱动,
        把驱动类的对象交给DriverManager管理,用于后面创建连接等使用。
    
    2.获得连接
    使用JDBC中的类,完成对MySOL数据库的连接
    
    3.获得语句执行平台
    通过连接对象获取对SQL语句的执行者对象
    
    4.执行sq1语句
    使用执行者对象,向我们数据库执行SOL语句
    获取到数据库的执行后的结果
    
    5.处理结果
    
    6.释放资源 一堆close()

public class JDBCDemo01 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		// 1.注册驱动 ,使用反射的方式(注册驱动,把驱动类的对象交给DriverManager管理,用于后面创建连接等使用。
		Class.forName("com.mysql.cj.jdbc.Driver");

		// 2.获得数据库连接
		String url = "jdbc:mysql://localhost:3306/hanstudy";
		String user = "root";
		String password = "123456";

		Connection con = DriverManager.getConnection(url, user, password);

		System.out.println("con:" + con);

		// 3.获取执行sql语句对象(获得语句执行平台,即通过连接对象获取对SQL语句的执行者对象)
		Statement state = con.createStatement();

		// 4.执行sq1语句 与 处理结果
		/*
		 *  增删改:int executeUpdate(String sql); --执行insert update delete语句.
		 * 
		 *  查询:ResultSet executeQuery(String sql); --执行select语句.
		 * 
		 */

		// (1)增加
		// int i = state.executeUpdate("insert into sort values(7,'汽车用品',766)");//以这个为例,注意是单引号
		// System.out.println("i:"+i);

		// (2)查询
		String sql = "SELECT * FROM sort;";
		ResultSet resultSet = state.executeQuery(sql);
		//注意: 没有调用该方法之前, ResultSet的光标在第一条记录之前, 只有调用一次next方法后, 指针才会查询下一条记录
		while (resultSet.next()) { // 当查询到的结果集有下一内容,则输出如下格式的内容...

			// int sid = resultSet.getInt(1);//第一列的数据,因为他是整型,所以要对应才可以
			String sid = resultSet.getString("sid"); // 或者直接String

			String sname = resultSet.getString("sname");

			// float sprice = resultSet.getFloat(3);//第三列的数据,因为他是浮点型
			String sprice = resultSet.getString("price");

			System.out.println(sid + "\t" + sname + "\t" + sprice);
		}

		// 6.关闭资源
		resultSet.close();
		state.close();
		con.close();

	}

}

 2.Part2

SQL演示注入攻击  
 *         statement的弊端!

public class JDBCDemo02 {
	 public static void main(String[] args) throws ClassNotFoundException, SQLException {
	        // 1.注册驱动, 使用反射的方式
	        Class.forName("com.mysql.cj.jdbc.Driver");
	        // 2.获取连接对象
	        String url = "jdbc:mysql://localhost:3306/hanstudy";
	        String user = "root";
	        String password = "123456";
	        Connection connection = DriverManager.getConnection(url, user, password);
	        // 3.通过Connection对象获取Statement对象
	        Statement statement = connection.createStatement();

	        Scanner sc = new Scanner(System.in);
	        
	        String name = sc.nextLine();
	        String pwd = sc.nextLine();  //输入:ahj' or '1=1
	        
	        // 执行查询
	        String sql = "select * from user where name= '"+name+"' and password ='"+pwd+"'";
	        
	        
	        System.out.println(sql);
	        ResultSet resultSet = statement.executeQuery(sql);
	        while (resultSet.next()) {
	            String sid = resultSet.getString("id");
	            String sname = resultSet.getString("name");
	            String pawd = resultSet.getString("password");
	         
	            System.out.println(sid + "\t" + sname + "\t" + pawd );
	        }
	        System.out.println("输出完成...");

	        // 6. 释放资源
	        resultSet.close();
	        statement.close();
	        connection.close();
	    }
}

3.Part3

 * 预编译处理对象 ,防止注入攻击!
 * 
 *         preparedstatement的查询功能

public class JDBCDemo03 {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 1.注册驱动, 使用反射的方式
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2.获取连接对象
		String url = "jdbc:mysql://localhost:3306/hanstudy";
		String user = "root";
		String password = "123456";
		Connection connection = DriverManager.getConnection(url, user, password);

		// 查询所有记录
		Scanner sc = new Scanner(System.in);
		String name = sc.nextLine();
		String pwd = sc.nextLine(); // 输入:ahj' or '1=1

		// 执行查询
		String sql = "select * from user where name= ? AND password = ? ";
		

		//1.创建preparedStatement对象,预编译处理
		PreparedStatement prepareStatement = connection.prepareStatement(sql);
		
		
		//2.预编译处理对象传递参数
		prepareStatement.setObject(1, name); //注意这个方法是setXX
		prepareStatement.setObject(2, pwd);  //注意这个方法是setXX
		
		
		//3.预编译处理对象调用方法
		ResultSet resultSet = prepareStatement.executeQuery();
		
		while (resultSet.next()) {
			String sid = resultSet.getString("id");
			String sname = resultSet.getString("name");
			String pawd = resultSet.getString("password");

			System.out.println(sid + "\t" + sname + "\t" + pawd);
		}
		
		System.out.println("输出完成...");

		// 6. 释放资源
		resultSet.close();
		prepareStatement.close();
		connection.close();
	}
}

4.Part4

 预编译处理对象的增删改方法!

public class JDBCDemo04 {

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

//		demo01();
//		demo02();
		demo03();

	}

	// 增加
	public static void demo01() throws Exception {
		// 1注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hanstudy", "root", "123456");
		// 3获得预处理对象
		String sql = "insert into sort(sname) values(?)";
		PreparedStatement stat = conn.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "奢侈品");  //注意这个方法是setXX

		// 5执行SQL语句
		int line = stat.executeUpdate();

		System.out.println("新添加记录数:" + line);
		// 6释放资源
		stat.close();
		conn.close();
	}

	// 修改
	public static void demo02() throws Exception {
		// 1注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hanstudy", "root", "123456");
		// 3获得预处理对象中
		String sql = "update sort set sname=? where sid=?";
		PreparedStatement stat = conn.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "数码产品");  //注意这个方法是setXX
		stat.setInt(2, 1);
		// 5执行SQL语句
		int line = stat.executeUpdate();
		System.out.println("更新记录数:" + line);
		// 6释放资源
		stat.close();
		conn.close();
	}

	// 删除
	public static void demo03() throws Exception {
		// 1注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hanstudy", "root", "123456");
		// 3获得预处理对象
		String sql = "delete from sort where sid=?";
		PreparedStatement stat = conn.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setInt(1, 10);  //注意这个方法是setXX
		// 5执行SQL语句
		int line = stat.executeUpdate();
		System.out.println("删除记录数:" + line);
		// 6释放资源
		stat.close();
		conn.close();
	}

}

5.Part5

 * 预编译处理对象的查询方法

public class JDBCDemo05 {

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

		demo04();
		System.out.println("--------------");
		demo05();
		
	}

	public static void demo04() throws Exception {
		// 1注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hanstudy", "root", "123456");
		// 3获得预处理对象
		String sql = "select * from sort";
		PreparedStatement stat = conn.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		// 5执行SQL语句
		ResultSet rs = stat.executeQuery();
		// 6处理结果集(遍历结果集合)
		while (rs.next()) {
			// 获取当前行的分类ID
			String sid = rs.getString("sid");// 方法参数为数据库表中的列名
			// 获取当前行的分类名称
			String sname = rs.getString("sname");
			// 获取当前行的分类价格
			String sprice = rs.getString("price");
			// 显示数据
			System.out.println(sid + "-----" + sname + "-----" + sprice);
		}
		// 7释放资源
		rs.close();
		stat.close();
		conn.close();
	}

	public static void demo05() throws Exception {
		// 1注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		// 2获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hanstudy", "root", "123456");
		// 3获得预处理对象
		String sql = "select * from sort where sname=?";
		PreparedStatement stat = conn.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "汽车用品");
		// 5执行SQL语句
		ResultSet rs = stat.executeQuery();
		// 6处理结果集(遍历结果集合)
		while (rs.next()) {
			// 获取当前行的分类ID
			String sid = rs.getString("sid");// 方法参数为数据库表中的列名
			// 获取当前行的分类名称
			String sname = rs.getString("sname");
			
			// 获取当前行的分类价格
			String sprice = rs.getString("price");
			
			// 显示数据
			System.out.println(sid + "-----" + sname + "-----" + sprice);
		}
		// 7释放资源
		rs.close();
		stat.close();
		conn.close();
	}

}

6.Part6

 * 编写JDBC工具类JDBCUtils
 *         将注册驱动和获取连接等代码编写后封装到此

public class JDBCUtils {
	// 私有构造方法
    private JDBCUtils() {}

    // 定义静态的连接对象作为成员变量
    private static Connection connection;

    // 使用静态代码块执行注册驱动和获取连接
    static {
        try {
            // 注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://localhost:3306/hanstudy";
            String user = "root";
            String password = "123456";
            connection = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e+"数据库连接失败");
        }
    }

    // 获取连接
    public static Connection getConnection() {
        return connection;
    }

    // 释放资源  判断不为空就关闭资源
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {}
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {}
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {}
        }
    }
}

 * 测试JDBC工具类
 *         执行增删改查操作

public class TestJDBCUtils {
	public static void main(String[] args) throws Exception {
		// 加载、注册驱动, 使用工具类获取连接
		Connection connection = JDBCUtils.getConnection();

		demo04(connection);
		
//		demo05(connection);

//		demo01(connection);
		
//		demo02(connection);
		
//		demo03(connection);

	}

	// 增加
	public static void demo01(Connection connection) throws Exception {
		// 3获得预处理对象
		String sql = "insert into sort(sname) values(?)";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "护肤品"); // 注意这个方法是setXX

		// 5执行SQL语句
		int line = stat.executeUpdate();

		System.out.println("新添加记录数:" + line);
		// 6释放资源
		JDBCUtils.close(connection, stat, null);
	}

	// 修改
	public static void demo02(Connection connection) throws Exception {

		// 3获得预处理对象中
		String sql = "update sort set sname=? where sid=?";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "数码产品WUWU"); // 注意这个方法是setXX
		stat.setInt(2, 1);
		// 5执行SQL语句
		int line = stat.executeUpdate();
		System.out.println("更新记录数:" + line);
		// 6释放资源
		JDBCUtils.close(connection, stat, null);
	}

	// 删除
	public static void demo03(Connection connection) throws Exception {

		// 3获得预处理对象
		String sql = "delete from sort where sid=?";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setInt(1, 9); // 注意这个方法是setXX
		// 5执行SQL语句
		int line = stat.executeUpdate();
		System.out.println("删除记录数:" + line);

		// 6释放资源
		JDBCUtils.close(connection, stat, null);
	}
	
	//查询
	public static void demo04(Connection connection) throws Exception {

		// 3获得预处理对象
		String sql = "select * from sort";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		// 5执行SQL语句
		ResultSet rs = stat.executeQuery();
		// 6处理结果集(遍历结果集合)
		while (rs.next()) {
			// 获取当前行的分类ID
			String sid = rs.getString("sid");// 方法参数为数据库表中的列名
			// 获取当前行的分类名称
			String sname = rs.getString("sname");
			// 获取当前行的分类价格
			String sprice = rs.getString("price");
			// 显示数据
			System.out.println(sid + "-----" + sname + "-----" + sprice);
		}
		// 7释放资源
			JDBCUtils.close(connection, stat, rs);
	}
	
	//查询
	public static void demo05(Connection connection) throws Exception {
		
		// 3获得预处理对象
		String sql = "select * from sort where sname=?";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "汽车用品");
		// 5执行SQL语句
		ResultSet rs = stat.executeQuery();
		// 6处理结果集(遍历结果集合)
		while (rs.next()) {
			// 获取当前行的分类ID
			String sid = rs.getString("sid");// 方法参数为数据库表中的列名
			// 获取当前行的分类名称
			String sname = rs.getString("sname");
			
			// 获取当前行的分类价格
			String sprice = rs.getString("price");
			
			// 显示数据
			System.out.println(sid + "-----" + sname + "-----" + sprice);
		}
		// 7释放资源
		JDBCUtils.close(connection, stat, rs);
	}


}

7.Part7

* JDBC读取sort表,封装到sort类中

public class JDBCDemo06 {

	public static void main(String[] args) throws Exception {
		Connection conn = JDBCUtils.getConnection();
		
		//创建预编译对象
		PreparedStatement pst = conn.prepareStatement("select * from sort");
		
		//执行SQL语句
		ResultSet resultSet = pst.executeQuery();
		
		//创建集合对象
		List list = new ArrayList();  
		
		while(resultSet.next()){
			Sort s = new Sort(resultSet.getInt("sid"),resultSet.getString("sname"),resultSet.getFloat("price"));  //根据名称获取列数据
			
			//添加到集合
			list.add(s);
		}
		JDBCUtils.close(conn, pst, resultSet);
		
		//增强for遍历集合
		for(Sort s: list){
			System.out.println(s);
		}
		
		
		
	}
}

 * 与数据表对应的类,注意属性要和字段名一样!

public class Sort {

	private int sid;
	
	private String sname;
	
	private float price;

	public Sort(int sid, String sname, float price) {
		super();
		this.sid = sid;
		this.sname = sname;
		this.price = price;
	}

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getSname() {
		return sname;
	}

	public void setSname(String sname) {
		this.sname = sname;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return "sort [sid=" + sid + ", sname=" + sname + ", price=" + price + "]";
	}
	
	
	
	
}

8.Part8

配置文件properties

MYSQL阶段_DAY01~DAY11(附笔记)_第4张图片

 * 加载properties配置文件,IO流读取文件

public class PropertiesDemo {

	public static void main(String[] args) throws IOException, Exception {
		// 1.获取类加载器: 获取某个类的字节码对象, 通过字节码对象获取类加载器对象
		ClassLoader classLoader = PropertiesDemo.class.getClassLoader();
		// 2.使用类加载器对象加载配置文件, 返回字节输入流
		InputStream in = classLoader.getResourceAsStream("database.properties");
		// 3.使用Properties加载输入流, 获得键值对信息
		Properties properties = new Properties();
		properties.load(in);

		String driver = properties.getProperty("driver");
		String url = properties.getProperty("url");
		String user = properties.getProperty("user");
		String password = properties.getProperty("password");

		Class.forName(driver);
		Connection connection = DriverManager.getConnection(url, user, password);

		System.out.println(connection);
	}
}

 * 使用配置文件的JDBC工具类:JBDCUtilsVersion2

public class JBDCUtilsVersion2 {
	// 声明静态变量
    private static Connection connection;
    private static String driverClass;
    private static String url;
    private static String username;
    private static String password;

    // 静态代码块进行初始化
    static {
        try {
            // 读取配置文件
            readConfig();
            // 注册驱动
            Class.forName(driverClass);
            // 获取连接
            connection = DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("数据库连接失败");
        }
    }

    // 私有构造方法
    private JBDCUtilsVersion2() {}

    // 读取配置文件方法
    private static void readConfig() throws Exception {
        // 使用类加载器加载bin目录下的配置文件, 获取输入流
        InputStream in = JBDCUtilsVersion2.class.getClassLoader().getResourceAsStream("database.properties");
        // 创建Properties对象
        Properties properties = new Properties();
        // 加载数据
        properties.load(in);
        // 通过键获取值
        driverClass = properties.getProperty("driver");
        url = properties.getProperty("url");
        username = properties.getProperty("user");
        password = properties.getProperty("password");
    }

    // 返回连接对象
    public static Connection getConnection() {
        return connection;
    }
}

  测试JDBC工具类:TestJDBCUtileVersion2

public class TestJDBCUtileVersion2 {
	
	public static void main(String[] args) throws Exception {
		// 加载、注册驱动, 使用工具类获取连接
		Connection connection = JBDCUtilsVersion2.getConnection();

//		demo04(connection);
		
//		demo05(connection);

//		demo01(connection);
		
//		demo02(connection);
		
		demo03(connection);

	}

	// 增加
	public static void demo01(Connection connection) throws Exception {
		// 3获得预处理对象
		String sql = "insert into sort(sname) values(?)";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "保健品"); // 注意这个方法是setXX

		// 5执行SQL语句
		int line = stat.executeUpdate();

		System.out.println("新添加记录数:" + line);
		// 6释放资源
		JBDCUtilsVersion2.close(connection, stat, null);
	}

	// 修改
	public static void demo02(Connection connection) throws Exception {

		// 3获得预处理对象中
		String sql = "update sort set sname=? where sid=?";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "数码产品"); // 注意这个方法是setXX
		stat.setInt(2, 1);
		// 5执行SQL语句
		int line = stat.executeUpdate();
		System.out.println("更新记录数:" + line);
		// 6释放资源
		JBDCUtilsVersion2.close(connection, stat, null);
	}

	// 删除
	public static void demo03(Connection connection) throws Exception {

		// 3获得预处理对象
		String sql = "delete from sort where sid=?";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setInt(1, 12); // 注意这个方法是setXX
		// 5执行SQL语句
		int line = stat.executeUpdate();
		System.out.println("删除记录数:" + line);

		// 6释放资源
		JBDCUtilsVersion2.close(connection, stat, null);
	}
	
	//查询
	public static void demo04(Connection connection) throws Exception {

		// 3获得预处理对象
		String sql = "select * from sort";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		// 5执行SQL语句
		ResultSet rs = stat.executeQuery();
		// 6处理结果集(遍历结果集合)
		while (rs.next()) {
			// 获取当前行的分类ID
			String sid = rs.getString("sid");// 方法参数为数据库表中的列名
			// 获取当前行的分类名称
			String sname = rs.getString("sname");
			// 获取当前行的分类价格
			String sprice = rs.getString("price");
			// 显示数据
			System.out.println(sid + "-----" + sname + "-----" + sprice);
		}
		// 7释放资源
		JBDCUtilsVersion2.close(connection, stat, rs);
	}
	
	//查询
	public static void demo05(Connection connection) throws Exception {
		
		// 3获得预处理对象
		String sql = "select * from sort where sname=?";
		PreparedStatement stat = connection.prepareStatement(sql);
		// 4 SQL语句占位符设置实际参数
		stat.setString(1, "汽车用品");
		// 5执行SQL语句
		ResultSet rs = stat.executeQuery();
		// 6处理结果集(遍历结果集合)
		while (rs.next()) {
			// 获取当前行的分类ID
			String sid = rs.getString("sid");// 方法参数为数据库表中的列名
			// 获取当前行的分类名称
			String sname = rs.getString("sname");
			
			// 获取当前行的分类价格
			String sprice = rs.getString("price");
			
			// 显示数据
			System.out.println(sid + "-----" + sname + "-----" + sprice);
		}
		// 7释放资源
		JBDCUtilsVersion2.close(connection, stat, rs);
	}


}

Gitee学习笔记:MySQL · 许AX/MySQL - 码云 - 开源中国 (gitee.com)

你可能感兴趣的:(MYSQL,mysql,数据库)