- 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;
}
}
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 );
}
}