JDBC综合项目:登陆系统和注册系统,数据储存到SQL中,验证码,一个.java文件变多个


/*个人的理解记忆:DButils 是database(数据库) utils(常用工具,比如封装后可直接调用的查找方法,增加方法,删除方法,修改方法等)的简写,缩写。*/


--create database yonghu
--use yonghu
--drop database yonghu
--select * from yonghu
--drop table yonghu
create table yonghu(
yh_ID int,
yh_Uname varchar(30),
yh_Pwd varchar(30),
yh_Name varchar(30),
yh_Age int not null,
yh_Sex varchar(20) not null,
yh_Phone varchar(100)not null,
yh_Address varchar(200)not null,
yh_Jieshao varchar(500)not null)


package zhubiao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;
import java.util.Scanner;
class diaoyongSQL {
/*
* 先用私密(安全)和静态(方便直接引用)的Connection,ResultSet,
* Statement声明为 null,方便之后赋值,或 con== null可用于if中
*/
private static Connection con = null;
private static ResultSet res = null;
private static Statement sta = null;
/*
* 加载"com.microsoft.sqlserver.jdbc.SQLServerDriver(
* 这个为包名, 可从编译器的左边找到包名)"包 , 用上static {try {}catch (ClassNotFoundException e) { e.printStackTrace();(和在主函数中加的throws Exception 一样, 这个是为了让其抛出异常,不出现红线)}}的静态代码块,用Class.forName()进行加载"com.microsoft.sqlserver.jdbc.SQLServerDriver"包
*/
static {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 用getCon(){} 来连接:
public static Connection getCon() {
/*
* 用if (con == null)来判断连接对象是否为null, 如果为null就用getConnection创建连接
*/
if (con == null) {
try {
con = DriverManager.getConnection(
"jdbc:sqlserver://DESKTOP-49FTFSP;"
+ "databaseName=yonghu", "sa", "1234abcd");
} catch (SQLException e) {
e.printStackTrace();
}
}
return con;/*
* public static后面没void(意思为 无返回值)这个单词,说明声明了要有返回值, 所以加return con来符合声明的条件
*/
}
/*
* 用Select(String sql){}封装和声明查询的方法, 用public static 是为了更容易应用
*/
public static ResultSet Select(String sql) {
// 用con = getCon();来建立链接的对象con
con = getCon();
// 用sta = con.createStatement(); 建立执行sql语句的对象
try {
sta = con.createStatement();
// 用res = sta.executeQuery(sql);执行sql语句得到结果集
res = sta.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return res;
}
/*
* 封装声明“ 增(Z)删(S)改(G)的方法”,用boolean(常用于循环和条件语句,可方便编写程序 和少些写代码)
*/
public static boolean ZSG(String sql) {
// 用con = getCon();建立链接的对象
boolean b = false;/* 声明b = false */
con = getCon();
// 用sta = con.createStatement();建立执行sql语句的对象
try {
sta = con.createStatement();
// 用int num = sta.executeUpdate(sql);执行sql语句得到结果集
int num = sta.executeUpdate(sql);
if (num > 0) {
b = true;/*
* 默认一开始声明的boolean ZSG(String sql)为true, 前面声明了b = false,所以如果num>0,那么b被赋值为true,执行 ZSG(String sql)
*/
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;/*
* 前面声明了b = false,所以如果num<= 0,和num > 0为true相反,那么此时b=false,b返回为false
*/
}
}
public class main {
public static Scanner s = new Scanner(System.in);
static yonghu yh = new yonghu();
/*
* 先声明个全局可用的public static Scanner s = new Scanner(System.in);,再声明一个
* 可直接调用的静态的yonghu yh = new yonghu();之后加入很 多要调用的全部数据其中去,之后再调用
*/
public static void main(String[] args) throws Exception {
boolean b = true;
/*
* 用while (b) {}包围登录代码部分,实现登录错误的时候一直登录的效果 最先声明的b =
* true成立,b为true,即表明"可行",所以 while (true) 会一值循环, 直到num_yanzhengma_bianhao == num_yanzhengma,出现false,进而就会停止当前循环,继续执行循环下面的代码语句
*/
while (b) {
System.out.println("--------欢迎使用诗书画唱商品管理系统--------");
System.out.println(" ------请输入你要执行的操作--------");
System.out.println("1.登录2.注册 3.退出系统");
int num = s.nextInt();
if (num == 1) {
//输入1,就执行登录功能
System.out.println("------执行登录功能-----");
System.out.println("请输入你的用户名");
String uname = s.next();
System.out.println("请输入你的密码");
String pwd = s.next();
boolean bb = true;
while (bb) {
System.out.println("请输入验证码");
/*用Random r = new Random();生成一个验证码(这个验证码只是用随机数字)*/
Random r = new Random();
int num_yanzhengma_bianhao = r.nextInt(9000) + 1000;
System.out.println(num_yanzhengma_bianhao);
int num_yanzhengma = s.nextInt();
if (num_yanzhengma_bianhao == num_yanzhengma) {
System.out.println("验证码输入正确");
bb = false;
} else {
System.out.println("验证码输入错误");
}
}
/*声明 String写一个sql语句,用查找语句后来判断用户输入的信息是否在 数据库中存在,只有存在才可以登录,否则登录失败,可以登录说明输入的内容储存到了SQL数据库中去了*/
String sql = "select * from yonghu where yh_Uname= '" + uname
+ "' and yh_Pwd='" + pwd + "'";
/*
* 用 ResultSet res = diaoyongSQL.Select(sql);,调用封装而成的Select(sql)执行sql语句,用于查到全表,之后用res.next()遍历,yh.setYh_ID(res.getInt("yh_ID"));等打印出搜查到的语句,res.next()表明前面“System.out.println("请输入你的用户名");String uname = s.next(); System.out.println("请输入你的密码"); String pwd =s.next();”储存的内容和用sql 查找的数据是否相同,相同就会执行if(){}中的语句, 之前(执行时先注册再登录)注册时,输入数据已经用SQL语句储存到SQL数据库中了
*/
ResultSet res = diaoyongSQL.Select(sql);
if (res.next()) {
System.out.println("登录成功");
yh.setYh_ID(res.getInt("yh_ID"));
yh.setYh_Uname(res.getString("yh_Uname"));
yh.setYh_Pwd(res.getString("yh_Pwd"));
yh.setyh_Name(res.getString("yh_Name"));
yh.setYh_Age(res.getInt("yh_Age"));
yh.setYh_Sex(res.getString("yh_Sex"));
yh.setYh_Phone(res.getString("yh_Phone"));
yh.setYh_Address(res.getString("yh_Address"));
yh.setYh_Jieshao(res.getString("yh_Jieshao"));
b = false;/*登录成功则用b = false跳出循环*/
} else {
System.out.println("用户名或密码输入错误,请重试!");
}
}
/*
* 因为main函数那里加了throws Exception, 所以本来这里会有红线,这里会没红线
*/
else if (num == 2) {
// 输入为2,则 num == 2 ,执行注册功能
System.out.println("---------执行注册功能--------");
System.out.println("请输入你的ID");
int ID = s.nextInt();
System.out.println("请输入你的用户名");
String uname = s.next();
System.out.println("请输入你的用户密码");
String pwd = s.next();
System.out.println("请输入你的真实姓名");
String name = s.next();
System.out.println("请输入你的年龄");
int age = s.nextInt();
System.out.println("请输入你的性别");
String sex = s.next();
System.out.println("请输入你的手机号");
String phone = s.next();
System.out.println("请输入你的地址");
String address = s.next();
System.out.println("请输入你的个人介绍");
String jieshao = s.next();
String sql = "insert into yonghu values(" + ID + ",'" + uname
+ "'" + ", '" + pwd + "',' " + name + "', " + age
+ " , '" + sex + "' ," + "'" + phone + "'," + "'"
+ address + "'" + "," + "'" + jieshao + "')";
if (diaoyongSQL.ZSG(sql)) {
/*
* 如果用diaoyongSQL.ZSG(sql)执行 这个sql语句可以成功,就说明注册成功了
*/
System.out.println("注册成功");
} else {
System.out.println("注册失败,请重试");
}
} else if (num == 3) {
// 输入的数字为3,则 用System.exit(0);终止系统,退出系统:
System.exit(0);
} else {
System.out.println("内容输入错误!");
}
}
System.out.println("欢迎你来到诗书画唱商店,尊敬的用户" + yh.getYh_Uname()
+ ",请关注和点赞!拜托了!这对我很重要啊!");
}
}
class yonghu {
private String yh_Address;// yh_Address代表用户地址
private int yh_Age;// 代表用户年龄
private int yh_ID;// 代表用户编号
private String yh_Jieshao;// 代表用户 个人介绍
private String yh_Name;// 代表用户 真实姓名
private String yh_Phone;// 代表用户 手机号
private String yh_Pwd;// 代表用户 登录密码
private String yh_Sex;// 代表用户 性别
private String yh_Uname;// 代表用户登录名
public String getYh_Address() {
return yh_Address;
}
public int getYh_Age() {
return yh_Age;
}
public int getYh_ID() {
return yh_ID;
}
public String getYh_Jieshao() {
return yh_Jieshao;
}
public String getYh_Name() {
return yh_Name;
}
public String getYh_Phone() {
return yh_Phone;
}
public String getYh_Pwd() {
return yh_Pwd;
}
public String getYh_Sex() {
return yh_Sex;
}
public String getYh_Uname() {
return yh_Uname;
}
public void setYh_Address(String yh_Address) {
this.yh_Address = yh_Address;
}
public void setYh_Age(int yh_Age) {
this.yh_Age = yh_Age;
}
public void setYh_ID(int yh_ID) {
this.yh_ID = yh_ID;
}
public void setYh_Jieshao(String yh_Jieshao) {
this.yh_Jieshao = yh_Jieshao;
}
public void setyh_Name(String string) {
}
public void setYh_Name(String yh_Name) {
this.yh_Name = yh_Name;
}
public void setYh_Phone(String yh_Phone) {
this.yh_Phone = yh_Phone;
}
public void setYh_Pwd(String yh_Pwd) {
this.yh_Pwd = yh_Pwd;
}
public void setYh_Sex(String yh_Sex) {
this.yh_Sex = yh_Sex;
}
public void setYh_Uname(String yh_Uname) {
this.yh_Uname = yh_Uname;
}
@Override
public String toString() {
return "yonghu [yh_ID=" + yh_ID + ", yh_Uname=" + yh_Uname
+ ", yh_Pwd=" + yh_Pwd + ", yh_Name=" + yh_Name + ", yh_Age="
+ yh_Age + ", yh_Sex=" + yh_Sex + ", yh_Phone=" + yh_Phone
+ ", yh_Address=" + yh_Address + ", yh_Jieshao=" + yh_Jieshao
+ "]";
}
}





/*想要由一个.java文件分割,转移写多个.java文件,可以进行下图的变换*/




