jdbc執行過程 jar包下載


工具和准備:

MYSQL 8.0jar包:

鏈接:https://pan.baidu.com/s/1O3xuB0o1DxmprLPLEQpZxQ 
提取碼:grni 

使用eclipse開發首先把jar包導入內庫中

首先將jar包復制到項目src下,右擊src點擊build path然后會在Refrenced中看到jar包


本篇博客主要講述jdbc的操作過程,每一步需要干什么,最后用代碼實現一個有數據庫的簡易注冊登錄功能。

下面的代碼能夠對jdbc的執行過程有初步的了解。

大體分為以下幾步:

首先進行注冊驅動

可以使用  Driver driver=new com.mysql.cj.jdbc.Driver();   DriverManager.registerDriver(driver);  來進行注冊驅動

也可以使用java反射技術采用別人的接口來進行注冊驅動
Class.forName("com.mysql.cj.jdbc.Driver");

接下來進行獲取數據庫連接

需要url,數據庫用戶名以及密碼

通過DriverManager.getConnection(url, user, password)賦給Connection對象

注意:

mysql8.0的url以及mysql接口名稱與mysql5.0發生了變化

mysql5.0:

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/suzy";(suzy為我的數據庫名稱)

mysql8.0:

Class.forName("com.mysql.cj.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai";

接下來獲取數據庫操作對象

通過createstatement方法賦給Statement對象

接下來執行sql語句

自己構建sql語句通過executeQuery方法進行執行

接下來處理查詢結果集

當rs.next為true的時候不斷打印

最后將資源關閉

rs.close();   st.close();   conn.close();

了解jdbc執行過程代碼如下:

package jdbcdemo;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcTest01 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Statement st=null;
Connection conn=null;
ResultSet rs=null;
try
{
//1.注冊驅動
/*    Driver driver=new com.mysql.cj.jdbc.Driver();
DriverManager.registerDriver(driver);*/
Class.forName("com.mysql.cj.jdbc.Driver");
//2.獲取數據庫連接
String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai";
String user="root";
String password="10086";
conn=DriverManager.getConnection(url, user, password);
//3.獲取數據庫操作對象
st=conn.createStatement();
//4.執行sql語句
String sql="select e.ename,e.sal from emp e";
rs=st.executeQuery(sql);
//5.處理查詢結果集
while(rs.next())
{
String ename=rs.getString("ename");
double sal=rs.getDouble("sal");
System.out.println(ename+"||"+sal);
}
}
catch (Exception e)
{
e.printStackTrace();
}finally
{
if(rs!=null)
{
try
{
rs.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
if(st!=null)
{
try
{
st.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
if(conn!=null)
{
try
{
conn.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}

}

}

 


使用jdbc實現一個簡易的注冊代碼如下:

public class JdbcTest02 {

public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
Scanner in =new Scanner(System.in);
System.out.println("歡迎來控制台進行注冊");
System.out.println("請輸入您要注冊的用戶名");
String name=in.nextLine();
System.out.println("請輸入您的密碼");
String pwd=in.nextLine();
Connection conn=null;
Statement st=null;
int count=0;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai";
String user="root";
String password="10086";
conn=DriverManager.getConnection(url, user, password);
st=conn.createStatement();
String sql="insert into t_user(username,password) values('"+name+"','"+pwd+"')";
count=st.executeUpdate(sql);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
if(st!=null)
{
st.close();
}
if(conn!=null)
{
conn.close();
}
}
if(count==1)
{
System.out.println("注冊成功!!!");
}
else
{
System.out.println("注冊失敗!!!");
}
}

}

 


注冊界面效果圖:

 

數據庫相應的添加了剛才注冊的信息

 

使用jdbc實現一個簡易的登錄代碼如下:

public class JdbcTest03 {

public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
Scanner in =new Scanner(System.in);
System.out.println("歡迎來控制台進行登錄");
System.out.println("請輸入您的用戶名");
String name=in.nextLine();
System.out.println("請輸入您的密碼");
String pwd=in.nextLine();
Statement st=null;
Connection conn=null;
ResultSet rs=null;
PreparedStatement ps=null;
boolean flag=false;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//2.獲取數據庫連接
String url="jdbc:mysql://localhost:3306/suzy?useSSL=false&serverTimezone=Asia/Shanghai";
String user="root";
String password="10086";
conn=DriverManager.getConnection(url, user, password);
//3.獲取數據庫操作對象
//st=conn.createStatement();
//4.執行sql語句
//String sql="select username from t_user where username='"+name+"' and password='"+pwd+"'";
//定義sql語句框架
String sql="select username from t_user where username= ? and password = ?";
//sql語句進行預編譯
ps=conn.prepareStatement(sql);
//對sql語句進行賦值
ps.setString(1, name);
ps.setString(2, pwd);
rs=ps.executeQuery();
//rs=st.executeQuery(sql);
if(rs.next())
{
flag=true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally
{
if(rs!=null)
{
rs.close();
}
if(ps!=null)//st!=null
{
//st.close();
ps.close();
}
if(conn!=null)
{
conn.close();
}
}
if(flag)
{
System.out.println("登陸成功!!!");
}
else
{
System.out.println("您輸入的用戶名或密碼錯誤");
}

}

}

 


登錄界面效果如下:

 

 

可是發現用戶名ss數據庫並沒有卻能登陸成功,debug后發現這樣的密碼導致sql語句變為select username from t_user where (username='ss'  and password ='asdf') or 'kk'='kk',后面的'kk'='kk'是恆成立的,前面是or語句所以百分百執行

怎樣解決這個bug呢:

采用預編譯對象prepareStatement,定義sql框架使用?占位符,預編譯之后進行Sql賦值

上述代碼是解決bug之后的(有注釋的是有bug時候的代碼)

接下來運行發現得到正確的運行結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM