JAVA 基础 JDBC(Java DataBase Connection) day-29 练习

  •  1.map中有以下数据(用户名=密码)
        [liuyan=123456,wangbaoqiang=123321,fangbian=abcd,miejueshitai=123abc321]
        在ip为127.0.0.1数据库名为stdb,链接数据库的用户名和密码为:admin和123456中有一个userinfo表相关字段为(id,username,password)
        (1)将map中的手机号码取出来打印到控制台上
            * 直接使用map集合的keySet()方法获取全部的key组成的Set集合,并遍历
        (2)判断map中全部的用户名在userinfo表中是否存在存在则输出"该用户已注册",若是不存在将该用户名及对应的密码存入到userinfo表中
        (map中的数据不须要修改)
            * 链接到数据库
            * 建立表
            drop database stdb;
            create database stdb;
            use stdb;
            create table userinfo(
                id int(10) primary key auto_increment,
                username varchar(200),
                password varchar(200)
            );    
  • JDBC封装类在这里 https://blog.csdn.net/alexzt/article/details/80268297
    package exrcise;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.HashMap;
    import java.util.Set;
    
    
    import demo1.JDBCutilDemo1;
    
    public class test1 {
    	public static void main(String[] args) throws Exception {
    		HashMap<String, String> map = new HashMap<>();
    		map.put("liuyan", "123456");
    		map.put("wangbaoqiang", "123321");
    		map.put("fangbian", "abcd");
    		map.put("miejueshitai", "123abc321");
    		map.put("alex", "alexpass");
    		
    		
    		Set<String> set = map.keySet();
    		for (String key : set) {
    			System.out.println(key + "=" + map.get(key));
    			boolean b = isExists(key);
    			if(!b) {
    				//将用户加入数据库
    				int row =  insert(key, map.get(key));
    				System.out.println("成功插入" + row + "行");
    			}else {
    				System.out.println("用户名" + key + "已注册!");
    			}
    		}
    		
    	}
    
    	private static int insert(String key, String value) throws Exception {
    		Connection conn = JDBCutilDemo1.getConn();
    		int row = 0;
    		String sql = "insert into userinfo(username,password) values(?,?)";
    		PreparedStatement prestat = conn.prepareStatement(sql);
    		prestat.setString(1, key);
    		prestat.setString(2, value);
    		row = prestat.executeUpdate();
    		return row;
    
    	}
    
    	private static boolean isExists(String key) throws Exception {
    		Connection conn = JDBCutilDemo1.getConn();
    		String sql = "SELECT * FROM userinfo where username=?";
    		PreparedStatement prestat = conn.prepareStatement(sql);
    		prestat.setString(1, key);
    		ResultSet set = prestat.executeQuery();
    		if(set.next()) {
    			return true;
    		}else {
    			return false;
    		}
    	}
    	
    }
  • 2一个数据库stdb,用户名为admin 密码为123456 已存在一个表student中有五个学生的信息,姓名,性别,年龄,分数.
        id(varchar(20))       name(varchar(20))      sex(varchar(20))     score(int(10))
         1                    李少荣                 女                   80
         2                    邵凯                   男                   75
         3                    周强                   男                   95
         4                    王晓婷                 女                   55
         5                    张秀花                 女                   68
         6                    顾会                   女                   50
         7                    赵天一                 男                   32
        (1)查询女性,成绩80以上的学生数量
        (2)将姓张的男同窗的的成绩改成100
        (3)查询成绩大于60的女性,显示姓名,性别,成绩
        (4)分别统计全部男同窗的平均分,全部女同窗的平均分及总平均分
        (5)按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),并将分数大于总平均分的学员信息(按照分数从小到大的顺序)(id-name-sex-score)写入到studentInfo.txt文件中(写入格式:id-name-sex-score)
        (6)定义查询全部学生的方法public List<Student> getAllStudent(){}
        (7)定义根据id查询学生的方法public Student getStudentById(String id){}
        (8)定义根据id删除学生的方法public int deleteStudentById(String id){}//注意只有数据库中有才能删除,没有没法删除
        (9)定义添加学员的方法public int addStudent(){}//注意只有数据库中没有有才能添加,有没法添加
        (10)定义根据id修改学员的信息public int updateStudentById(String id){}//注意只有数据库中有才能修改,没有没法修改
package exrcise;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import demo1.JDBCutilDemo1;

public class Test2 {
	private static Connection conn;
	static{
		try {
			conn = 	JDBCutilDemo1.getConn();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws Exception {
		
		/*
		 * mysql> create table student(
		    -> id int primary key auto_increment,
		    -> name varchar(20),
		    -> sex varchar(20),
		    -> score int(20));
		 * 
		 */
		//插入数据
//		insert("李少荣", "女", 80);
//		insert("邵凯", "男", 75);
//		insert("周强", "男", 95);
//		insert("王晓婷", "女", 55);
//		insert("张秀花", "女", 68);
//		insert("顾会", "女", 50);
//		insert("赵天一", "男", 32);
		
		
		
		
//		//	(1)查询女性,成绩80以上的学生数量
//		int count = fun1();
//		System.out.println("查询女性,成绩80以上的学生数量:" + count);
//		//  (2)将姓张的男同窗的的成绩改成100
//		int count1 = fun2();
//		System.out.println("将姓张的男同窗的的成绩改成100,成功update-" + count1 + "-行.");
//		//	(3)查询成绩大于60的女性,显示姓名,性别,成绩
//		fun3();
//		//  (4)分别统计全部男同窗的平均分,全部女同窗的平均分及总平均分
//		fun4("男");
//		fun4("女");
//		//(5)按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),
//		//并将分数大于总平均分的学员信息(按照分数从小到大的顺序)(id-name-sex-score)写入到studentInfo.txt文件中(写入格式:id-name-sex-score)
//		fun5();
//		//	(6)定义查询全部学生的方法public List<Student> getAllStudent(){}
//		List<Student> list = getAllStudent();
//		//遍历列表
//		for (Student student : list) {
//			System.out.println(student.toString());
//		}
//		//	(7)定义根据id查询学生的方法public Student getStudentById(String id){}
//		Student stu = getStudentById(1);
//		System.out.println(stu.toString());
//		//	(8)定义根据id删除学生的方法public int deleteStudentById(String id){}//注意只有数据库中有才能删除,没有没法删除
//		int drow = deleteStudentById(1);
//		System.out.println("影响" + drow + "条数据!");
//		//	(9)定义添加学员的方法public int addStudent(){}//注意只有数据库中没有有才能添加,有没法添加
//		int addRow = addStudent("testadd", "男", 100);
//		System.out.println("影响" + addRow + "条数据!");
//		//	(10)定义根据id修改学员的信息public int updateStudentById(String id){}//注意只有数据库中有才能修改,没有没法修改
//		int updateRow = updateStudentById(2, 100);
//		System.out.println("影响" + updateRow + "条数据!");
		
	}

	private static int updateStudentById(int sid, int score) throws Exception {
		int updateRow = 0;
		Student stu = getStudentById(sid);
		if(stu==null) {
			System.out.println("ID为" + sid + "的用户不存在!");
		}else {
			//修改
			String sql = "update student set score=? where id=?";
			PreparedStatement prestat = conn.prepareStatement(sql);
			prestat.setInt(1, score);
			prestat.setInt(2, sid);
			updateRow = prestat.executeUpdate();
		}
		
		return updateRow;
	}

	private static int addStudent(String name, String sex, int score) throws Exception {
		int addRow = 0;
		Student stu = getStudentByName(name);
		if(stu != null) {
			System.out.println("用户:"+name+"已存在!");
		}else {
			addRow = insert(name, sex, score);
		}
		return addRow;
	}
	
	private static Student getStudentByName(String sname) throws Exception {
		Student stu = null;
		String sql = "select * from student where name=?";
		PreparedStatement prestat = conn.prepareStatement(sql);
		prestat.setString(1, sname);
		ResultSet set = prestat.executeQuery();
		if(set.next()) {
			int id = set.getInt("id");
			String name = set.getString("name");
			String sex = set.getString("name");
			int score = set.getInt("id");
			stu = new Student(id, name, sex, score);
		}
		return stu;
	}
	
	
	private static int deleteStudentById(int sid) throws Exception {
		int drow = 0;
		//查询是否存在
		Student stu = getStudentById(sid);
		if(stu==null) {
			System.out.println("ID为" + sid + "的用户不存在!");
		}else {
			//删除目标
			String sql = "delete from student where id=?";
			PreparedStatement prestat = conn.prepareStatement(sql);
			prestat.setInt(1, sid);
			drow = prestat.executeUpdate();
		}
		return drow;
	}

	private static Student getStudentById(int sid) throws Exception {
		Student stu = null;
		String sql = "select * from student where id=?";
		PreparedStatement prestat = conn.prepareStatement(sql);
		prestat.setInt(1, sid);
		ResultSet set = prestat.executeQuery();
		if(set.next()) {
			int id = set.getInt("id");
			String name = set.getString("name");
			String sex = set.getString("name");
			int score = set.getInt("id");
			stu = new Student(id, name, sex, score);
		}
		return stu;
	}

	private static List<Student> getAllStudent() throws Exception {
		List<Student> list = new ArrayList<>();
		String sql = "select * from student";
		PreparedStatement prestat = conn.prepareStatement(sql);
		ResultSet set = prestat.executeQuery();
		while(set.next()) {
			list.add(new Student(set.getInt("id"), set.getString("name"), set.getString("sex"), set.getInt("score")));
		}
		
		return list;
	}

	private static void fun5() throws Exception {
		String sql = "select * from student where score>(select avg(score)from student) order by score";
		PreparedStatement prestat = conn.prepareStatement(sql);
		ResultSet set = prestat.executeQuery();
		BufferedWriter out = null;
		while(set.next()) {
			String str = set.getInt("id")+"-"+set.getString("name")+"-"+set.getString("sex")+"-"+set.getInt("score");
			System.out.println(str);
			//写入文件
			out = new BufferedWriter(new FileWriter(new File("/home/alex/studentInfo.txt"), true));
			out.write(str);
			out.newLine();
			out.flush();
		}
		out.close();
	}

	private static void fun4(String sex) throws Exception {
		//用PreparedStatement sql中的占位符不须要用单引号抱起来。
		String sql = "select avg(score) as avg from student where sex=?";
		PreparedStatement prestat = conn.prepareStatement(sql);
		prestat.setString(1, sex);
		ResultSet set = prestat.executeQuery();
		while(set.next()) {
			System.out.println("性别-"+sex + "-的平均成绩是:"+ set.getInt("avg"));
		}
		prestat.close();
	}

	private static void fun3() throws Exception {
		String sql = "select name,sex,score from student where sex='女'";
		PreparedStatement prestat = conn.prepareStatement(sql);
		ResultSet set = prestat.executeQuery();
		while(set.next()) {
			String name = set.getString("name");
			String sex = set.getString("sex");
			int score = set.getInt("score");
			System.out.println("name:"+name+"_"+"sex:"+sex+"_"+"score:"+score);
		}
		prestat.close();
	}

	private static int fun2() throws Exception {
		String sql = "update student set score=100 where name like '张%'";
		PreparedStatement prestat = conn.prepareStatement(sql);
		int count = prestat.executeUpdate();
		prestat.close();
		return count;
	}

	private static int insert(String name, String sex, int score) throws Exception {
		String sql = "insert into student(name,sex,score) values(?,?,?)";
		PreparedStatement prestat = conn.prepareStatement(sql);
		prestat.setString(1, name);
		prestat.setString(2, sex);
		prestat.setInt(3, score);
		int count = prestat.executeUpdate();
		prestat.close();
		return count;
	}

	private static int fun1() throws Exception {
		int count = 0;
		String sql = "select count(*) as count from student where score>80 and sex='女'";
		PreparedStatement prestat = conn.prepareStatement(sql);
		ResultSet set = prestat.executeQuery();
		while(set.next()) {
			count = set.getInt("count");
		}
		prestat.close();
		return count;
	}
	
	
	
	
	
}

class Student{
	private int id;
	private String name;
	private String sex;
	private int score;
	
	public Student() {}
	
	public Student(int id, String name, String sex, int score) {
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.score = score;
	}
	
	

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", score=" + score + "]";
	}
	
	
	
}