小菜鸟的Mysql操作项目博客

一.连接数据库步骤有五部分
1.加载驱动
2.连接数据库
3.执行命令
4.带回并处理结果
5.释放资源
二.学生系统的实际操作及代码
1.创建BaseDao
(1)定义数据库链接需要的各种参数
private static String driver=“com.mysql.jdbc.Driver”;//驱动
private static String url=“jdbc:mysql://localhost:3306/myschool”;//数据库链接字符串
private static String name=“root”;//数据库登录用户名
private static String pwd=“lxg000809”;//数据库登录密码
static Connection conn=null; //初始化连接对象
static PreparedStatement ps=null;//初始化命令对象
2.获取数据库连接的方法
public static Connection getconn(){
//判断连接是否为空
try {
if(conn==null){
Class.forName(driver);
conn=DriverManager.getConnection(url,name,pwd);
}
} catch (Exception e) {
// TODO: handle exception
}
return conn;
}
3. 释放资源的方法
public static void close(PreparedStatement ps,ResultSet res){
try {
if(res!=null){
res.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4. 定义增删改的方法
public static int update(String sql,Object[] o){
//定义返回值
int num=-1;
//创建命令对象
try {
ps=BaseDao.getconn().prepareStatement(sql);
for(int i=1;i<=o.length;i++){
ps.setObject(i,o[i-1]);
}
num=ps.executeUpdate();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
BaseDao.close(ps,null);
}
return num;
}
5.创建类并初始化查看服务所需要的代码
PreparedStatement ps=null;//初始化命令
ResultSet res=null;//初始化结果集
Scanner input=new Scanner(System.in);//创建扫描器
String sql;//初始化sql命令
6.提供菜单供用户选择并且接受数据
System.out.println(“1.用户输入年级编号和性别,统计对应的人数”);
System.out.println(“2.用户输入学号和生日,修改此学生的出生日期”);
System.out.println(“3.用户输入科目相关数据,增加到科目表中”);
System.out.println(“4.用户输入年级编号,输出年级编号、年级名称、该年级的科目名称、课时(连接查询)”);
System.out.println(“5.用户输入科目编号,统计该门课的平均分”);
System.out.println(“6.统计每个学生的所有考试的总分,并按照降序输出学号、考试总分”);
System.out.println(“请选择需要的服务类型的编号”);
int a=input.nextInt();//接收数据
7.服务一:用户输入年级编号和性别,统计对应的人数
Object []o={"",""};//创建替换占位符的数据集
System.out.println(“请输入要统计的年纪编号”);
o[0]=input.next();//接收数据
System.out.println(“请输入要统计的性别”);
o[1]=input.next();//接收数据
sql=“select gradeid,count(1) from student where sex=? and gradeid=? group by gradeid”;//更新sql命令
try {
ps=BaseDao.getconn().prepareStatement(sql);//定义命令对象带入sql命令
ps.setObject(1, o[1]);
ps.setObject(2, o[0]);//替换占位符
res=ps.executeQuery();//执行命令并且用结果集将数据带回
while(res.next()){
System.out.println(res.getInt(“gradeid”)+“年纪的女生人数为:”+res.getInt(“count(1)”));
}//处理数据
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
BaseDao.close(ps,res);//调用BaseDao的释放资源方法
}
8.服务二:用户输入学号和生日,修改此学生的出生日期
Object []s={"",""};//创建替换占位符的数据集
System.out.println(“请输入要修改的学号”);
s[1]=input.next();//接收数据
System.out.println(“请输入要修改的生日”);
s[0]=input.next();//接收数据
sql=“update student set borndate=? where studentno=?”;//更新sql命令
int a2=BaseDao.update(sql, s);//调用BaseDao的增删改方法
if(a2>0){
System.out.println(“修改成功”);
}else{
System.out.println(“修改失败”);
}//判断修改是否成功
9.服务三:用户输入科目相关数据,增加到科目表中
sql=“insert into subject values(?,?,?,?)”;//更新sql命令
Object[]o3 ={"","","",""};//创建替换占位符的数据集
System.out.println(“请输入要插入的科目编号”);
o3[0]=input.next();//接收数据
System.out.println(“请输入要插入的科目名称”);
o3[1]=input.next();//接收数据
System.out.println(“请输入要插入的科目课时”);
o3[2]=input.next();//接收数据
System.out.println(“请输入要插入的科目的年纪编号”);
o3[3]=input.next();//接收数据
int a3=BaseDao.update(sql, o3);
if(a3>0){
System.out.println(“插入成功”);
}else{
System.out.println(“插入失败”);
}//判断插入是否失败
10.服务四:用户输入年级编号,输出年级编号、年级名称、该年级的科目名称、课时(连接查询)
sql=“select g.gradeId,g.gradename,s.subjectname,s.classhour from grade g inner join subject s on g.gradeId=s.gradeId where g.gradeId=? “;//更新sql命令
System.out.println(“请入要查询的年级编号”);
String id=input.next();//接收数据
try {
ps=BaseDao.getconn().prepareStatement(sql);//定义命令对象带入sql命令
ps.setString(1, id);//替换占位符
res=ps.executeQuery();//执行命令并用结果集带回数据
while(res.next()){
System.out.println(res.getString(1)+”\t”+res.getString(2)+"\t"+res.getString(3)+"\t"+res.getString(4));
}//处理结果
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
BaseDao.close(ps, res);//调用BaseDao的释放资源方法
}
11.服务五:用户输入科目编号,统计该门课的平均分
sql=“select subjectno,avg(studentresult) from result where subjectno=? group by subjectno”;//更新sql命令
System.out.println(“请输入要查询的科目编号”);
String no=input.next();//接收数据
try {
ps=BaseDao.getconn().prepareStatement(sql);//定义命令对象带入sql命令
ps.setString(1, no);//替换占位符
res=ps.executeQuery();//执行命令并用结果集带回数据
while(res.next()){
System.out.println(res.getString(1)+"\t"+res.getString(2));
}//处理结果
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
BaseDao.close(ps, res);//调用BaseDao的释放资源方法
}
12.服务六:统计每个学生的所有考试的总分,并按照降序输出学号、考试总分
sql=“SELECT s.studentno,SUM(studentresult) FROM result r INNER JOIN student s ON r.studentno=s.studentno GROUP BY studentname ORDER BY r.studentno,r.studentresult DESC”;//更新sql命令
try {
ps=BaseDao.getconn().prepareStatement(sql);//定义命令对象带入sql命令
res=ps.executeQuery();//执行命令并用结果集带回数据
while(res.next()){
System.out.println(res.getString(1)+"\t"+res.getString(2)+"\t");
}//处理结果
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
BaseDao.close(ps, res);//调用BaseDao的释放资源方法
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值