JAVA 基础 数据库 day-30(DBUtils) 练习

124 篇文章 1 订阅
96 篇文章 0 订阅
  •     1 将day29的作业改成用QueryRunner实现
DataSource在使用完后也是需要关闭的
无论是否使用连接池。如果没使用连接池那么Connection关闭是真正的关闭数据库连接,
使用连接池的话Connection关闭实际上是将Connection放回到连接池而非真正关闭连接。
使用连接池的目的就是防止频繁创建关闭Connection,连接池会对Connection复用,就是多次重复使用。
package exrcise;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import demo2.DBCPDemo;

public class Test1 {
	private static BasicDataSource BDS = DBCPDemo.getDataSource();
	
	/*
	 * 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)
    	);  
	 * 
	 */
	
	public static void main(String[] args) throws SQLException {
				
		//(1)将map中的手机号码取出来打印到控制台上
//		List<Map<String,Object>> list  = func1();
//		for (Map<String, Object> map : list) {
//			for(String key : map.keySet()) {
//				System.out.print(map.get(key)+"\t");
//			}
//			System.out.println();
//		}
		
		//(2)判断map中所有的用户名在userinfo表中是否存在存在则输出"该用户已注册",
		//如果不存在将该用户名及对应的密码存入到userinfo表中(map中的数据不需要修改)
		int id = 1111;
		boolean b = isExisit(id);
//		System.out.println(b);

		
		if(b) {
			System.out.println("id为:"+id+"的用户已经注册!");
		}else {
			//插入数据,模拟数据在方法内直接填入数据
			int row = insert(id);
			System.out.println("影响了"+row+"行。");
		}
	}

	private static int insert(int id) {
		QueryRunner qr = new QueryRunner(BDS);
		String sql = "insert into test(id,name,age) values(?,?,?)";
		Object[] params = {id, "Testname1", 123};
		try {
			int row = qr.update(sql, params);
			return row;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return 0;
	}

	private static boolean isExisit(String name) {
		QueryRunner qr = new QueryRunner(BDS);
		String sql = "select count(*) from test where name=?";
		Object[] params = {name};
		try {
			Long row = qr.query(sql, new ScalarHandler<Long>(), params);
			//是否存在
			return row != 0;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}
	
	private static boolean isExisit(int sid) {
		QueryRunner qr = new QueryRunner(BDS);
		String sql = "select count(*) from test where id=?";
		Object[] params = {sid};
		try {
			Long row = qr.query(sql, new ScalarHandler<Long>(), params);
			//是否存在
			return row != 0;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}

	private static List<Map<String,Object>> func1() {

		QueryRunner qr = new QueryRunner(BDS);
		String sql = "select * from test";
		List list = null;
		try {
			list = qr.query(sql, new MapListHandler() );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
		
	}

	
}

  • 练习2

package exrcise;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import demo1.Student1;

public class Test2 {
	private static BasicDataSource BDS = DBCPDemo1.getDataSource();
	private static QueryRunner QR = new QueryRunner(BDS);
	
	/*
	 * 
	 * 一个数据库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){}//注意只有数据库中有才能修改,没有无法修改
	 * 
	 * 
	 */
	public static void main(String[] args) throws SQLException {
//		func1();
//		func2();
//		func3();
//		func4();
//		func5();
//		func6();
//		Student1 s = getStudentById(3);
//		System.out.println(s);
//		int row = deleteStudentById(2);
//		Object[] param = {1, "李少荣", "女" , 80};
//		addStudent(param);
//		updateStudentById(1, 50);
		
		
		//关闭资源
		BDS.close();
	}
	public static int updateStudentById(int id, int score) throws SQLException{
		//(10)定义根据id修改学员的信息public int updateStudentById(String id){}//注意只有数据库中有才能修改,没有无法修改
		
		if(isIdExisit(id)) {
			String sql = "update student set score=? where id=?";
			Object[] params = {score, id};
			int row = QR.update(sql, params);
			System.out.println("已修改"+row+"行数据。");
		}else {
			System.out.println("ID"+id+"不存在!");
		}
		
		return 0;
	}
	
	public static int addStudent(Object[] param) throws SQLException{
//		(9)定义添加学员的方法public int addStudent(){}//注意只有数据库中没有有才能添加,有无法添加
		int id = (int) param[0];
		if(isIdExisit(id)) {
			System.out.println("此ID用户已存在,不能添加!");
		}else {
			//添加用户
			String sql = "insert into student(id, name,sex,score) value(?,?,?,?)";
			Object[] params = param;
			int row = QR.update(sql, params);
			System.out.println("已添加"+row+"行数据。");
		}
		return 0;
	}
	
	
	public static int deleteStudentById(int id) throws SQLException{
//		(8)定义根据id删除学生的方法public int deleteStudentById(String id){}//注意只有数据库中有才能删除,没有无法删除
		if(isIdExisit(id)) {
			//id存在,删除操作
			String sql = "delete from student where id=?";
			Object[] params = {id};
			int row = QR.update(sql, params);
			System.out.println("已删除"+row+"行数据。");
		}else {
			//不存在
			System.out.println("ID为:"+id+"的条目不存在!");
			
		}
		
		return 0;
		
	}
	
	public static boolean isIdExisit(int id) throws SQLException {
		
		String sql = "select id from student where id=?";
		Object[] params = {id};
		Integer row = QR.query(sql, new ScalarHandler<Integer>(), params);
		if(row != null) {
			return true;
		}else {
			return false;
		}
	}
	
	public static Student1 getStudentById(int id) throws SQLException{
		String sql = "select * from student where id=?";
		Object[] params = {id};
		Student1 stu = QR.query(sql, new BeanHandler<Student1>(Student1.class), params);
		return stu;
				
		
		
//		return null;
	}





	private static void func6() throws SQLException {
//		(6)定义查询所有学生的方法public List<Student> getAllStudent(){}
		String sql = "select * from student";
		List<Student1> stu = QR.query(sql, new BeanListHandler<Student1>(Student1.class));
		for (Student1 student1 : stu) {
			System.out.println(student1.toString());
		}
	}


	private static void func5() throws SQLException {
		// (5)按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),
		//并将分数大于总平均分的学员信息(按照分数从小到大的顺序)(id-name-sex-score)写入到studentInfo.txt文件中
		//(写入格式:id-name-sex-score)
		String sql = "select avg(score) from student";
		String sql1 = "select * from student where score >(" + sql +") order by score asc";
		List<Object[]> list = QR.query(sql1, new ArrayListHandler());
		System.out.println("从小到大的顺序打印分数大于总平均分的学员信息:");
		for(Object[] objs : list) {
			for (Object object : objs) {
				System.out.print(object + "\t");
			}
			System.out.println();
		}
		
	}


	private static void func4() throws SQLException {
//		(4)分别统计所有男同学的平均分,所有女同学的平均分及总平均分
		String sql = "select avg(score) from student where sex='男'";
		String sql1 = "select avg(score) from student where sex='女'";
		BigDecimal male = QR.query(sql, new ScalarHandler<BigDecimal>());
		BigDecimal female = QR.query(sql1, new ScalarHandler<BigDecimal>());
		System.out.println("男生平均分:"+ male.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
		System.out.println("女生平均分:"+ female.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
		
	}


	private static void func3() throws SQLException {
//		(3)查询成绩大于60的女性,显示姓名,性别,成绩
		String sql = "select name,sex,score from student where sex='女' and score>60";
		Object[] objs = QR.query(sql, new ArrayHandler());
		for (Object object : objs) {
			System.out.print(object + "\t");
		}
	}


	private static void func2() throws SQLException {
//		(2)将姓张的男同学的的成绩改为100
		String sql = "update student set score=100 where name like '张%'";
		int row = QR.update(sql);
		System.out.println("受影响的条目数:"+row);
		
	}


	private static void func1() throws SQLException {
//		(1)查询女性,成绩80以上的学生数量
		String sql = "select count(*) from student where sex=? and score>?";
		Object[] params = {"女", 80};
		long count = QR.query(sql, new ScalarHandler<Long>(), params);
		System.out.println("女性,成绩80以上的学生数量:"+ count );
	}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值