需求:
后台用户管理系统 //id(主键) username password name age sex String 注册 登录(查询一个)
查询所有 修改(只能修改本身) 注销(只能注销本身) 退出登录之后 才能实现的功能为 查询所有 修改 删除 退出
1.void 登录(username,passowrd){
select * from user where username=xx and password=xx;
id
if(rs时是否登录成功){
} }2.注销
void 注销(){
delete from user where id=登录获取的id;
}3.修改(String…str)
update user set ??? where id=登录获取的id;
util类:
public class util {
//私有化静态变量
private static String USER;
private static String PASSWORD;
private static String URL;
private static String DRIVER;
static{
try {
//接通资源文件,给静态变量赋值
Properties properties = new Properties();
InputStream is = util.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(is);
USER=properties.getProperty("user");
PASSWORD=properties.getProperty("password");
URL=properties.getProperty("url");
DRIVER=properties.getProperty("driver");
Class.forName(DRIVER);
} catch (Exception e) {
e.printStackTrace();
}
}
//用来操作登录
public static ResultSet select(String sql,String...str) throws Exception{
Connection conn = getConn();
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i <=str.length-1; i++) {
ps.setString(i+1,str[i]);
}
ResultSet resultSet = ps.executeQuery();
return resultSet;
}
//用来操作注册、注销
public static boolean select1(String sql,String...str) throws Exception{
Connection conn = getConn();
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i <=str.length-1; i++) {
ps.setString(i+1,str[i]);
}
boolean execute = ps.execute();
return execute;
}
//用来操作修改
public static boolean select1(String sql,int i) throws Exception{
Connection conn = getConn();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,i);
boolean execute = ps.execute();
return execute;
}
public static boolean select2(String sql,int j,String...str) throws Exception{
Connection conn = getConn();
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i <=str.length-1; i++) {
ps.setObject(i+1,str[i]);
}
ps.setInt(str.length+1,j);
boolean execute = ps.execute();
return execute;
}
//建立连接
public static Connection getConn() throws Exception{
Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
return conn;
}
//关闭连接
public static void close(ResultSet re, PreparedStatement ps,Connection coon) throws Exception{
if(re!=null){
re.close();
}
if(ps!=null){
ps.close();
}
if(coon!=null){
coon.close();
}
}
public static void close( PreparedStatement ps,Connection coon) throws Exception{
if(ps!=null){
ps.close();
}
if(coon!=null){
coon.close();
}
}
}
jdbc.properties文件
user=root
password=123456
url=jdbc:mysql://master:3306/stu
driver=com.mysql.jdbc.Driver
test主类测试
public class test {
private static boolean aBoolean;//判断是否登录成功
private static boolean bBoolean;//判断是否退出系统
private static int ID;//登录成功的id
private static String NAME;//登录成功的姓名
private static String AGE;//登录成功的年龄
private static String SEX;//登录成功的性别
public static void main(String[] args) throws Exception {
System.out.println("欢迎光临后台用户管理系统");
start();
}
//开始
public static void start() throws Exception{
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请选择您的服务:1、登录 2、注册 3、退出");
int i1 = scanner.nextInt();
if(i1==1){
System.out.println("请输入你的账号:");
scanner.nextLine();
String s1 = scanner.nextLine();
System.out.println("请输入你的密码:");
String s2 = scanner.nextLine();
denglu(s1,s2);
if(aBoolean){
while(true){
System.out.println("请选择您的服务:1、查询所有 2、修改本条信息 3、注销信息 4、退出");
int i2 = scanner.nextInt();
switch (i2){
case 1:
chaxun();
break;
case 2:
scanner.nextLine();
System.out.println("请输入修改的姓名(不修改可以回车):");
String s3 = scanner.nextLine();
System.out.println("请输入修改的年龄(不修改可以回车):");
String s4 = scanner.nextLine();
System.out.println("请输入修改的性别(不修改可以回车):");
String s5 = scanner.nextLine();
xiugai(s3,s4,s5);
break;
case 3:
zhuxiao();
System.out.println("账号不存在,返回首页");
bBoolean=true;
break;
case 4:
System.out.println("成功退出此账号");
bBoolean=true;
break;
default:
System.out.println("输入有误");
break;
}
if(bBoolean){
break;
}
}
}else{
}
}else if(i1==2){
System.out.println("请输入您的账号");
String username = scanner.nextLine();
System.out.println("请输入您的密码");
String password = scanner.nextLine();
zhuce(username,password);
}else if(i1==3){
System.out.println("成功退出系统");
break;
}
else{
System.out.println("输入有误");
}
}
}
//查询
public static void chaxun() throws Exception{
util u = new util();
String sql="select * from person";
ResultSet rs = u.select(sql);
while(rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String name = rs.getString("name");
String age = rs.getString("age");
String sex = rs.getString("sex");
System.out.println(id+" "+username+" "+password+" "+name+" "+age+" "+sex);
}
}
//登录
public static void denglu(String uname,String paw) throws Exception{
util u = new util();
String sql="select * from person where username=? and password=?";
ResultSet rs = u.select(sql,uname,paw);
if(rs.next()){
System.out.println("登录成功");
aBoolean=true;
ID= rs.getInt("id");
NAME=rs.getString("name");
AGE=rs.getString("age");
SEX=rs.getString("sex");
}else{
System.out.println("登录失败");
aBoolean=false;
}
u.close(rs,null,null);
}
//注销
public static void zhuxiao() throws Exception{
util u = new util();
String sql="delete from person where id=?";
boolean b = u.select1(sql, ID);
if(b){
System.out.println("注销失败");
}else{
System.out.println("注销成功");
}
}
//修改
public static void xiugai(String name,String age,String sex) throws Exception{
util u = new util();
String sql="update person set name=? , age=? , sex=? where id=?";
if(name.isEmpty()){
name=NAME;
}else{
NAME=name;
}
if(age.isEmpty()){
age=AGE;
}else{
AGE=age;
}
if(sex.isEmpty()){
sex=SEX;
}else{
SEX=sex;
}
boolean b = u.select2(sql, ID ,name, age, sex);
if(b){
System.out.println("修改失败");
}else{
System.out.println("修改成功");
}
}
//注册
public static void zhuce(String username,String password) throws Exception{
util u = new util();
String sql="insert into person (username,password) values(?,?)";
boolean b = u.select1(sql,username,password);
if(b){
System.out.println("注册失败");
}else{
System.out.println("注册成功");
}
}
}
结果截图:
欢迎光临后台用户管理系统
请选择您的服务:1、登录 2、注册 3、退出
2
请输入您的账号
xiao
请输入您的密码
123456
注册成功
请选择您的服务:1、登录 2、注册 3、退出
1
请输入您的账号:
xiao
请输入您的密码:
123456
登录成功
请选择您的服务:1、查询所有 2、修改本条信息 3、注销信息 4、退出
1
1 root 123456 root 11 1
2 test 123456 test 22 0
4 xiao 123456 null null null
请选择您的服务:1、查询所有 2、修改本条信息 3、注销信息 4、退出
2
请输入修改的姓名(不修改可以回车):
youpei
请输入修改的年龄(不修改可以回车):
22
请输入修改的性别(不修改可以回车):
修改成功
请选择您的服务:1、查询所有 2、修改本条信息 3、注销信息 4、退出
1
1 root 123456 root 11 1
2 test 123456 test 22 0
4 xiao 123456 youpei 22 null
请选择您的服务:1、查询所有 2、修改本条信息 3、注销信息 4、退出
3
注销成功
账号不存在,返回首页
请选择您的服务:1、登录 2、注册 3、退出
3
成功退出系统
心得体会:
出现的问题:
1、properties文件中不需要加双引号,如果加双引号会导致数据库连接失败;
2、关于insert、delete、update的操作不可以使用prepareStatement的executeQuery方法,会出错,
应该使用execute方法,其中executeQuery返回的是resultset而execute返回值是布尔类型;
3、execute返回值是布尔类型,成功操作返回的是false,反之则是true;
4、PreparedStatement的setString类方法传NULL值到sql失败,可以利用它的setObject方法;
5、于Scanner.nextLine空字符的问题,导致在运行程序时无法在控制台获得录入值,而是直接接收了 一个空字符,可以先用一个nextLine()方法去接收消化掉之前留下的结束符,之后就可以正常录入了。