JAVAWEB學習總結,DAY4(JDBC1)
JDBC
概念:Java Data Base Connectivity(Java資料庫連線):是java訪問資料庫的標準規範
作用:JDBC是用於執行SQL語句的Java API(Java語言通過JDBC可以運算元據庫)
擴充套件:專案裡建立檔案,
lib資料夾作用是存放驅動包檔案
bean資料夾作用是存放封裝類,封裝資料
utils資料夾作用是存放工具類,一般在工具類類名後面加上Utils
檔名.properties檔案是存放配置
Ø 首先:匯入資料庫驅動包
在modules建立一個資料夾:lib
把jar包拷貝貼上到lib資料夾
在jar包上右鍵–>Add as Library—[設定在為在當前Module裡使用,起一名稱],確定
四個核心物件
1.DriverManager:用於註冊驅動
2.Connection: 表示與資料庫建立的連線
3.Statement: 執行SQL語句的物件
4.ResultSet: 結果集或一張虛擬表
DriverManager 驅動管理器
註冊驅動(優化了載入驅動類)
獲得連線
Connection 連線物件, 操作都是基於這個連線的
建立執行sql語句物件Statement
Statement 執行SQL語句物件
excuteQuery(String sql) 執行查詢
excuteUpdate(String sql) 執行增刪改
ResultSet 結果集物件
next() 呼叫一次, 游標向下移動一行, 返回boolean型別
get型別(String 列名); 根據列名獲得資料
使用步驟:(重要)
1.註冊驅動
2.獲取連線
3.建立預編譯SQL語句物件
4.設定引數,執行SQL語句
5.釋放資源
1.註冊驅動
概述:我們java程式需要通過資料庫驅動才能連線到資料庫,因此需要註冊驅動MySQL的驅動的入口類是:com.mysql.jdbc.Driver
DriverManager 類用於註冊驅動,
方法:static void registerDriver(Driver driver);向DriverManager 註冊給定驅動程式
使用:DriverManager.registerDriver(驅動物件);傳入對應引數即可
註冊驅動語句
Class.forName(“com.mysql.jdbc.Driver”); // 後期可以將"com.mysql.jdbc.Driver"字串寫在文
件中.
2.獲取連線
DriverManager 類用於連線
方法:static Connection getConnection(String url, String user, String password);連線到給定資料庫URL,並返回連線
引數說明:
-
String url: 連線資料庫的URL,用於說明連線資料庫的位置
-
String user:資料庫的賬號
-
String password: 資料庫的密碼
URL地址格式:協議名:子協議://伺服器名或IP地址:埠號/資料庫名?引數=引數值 MySQL寫法:jdbc:mysql://localhost:3306/day24 本地伺服器 簡寫:jdbc:mysql:///day24
使用:DriverManager.getConnertion(url,user,password); 傳入對應引數即可
獲取連線語句
// 連線到MySQL
// url: 連線資料庫的URL
// user: 資料庫的賬號
// password: 資料庫的密碼
String url="jdbc:mysql://localhost:3306/day24 ";
String uesrname="root";
String password="root";
Connection conn = DriverManager.getConnection(url,uesrname,password);
3.建立預編譯SQL物件 和 4.建立引數,執行SQL語句
獲取Statement 物件介紹
在 Connection 介面中 獲取 Statement 物件
//建立執行sql語句物件
Statement statement=connection.createStatement();
statement 介面
方法:
ResultSet executeQuery(String sql);只能執行MySQL查詢(select)語句,返回結果的集合
int executeUpdate(String sql); 執行的DML((新增)INSERT、(更新)UPDATE、(刪除DELETE)語句,返回受影響的行數
注意:在MySQL中,只要不是查詢就是修改。 executeUpdate:用於執行增刪改 executeQuery:用於 執行查詢
preparedStatement 是statement 子介面
概述:預編譯物件
特點:效能要高,會把SQL語句先編譯,格式固定好,SQL語句中的引數會發生變化,過濾掉使用者輸入的關鍵字(or)
用法:通過connection 物件建立
方法:prepareStatement(String sql); 表示預編譯的sql語句,如果sql語句有引數通過?來佔位
String sql="select * from user where username=? and password=?";
setxxx(int i, Obj obj);(xxx是型別 int、String、Long) i指的就是問號的索引(指第幾個問號,從1開始)
ResultSet 介面
概述:是select語句執行查詢的結果集物件,裡邊封裝了查詢的所有結果資料。相當於是一張二維表。如果想要獲取ResultSet裡的資料,就需要對這個物件進行迴圈遍歷:得到其中每一行的每一個欄位的資料。
ResultSet既然用於封裝執行結果的,所以該物件提供的都是用於獲取資料的get方法:
• 獲取任意型別的資料
• getObject(int index)
• getObject(string columnName)
• 獲取指定型別的資料,例如:
• getString(int index)
• getString(String columnName)
l ResultSet還提供了對結果集進行滾動的方法:
• next():移動到下一行
• Previous():移動到前一行
• absolute(int row):移動到指定行 [row從1開始計算]
• beforeFirst():移動resultSet的最前面。
• afterLast() :移動到resultSet的最後面。
建立預編譯語句
String sql="select * from user where username=? and password=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//設定引數,執行sql語句
prepareStatement.setString(1,root);//給第一個?賦值,給使用者名稱賦值
prepareStatement.setString(2,root);//給第二個?賦值,給密碼賦值
ResultSet resultSet=prepareStatement.executeQuery();
User user=null;
while(resultSet.next()){
user=new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setNickname(resultSet.getString("nickname"));
}
5.釋放資源
釋放資源(先建立的後關閉)
if(resultSet !=null){
resultSet.close();
}
if(statement !=null){
statement.close();
}
if(connection !=null){
connection.close();
}
案例:
package com.lin.jdbcAn;
import com.lin.utils.JdbcUtils;
import com.mysql.jdbc.Driver;
import java.sql.*;
public class JdbcAnLi {
public static void main(String[] args) throws Exception {
//呼叫方法註冊驅動,獲得連線
Connection connection = JdbcUtils.getConnection();
//建立執行SQL語句物件
Statement statement = connection.createStatement();
//執行sql語句,處理結果
String select="select * from student";
ResultSet resultSet = statement.executeQuery(select);
while (resultSet.next()){
System.out.println(resultSet.getObject("id"));
}
//釋放資源
JdbcUtils.release(connection,statement,null);
}
}
//靜態方法類,註冊驅動,獲得連線、釋放資源
package com.lin.utils;
import com.mysql.jdbc.Driver;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
public static String driver;
public static String url;
public static String username;
public static String password;
static {
try {
//讀取db.properties
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
//建立properties物件
Properties properties=new Properties();
//關聯流
properties.load(is);
//獲得配置檔案的內容,根據鍵找值
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
//註冊驅動
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
}
//獲得連線
public static Connection getConnection() throws Exception {
//獲得連線
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
}
//釋放資源
public static void release(Connection connection, Statement statement, ResultSet resultSet){
if(resultSet!=null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
相關文章
- JavaWeb學習總結JavaWeb
- Javaweb整理總結JavaWeb
- JavaWeb基礎知識總結:如何系統學習spring boot?JavaWebSpring Boot
- javaweb學習4JavaWeb
- 學成線上專案總結 - Day4 頁面靜態化
- 學習總結
- JavaWeb 學習筆記JavaWeb筆記
- JavaWeb學習筆記JavaWeb筆記
- javaweb學習路線JavaWeb
- 11月2號(對Javaweb進行所學總結)JavaWeb
- mysqlimport學習總結MySqlImport
- Maven學習總結Maven
- MyBatis 學習總結MyBatis
- awk 學習總結
- JNI 學習總結
- tkinter學習總結
- SVG學習總結SVG
- vue學習總結Vue
- WorkFlow學習總結
- HTML學習總結HTML
- Mybatis學習總結MyBatis
- Kafka 總結學習Kafka
- Typescript學習總結TypeScript
- 【TS】學習總結
- lua 學習總結
- vue 學習總結Vue
- HSF學習總結
- ElasticSearch 學習總結Elasticsearch
- BOM學習總結
- Storm學習總結ORM
- redis學習總結Redis
- JVM學習總結JVM
- Oracle學習總結Oracle
- Ajax學習總結
- WebRTC學習總結Web
- spark 學習總結Spark
- pandas 學習總結
- react學習總結React