上一篇讲到了如何JDBC工具类的封装。
这篇就用自己封装的JDBC工具类写一个简单的学生管理系统,具体功能有:a:查询学生信息 b:添加学生信息
c:修改学生信息 d:删除学生信息。通过接收键盘输入,实现具体的功能。这个系统比较简单,不涉及到前端和服务器,
只有控制台的输入输出。由于是自己摸索着写的,写出来感觉很不错,能从中发现很多问题,学到很多新知识,同时
,也会存在很多缺陷,欢迎大家来进行指点。
还有,这个系统我用的语句对象 是statement,而非PreparedStatement,该语句对象相较于PreparedStatement
最大的缺点就是不能防止SQL注入攻击,至于什么是SQL注入攻击,将会在另一篇中详细讲到。
以下是管理系统的代码:
package com.xcx;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;
import javax.management.StringValueExp;
import org.junit.Test;
import org.omg.CORBA.portable.ValueOutputStream;
import com.jdbc.util.JdbcUtil;
public class StudentManager {
private static Scanner sc = new Scanner(System.in);// 扫描器 设置为静态 供全局使用
public static void main(String[] args) {
while (true) {
System.out.println("a:查询学生信息 b:添加学生信息 c:修改学生信息 d:删除学生信息");
System.out.println("请输入操作,abcd任选一项:");
char in = sc.next().charAt(0);// 接收字符串的第一个字符
// String.equals("a") || char=='a'
switch (in) {
case 'a':
FindStu();
break;
case 'b':
AddStu();
break;
case 'c':
UpdateStu();
break;
case 'd':
DeleteStu();
break;
default:
System.out.println("没有此功能,请重新输入");
break;
}
}
}
// ---------------------------------------------------------
private static void AddStu() {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConn();
stat = conn.createStatement();
sc.nextLine();// 吸收上次输入的回车符
System.out.println("请输入要添加的学生编号");
String stuid = sc.nextLine();
System.out.println("请输入姓名");
String name = sc.nextLine();
System.out.println("请输入性别");
String gender = sc.nextLine();
System.out.println("请输入地址");
String addr = sc.nextLine();
System.out.println("请输入成绩");
double score = sc.nextDouble();
// String sql="insert into stu"
// +" values('"+stuid+"','"+name+"','"+gender+"','"+addr+"',"+score;//少了一个括号
String sql = "insert into stu values (" + "'" + stuid + "','" + name + "','" + gender + "','" + addr + "',"
+ score + ")";
int rows = stat.executeUpdate(sql);
System.out.println("添加了" + rows + "条信息");
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, stat, conn);
}
}
// ----------------------------------------------------------
private static void DeleteStu() {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConn();
stat = conn.createStatement();
System.out.println("请输入要删除的学生编号");
String in = new Scanner(System.in).nextLine();
String sql = "delete from stu " + "where stuid='" + in + "'";// delete记录没有*
// 拼接时记得加引号
int rows = stat.executeUpdate(sql);
System.out.println("删除了" + rows + "条记录!");
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, stat, conn);
}
}
// ----------------------------------------------------------
private static void UpdateStu() {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn=JdbcUtil.getConn();
stat=conn.createStatement();
sc.nextLine();
System.out.println("请输入要修改的学生编号");
String stuid=sc.nextLine();
System.out.println("请输入要修改的姓名");
String name=sc.nextLine();
System.out.println("请输入要修改的性别");
String gender=sc.nextLine();
System.out.println("请输入要修改的地址");
String addr=sc.nextLine();
System.out.println("请输入要修改的成绩");
double score=sc.nextDouble();
String sql="update stu set name='"+name+"',gender='"+gender+"',addr='"+addr+"',score="+score+" where stuid='"+stuid+"'";
int rows=stat.executeUpdate(sql);
System.out.println("修改了"+rows+"条数据");
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtil.close(rs, stat, conn);
}
}
// ----------------------------------------------------------
private static void FindStu() {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConn();
stat = conn.createStatement();
String sql = "select * from stu";
rs = stat.executeQuery(sql);
while(rs.next()) {
String stuid = rs.getString("stuid");
String name = rs.getString("name");
String gender = rs.getString("gender");
String addr = rs.getString("addr");
double score = rs.getDouble("score");
System.out.println(stuid + ":" + name + ":" + gender + ":" + addr + ":" + score);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, stat, conn);
}
}
}
当然,JDBC要连接到数据库,和数据库里的stu表,建库建表脚本如下:
-- 1、创建数据库mydb数据库(如果不存在才创建)
create database if not exists mydb charset utf8;
use mydb; -- 选择mydb数据库
-- 2、在 mydb 库中创建 stu 表(学生表)
drop table if exists stu;
create table stu(
stuid varchar(50),
name varchar(50),
gender char(2),
addr varchar(50),
score double
);
-- 3、往 stu 表中, 插入记录
insert into stu values('1001','张三','男', '北京', 86);