package cn.yunhe.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
/**
*jdbc連接資料庫
*步驟:
*1,關聯資料庫驅動包(匯入驅動jar包)
*2,注冊驅動
*3,連接資料庫獲取連接物件(登陸操作,選擇資料庫操作)
*4,執行的SQL陳述句
*----4.1先獲取執行sql陳述句的物件
*----4.2再通過物件呼叫executeQuery(sql)方法來執行編譯好的sql陳述句,引數傳編譯好的sql陳述句,
*----回傳的是一個結果集 ResultSet型別
*5,處理結果集(執行完SQL陳述句以后會回傳一個結果集)
*---5.1使用while回圈遍歷結果集,先使用next()方法判斷是否有下一條資料,有的話就開始遍歷
*---每次回圈一次是遍歷表中的一行資料,
*---5.2,獲取要查詢的欄位名,引數傳的的欄位名要和上邊定義的sql陳述句需要查詢的欄位名相同
*---(引數也可以傳欄位下標,下標的位置是從1開始,下標要和上邊定義的sql陳述句中的欄位位置相對應)
*---5.3輸出獲取到的欄位
*6,關閉資料庫連接物件
*---6.1資料庫物件要倒著關
*---6.2因為有例外需要捕獲,建議關閉資料庫物件寫在finally代碼塊中(最終必然會執行的代碼塊)
*---6.3由于代碼塊限制變數的作用域問題,所以要將關閉的物件定義成成員變數,并且賦值為null;
*---6.4關閉之前先判斷物件是否為空,不為空就關閉
*關鍵字:
*【Class.forName(className) 注冊驅動
className--引數傳Driver的class路徑(字串型別的)路徑在匯入的驅動com.mysql.jdbc包下面】
*【DriverManager.getConnection(url, user, password)獲取資料庫連接物件,
url---資料庫的地址,名稱 user---登錄資料庫用戶名 password----登錄密碼】(引數都是字串型別的)
* 【通過連接資料庫物件呼叫createStatement()方法來獲取執行sql陳述句的物件,Statement型別(導sql下的包)】
* 【通過執行sql陳述句物件呼叫executeQuery(sql)方法來執行sql陳述句(此方法是獲取查詢結果的方法),回傳的是一個
結果集(ResultSet型別)】
*/
public class JdbcDemo {
public static void main(String[] args) {
//呼叫查詢方法
queryMethod();
}
/**
*jdbc連接與查詢
*/
public static void queryMethod() {
Connection conn=null;
Statement stt=null;
ResultSet res=null;
try {
//注冊驅動
Class.forName("com.mysql.cj.jdbc.Driver");
//連接資料庫進行登錄操作,獲取資料庫連接物件,回傳的是Connection型別
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
//執行的sql陳述句(編譯sql需要執行陳述句 字串型別)
String sql="select eno,ename,datebirth,phone from emp";
//執行編譯好的sql陳述句 1,先獲取執行sql陳述句的物件,回傳的是Statement型別 導sql下的包
stt=conn.createStatement();
//執行編譯好的sql陳述句,2,通過物件呼叫executeQuery(sql)方法來執行,回傳的是一個ResultSet型別(結果集)
res=stt.executeQuery(sql);
//遍歷結果集
while(res.next()) {//判斷結果集中是否有下一條資料,每次回圈遍歷是表中的一行資料
//獲取eno欄位,呼叫getInt()方法,引數傳欄位名,回傳的是int型別,也可以傳欄位位置下表(從1開始)
int eno=res.getInt("eno");
//獲取ename欄位,呼叫getString()方法,引數傳欄位名,回傳的是字串型別
String ename=res.getString("ename");
//獲取datebirth欄位,呼叫getDate()方法,引數傳欄位名,回傳的是日期型別(導util下的包)
Date datebirth=res.getDate("datebirth");
//獲取phone欄位,呼叫getString()方法,引數傳欄位名,回傳的是字串型別
String phone=res.getString("phone");
System.out.println(eno+"--"+ename+"--"+datebirth+"---"+phone);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
//關閉資料庫連接物件---倒著關
//先判斷物件是否為空,不為空就關閉
if(res!=null) {
res.close();
}
if(stt!=null) {
stt.close();
}
if(conn!=null) {
conn.close();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 添加資料
*/
public static void insertMethod() {
Connection conn=null;
Statement stt=null;
try {
//注冊驅動
Class.forName("com.mysql.cj.jdbc.Driver");
//連接資料庫,登錄
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
//編譯執行的sql陳述句
String sql="insert into emp(eno,ename,phone,country) values(14,'小兄黑','18823238899','王鎖國')";
//獲取執行sql陳述句的物件
stt=conn.createStatement();
//通過物件呼叫執行sql陳述句的方法(呼叫修改方法(添加,洗掉,修改)都屬于修改)
int res=stt.executeUpdate(sql);//回傳的是int型別,0代表失敗,正數代表成功
//輸出結果
System.out.println(res);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
//關閉資料庫---倒著關
if(stt!=null) {
stt.close();
}
if(conn!=null) {
conn.close();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 修改資料
*/
public static void updateMethod() {
Connection conn=null;
Statement stt=null;
try {
//注冊驅動
Class.forName("com.mysql.cj.jdbc.Driver");
//連接資料庫,登錄
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
//編譯執行的sql陳述句
String sql="update emp set ename='白xiao白' where eno=12;";
//獲取執行sql陳述句的物件
stt=conn.createStatement();
//通過物件呼叫執行sql陳述句的方法(呼叫修改方法(添加,洗掉,修改)都屬于修改)
int res=stt.executeUpdate(sql);//回傳的是int型別,0代表失敗,正數代表成功
//輸出結果
System.out.println(res);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
//關閉資料庫---倒著關
if(stt!=null) {
stt.close();
}
if(conn!=null) {
conn.close();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 洗掉資料
*/
public static void deleteMethod() {
Connection conn=null;
Statement stt=null;
try {
//注冊驅動
Class.forName("com.mysql.cj.jdbc.Driver");
//連接資料庫,登錄
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ur?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
//編譯執行的sql陳述句
String sql="delete from emp where eno=13";
//獲取執行sql陳述句的物件
stt=conn.createStatement();
//通過物件呼叫執行sql陳述句的方法(呼叫修改方法(添加,洗掉,修改)都屬于修改)
int res=stt.executeUpdate(sql);//回傳的是int型別,0代表失敗,正數代表成功
//輸出結果
System.out.println(res);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
//關閉資料庫---倒著關
if(stt!=null) {
stt.close();
}
if(conn!=null) {
conn.close();
}
}catch (SQLException e) {
e.printStackTrace();
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/229932.html
標籤:其他
