JDBC綜合項(xiàng)目:登陸系統(tǒng)和注冊系統(tǒng),數(shù)據(jù)儲存到SQL中,驗(yàn)證碼,一個.java文件變多個



/*個人的理解記憶:DButils 是database(數(shù)據(jù)庫)? utils(常用工具,比如封裝后可直接調(diào)用的查找方法,增加方法,刪除方法,修改方法等)的簡寫,縮寫。*/


--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 {
/*
* 先用私密(安全)和靜態(tài)(方便直接引用)的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();(和在主函數(shù)中加的throws Exception 一樣,?這個是為了讓其拋出異常,不出現(xiàn)紅線)}}的靜態(tài)代碼塊,用Class.forName()進(jìn)行加載"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創(chuàng)建連接
*/
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 是為了更容易應(yīng)用
*/
public static ResultSet Select(String sql) {
// 用con = getCon();來建立鏈接的對象con
con = getCon();
// 用sta = con.createStatement(); 建立執(zhí)行sql語句的對象
try {
sta = con.createStatement();
// 用res = sta.executeQuery(sql);執(zhí)行sql語句得到結(jié)果集
res = sta.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return res;
}
/*
* 封裝聲明“ 增(Z)刪(S)改(G)的方法”,用boolean(常用于循環(huán)和條件語句,可方便編寫程序 和少些寫代碼)
*/
public static boolean ZSG(String sql) {
// 用con = getCon();建立鏈接的對象
boolean b = false;/* 聲明b = false */
con = getCon();
// 用sta = con.createStatement();建立執(zhí)行sql語句的對象
try {
sta = con.createStatement();
// 用int num = sta.executeUpdate(sql);執(zhí)行sql語句得到結(jié)果集
int num = sta.executeUpdate(sql);
if (num > 0) {
b = true;/*
* 默認(rèn)一開始聲明的boolean ZSG(String sql)為true, 前面聲明了b =?false,所以如果num>0,那么b被賦值為true,執(zhí)行 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);,再聲明一個
* 可直接調(diào)用的靜態(tài)的yonghu yh = new yonghu();之后加入很 多要調(diào)用的全部數(shù)據(jù)其中去,之后再調(diào)用
*/
public static void main(String[] args) throws Exception {
boolean b = true;
/*
* 用while (b) {}包圍登錄代碼部分,實(shí)現(xiàn)登錄錯誤的時候一直登錄的效果 最先聲明的b =
* true成立,b為true,即表明"可行",所以 while (true) 會一值循環(huán), 直到num_yanzhengma_bianhao == num_yanzhengma,出現(xiàn)false,進(jìn)而就會停止當(dāng)前循環(huán),繼續(xù)執(zhí)行循環(huán)下面的代碼語句
*/
while (b) {
System.out.println("--------歡迎使用詩書畫唱商品管理系統(tǒng)--------");
System.out.println(" ------請輸入你要執(zhí)行的操作--------");
System.out.println("1.登錄2.注冊 3.退出系統(tǒng)");
int num = s.nextInt();
if (num == 1) {
//輸入1,就執(zhí)行登錄功能
System.out.println("------執(zhí)行登錄功能-----");
System.out.println("請輸入你的用戶名");
String uname = s.next();
System.out.println("請輸入你的密碼");
String pwd = s.next();
boolean bb = true;
while (bb) {
System.out.println("請輸入驗(yàn)證碼");
/*用Random r = new Random();生成一個驗(yàn)證碼(這個驗(yàn)證碼只是用隨機(jī)數(shù)字)*/
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("驗(yàn)證碼輸入正確");
bb = false;
} else {
System.out.println("驗(yàn)證碼輸入錯誤");
}
}
/*聲明 String寫一個sql語句,用查找語句后來判斷用戶輸入的信息是否在?數(shù)據(jù)庫中存在,只有存在才可以登錄,否則登錄失敗,可以登錄說明輸入的內(nèi)容儲存到了SQL數(shù)據(jù)庫中去了*/
String sql = "select * from yonghu where yh_Uname= '" + uname
+ "' and yh_Pwd='" + pwd + "'";
/*
* 用 ResultSet res = diaoyongSQL.Select(sql);,調(diào)用封裝而成的Select(sql)執(zhí)行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();”儲存的內(nèi)容和用sql 查找的數(shù)據(jù)是否相同,相同就會執(zhí)行if(){}中的語句,?之前(執(zhí)行時先注冊再登錄)注冊時,輸入數(shù)據(jù)已經(jīng)用SQL語句儲存到SQL數(shù)據(jù)庫中了
*/
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跳出循環(huán)*/
} else {
System.out.println("用戶名或密碼輸入錯誤,請重試!");
}
}
/*
* 因?yàn)閙ain函數(shù)那里加了throws Exception, 所以本來這里會有紅線,這里會沒紅線
*/
else if (num == 2) {
// 輸入為2,則 num == 2 ,執(zhí)行注冊功能
System.out.println("---------執(zhí)行注冊功能--------");
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("請輸入你的真實(shí)姓名");
String name = s.next();
System.out.println("請輸入你的年齡");
int age = s.nextInt();
System.out.println("請輸入你的性別");
String sex = s.next();
System.out.println("請輸入你的手機(jī)號");
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)執(zhí)行 這個sql語句可以成功,就說明注冊成功了
*/
System.out.println("注冊成功");
} else {
System.out.println("注冊失敗,請重試");
}
} else if (num == 3) {
// 輸入的數(shù)字為3,則 用System.exit(0);終止系統(tǒng),退出系統(tǒng):
System.exit(0);
} else {
System.out.println("內(nèi)容輸入錯誤!");
}
}
System.out.println("歡迎你來到詩書畫唱商店,尊敬的用戶" + yh.getYh_Uname()
+ ",請關(guān)注和點(diǎn)贊!拜托了!這對我很重要??!");
}
}
class yonghu {
private String yh_Address;// yh_Address代表用戶地址
private int yh_Age;// 代表用戶年齡
private int yh_ID;// 代表用戶編號
private String yh_Jieshao;// 代表用戶 個人介紹
private String yh_Name;// 代表用戶 真實(shí)姓名
private String yh_Phone;// 代表用戶 手機(jī)號
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文件分割,轉(zhuǎn)移寫多個.java文件,可以進(jìn)行下圖的變換*/


