在之前的這篇博客里面MySQL筆記 —— jdbc連接資料庫(增刪改查,sql注入,網站登錄檢查)
寫了網站登錄檢查的代碼,通過將用戶輸入的用戶名和密碼與資料庫中存盤的用戶名和密碼進行比較,如果一致則登錄成功,不一致則登陸失敗
現在再給出網站登錄串列中的,修改密碼,注冊賬號,注銷賬號功能
先給出userInfo用戶資訊表的資料

package mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class LoginUpdate {
public static void main(String[] args) throws Exception {
System.out.println("修改密碼");
String update = update("654321", "root");
System.out.println(update);
System.out.println("注冊賬號");
String insert = insert("demo","222222");
System.out.println(insert);
System.out.println("注銷賬號");
String delete = delete("test");
System.out.println(delete);
}
//修改密碼
public static String update(String password,String username) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/show1", "root", "123456");
String sql = "update userInfo set password=? where username=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,password);
ps.setString(2,username);
int i = ps.executeUpdate();
conn.close();
ps.close();
if(i!=1){
return "修改失敗";
}
return "修改成功";
}
//注冊賬號
public static String insert(String username,String password) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/show1", "root", "123456");
String sql = "insert into userInfo values(?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
int i = ps.executeUpdate();
conn.close();
ps.close();
if(i!=1){
return "注冊失敗";
}
return "注冊成功";
}
//注銷賬號
public static String delete(String username) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://master:3306/show1", "root", "123456");
String sql = "delete from userInfo where username=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,username);
int i = ps.executeUpdate();
conn.close();
ps.close();
if(i!=1){
return "注銷失敗";
}
return "注銷成功";
}
}

查詢一下資料庫里面的表,select * from userInfo;

密碼確實被修改了,test用戶被注銷,新增了一個demo用戶
jdbc工具類
現在來思考一個問題,上面代碼里面有三個功能,修改密碼,注冊賬號,注銷賬號,三個功能分別對應三個方法,但是方法內的陳述句有大量重復的地方,比如獲取驅動和獲取連接的代碼,獲取執行器,以及最后關閉的代碼其實都是重復的,這不符合我們寫代碼的精簡思想,所以能不能把這些重復的代碼都提取出來,放進一個工具類里面,比如將建立連接的代碼放入工具類里面,工具類提供給外界一個獲取的方法,需要的時候直接呼叫方法即可,
這個工具類就是jdbc工具類,現在給出工具類的全部代碼
package mysql;
import sun.security.util.Password;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JDBCUtil {
private static String URL;
private static String DRIVER;
private static String USERNAME;
private static String PASSWORD;
private static Connection conn=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
static{
try{
//獲取組態檔里面的引數資訊
Properties properties = new Properties();
//利用反射加載組態檔
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("mysql.properties");
//利用Properties物件加載輸入流is
properties.load(is);
DRIVER=properties.getProperty("driver");
URL=properties.getProperty("url");
USERNAME=properties.getProperty("username");
PASSWORD=properties.getProperty("password");
//獲取驅動
Class.forName(DRIVER);
//獲取連接
conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
}catch(Exception e){
e.printStackTrace();
}
}
//獲取連接
public static Connection getConn(){
return conn;
}
//獲取執行器
public static PreparedStatement getPs(String sql){
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
}
//獲取查詢陳述句的結果集
public static ResultSet getRs(){
try {
rs=ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
//獲取增刪改陳述句的結果集
public static int update(){
int i=0;
try {
i=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
//給執行器傳參
public static void setPs(String...args){
try{
for (int i = 0; i < args.length; i++) {
ps.setString(i+1,args[i]);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//關閉
public static void closeAll(){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
利用工具類,再來重新寫一下之前的修改密碼,注冊賬號,注銷賬號的方法
package mysql;
public class LoginUpdate1 {
public static void main(String[] args) {
System.out.println("修改密碼");
String update = update("root", "123456");
System.out.println(update);
System.out.println("------------------");
System.out.println("注冊賬號");
String show = insert("show", "333333");
System.out.println(show);
System.out.println("------------------");
System.out.println("注銷賬號");
String demo = delete("demo");
System.out.println(demo);
JDBCUtil.closeAll();
}
public static String update(String username,String password){
JDBCUtil.getConn();
String sql = "update userInfo set password=? where username=?";
JDBCUtil.getPs(sql);
JDBCUtil.setPs(password,username);
int i = JDBCUtil.update();
if(i!=1){
return "修改失敗";
}
return "修改成功";
}
public static String insert(String username,String password){
JDBCUtil.getConn();
String sql = "insert into userInfo values(?,?)";
JDBCUtil.getPs(sql);
JDBCUtil.setPs(username,password);
int i = JDBCUtil.update();
if(i!=1){
return "注冊失敗";
}
return "注冊成功";
}
public static String delete(String username){
JDBCUtil.getConn();
String sql = "delete from userInfo where username=?";
JDBCUtil.getPs(sql);
JDBCUtil.setPs(username);
int i = JDBCUtil.update();
if(i!=1){
return "注銷失敗";
}
return "注冊成功";
}
}


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/355298.html
標籤:其他
