JDBC常用的介面和類別庫
1.DriverManager:驅動JDBC驅動的服務類
2.Connection:資料庫連接物件
3. Statement:執行sql的物件
4. PreparedStatement:執行sql的物件
5. ResultSet:結果集物件,封裝查詢結果
使用JDBC的步驟
登錄練習
JDBC工具類
登錄代碼
創作不易,如果本篇博客對您有一定的幫助,大家記得留言+點贊哦,
JDBC是Java程式連接資料庫的一個重要介面,是搭建Java程式與資料庫連接的重要橋梁,描述了一個訪問關系型資料庫的標準類別庫,并且為資料庫廠商提供了一個標準的體系結構,JDBC允許用戶訪問任何形式的表格資料,執行流程:1.連接資料源 2.為資料庫傳遞查詢和更新指令 3.處理資料庫回應并回傳的結果,
如何對常用的SQL陳述句還不熟悉那就先跳轉到這里吧!!史上超強最常用SQL陳述句大全
JDBC常用的介面和類別庫
1.DriverManager:驅動JDBC驅動的服務類
主要功能是注冊驅動、獲取Connection物件
1. 注冊驅動:告訴程式該使用哪一個資料庫驅動jar
//注冊與給定的驅動程式 DriverManager
static void registerDriver(Driver driver) ;
//寫代碼使用
Class.forName("com.mysql.jdbc.Driver");
2. 獲取資料庫連接:
方法:static Connection getConnection(String url, String user, String password)
引數:
url:指定連接的路徑
user:用戶名
password:密碼
語法:jdbc:mysql://ip地址(域名):埠號/資料庫名稱,user,password
細節:如果連接的是本機mysql服務器,并且mysql服務默認埠是3306,則url可以簡寫為:jdbc:mysql:///資料庫名稱
//獲取資料庫連接物件Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
2.Connection:資料庫連接物件
每一個Connection代表一個物理連接會話,要訪問資料庫,必須先獲得資料庫連接,
常用方法:
1. 獲取執行sql 的物件
Statement createStatement()
PreparedStatement prepareStatement(String sql)
2. 管理事務:
開啟事務:setAutoCommit(boolean autoCommit) :呼叫該方法設定引數為false,即開啟事務
提交事務:commit()
回滾事務:rollback()
3. Statement:執行sql的物件
Statemet是一個執行sql陳述句的工具介面,該物件既可以執行DDL、DCL陳述句,也可以執行DML陳述句,當執行SQL查詢時,它會回傳查詢到的結果集,
主要方法
1. boolean execute(String sql) :該方法可以執行任意的sql陳述句,了解即可
2. int executeUpdate(String sql) :執行DML(insert、update、delete)陳述句、DDL(create,alter、drop)陳述句
回傳值:影響的行數,可以通過這個影響的行數判斷DML陳述句是否執行成功
回傳值>0的則執行成功,反之,則失敗,
3. ResultSet executeQuery(String sql) :執行DQL(select)陳述句
該方法只能用于執行查詢陳述句,并回傳查詢結果對應的ResultSet物件,
4. PreparedStatement:執行sql的物件
PreparedStatement是一個預編譯的Statement物件,PreparedStatement是Statement的子介面,它允許資料庫預編譯SQL陳述句,以后每次只需改變SQL命令引數,避免資料庫每次都編譯SQL陳述句,因此性能更好,預編譯SQL解決了SQL注入的問題, 預編譯的SQL:引數使用?作為占位符,
常用方法
boolean execute():執行此PreparedStatement物件中的SQL陳述句,該陳述句可以是任何型別的SQL陳述句,
int executeUpdate() :執行此PreparedStatement物件中的SQL陳述句,它必須是一個SQL資料操縱語言(DML)陳述句,比如
INSERT,UPDATE或DELETE; 或不回傳任何內容的SQL陳述句,例如DDL陳述句,ResultSet executeQuery() :在此PreparedStatement物件中執行SQL查詢,并回傳
ResultSet查詢生成的物件,
由于PreparedStatement是Statement的子介面,所以他們的常用方法很一致,PreparedStatement主要是預編譯SQL,解決了SQL注入的問題,提高性能,
5. ResultSet:結果集物件,封裝查詢結果
ResultSet是一個結果物件,該物件包含查詢結果的方法,ResultSet可以通過索引或列名類獲得列中的資料,
常用方法
boolean next(): 游標向下移動一行,判斷當前行是否是最后一行末尾(是否有資料),如果是,則回傳false,如果不是則回傳true
void beforeFirst():將ResultSet的記錄指標定位到首行之前,初始位置,
boolean absolute(int row):將結果集的記錄指標移動到第row行,
getXxx(引數):獲取資料
Xxx:代表資料型別 如: int getInt() , String getString()
引數:
1. int:代表列的編號,從1開始 如: getString(1)
2. String:代表列名稱, 如: getDouble("balance")
使用JDBC的步驟
| 靜態編譯SQL步驟:使用Statement
1. 匯入驅動jar包 mysql-connector-java-5.1.37-bin.jar 1.復制mysql-connector-java-5.1.37-bin.jar到專案的libs目錄下 2.右鍵-->Add As Library 2. 注冊驅動 3. 獲取資料庫連接物件 Connection 4. 定義sql 5. 獲取執行sql陳述句的物件 Statement 6. 執行sql,接受回傳結果 7. 處理結果 8. 釋放資源 | 動態編譯SQL步驟:使用PreparedStatement物件
1. 匯入驅動jar包 mysql-connector-java-5.1.37-bin.jar 2. 注冊驅動 3. 獲取資料庫連接物件 Connection 4. 定義sql * 注意:sql的引數使用?作為占位符, 如:select * from user where username = ? and password = ?; 5. 獲取執行sql陳述句的物件 PreparedStatement Connection.prepareStatement(String sql) 6. 給?賦值: * 方法: setXxx(引數1,引數2) * 引數1:?的位置編號 從1 開始 * 引數2:?的值 7. 執行sql,接受回傳結果,不需要傳遞sql陳述句 8. 處理結果 9. 釋放資源 |
public static void main(String[]args)throwsException{
//1.匯入驅動jar包
//2.注冊驅動
Class.forName("com.mysql.jdbc.Driver");
//3.獲取資料庫連接物件Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
//4.定義SQL
Stringsql="update emp set salary=8001 WHERE id=1001;";
//5.執行SQL陳述句物件Statement
Statementstmt=conn.createStatement();
//6.執行SQL,接識訓傳結果
intcount=stmt.executeUpdate(sql);
//7.處理結果
System.out.println(count);
//8.釋放資源
stmt.close();
conn.close();
}
登錄練習
JDBC工具類
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具類
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 檔案的讀取,只需要讀取一次即可拿到這些值,使用靜態代碼塊
*/
static{
//讀取資源檔案,獲取值,
try {
//1. 創建Properties集合類,
Properties pro = new Properties();
//獲取src路徑下的檔案的方式--->ClassLoader 類加載器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
//2. 加載檔案
pro.load(new FileReader(path));
//3. 獲取資料,賦值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注冊驅動
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 獲取連接
* @return 連接物件
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 釋放資源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 釋放資源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
登錄代碼
public class DemoLogin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入賬號:");
String userName = sc.nextLine();
System.out.println("請輸入密碼:");
String password = sc.nextLine();
boolean flag = new DemoLogin().login2(userName, password);
if (flag) {
System.out.println("登錄成功!");
} else {
System.out.println("賬號或密碼錯誤!");
}
}
public boolean login(String name, String password) {
//賬號密碼正確性校驗
if (name == null || password == null) {
return false;
}
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConn();
statement = conn.createStatement();
String sql = "SELECT*FROM login WHERE username='" + name + "'andpassword='" + password + "';";
System.out.println(sql);
resultSet = statement.executeQuery(sql);
return resultSet.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(conn, statement, resultSet);
}
return false;
}
//使用PreparedStatement傳參
public boolean login2(String name, String password) {
//賬號密碼正確性校驗
if (name == null || password == null) {
return false;
}
Connection conn = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConn();
String sql = "SELECT*FROM login WHERE username=? and password=?;";
//預編譯SQL
statement = conn.prepareStatement(sql);
System.out.println(sql);
//給引數賦值
statement.setString(1, name);
statement.setString(2, password);
//執行查詢
resultSet = statement.executeQuery();
return resultSet.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(conn, statement, resultSet);
}
return false;
}
}
重磅福利:如果覺得以上代碼很麻煩請跳轉到下一篇博客《Java-Spring JDBC》,你會發現只要會寫SQL陳述句就行了,剩下的框架都幫你做好了,
創作不易,如果本篇博客對您有一定的幫助,大家記得留言+點贊哦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/257524.html
標籤:其他
上一篇:解決SQLite3資料庫Error: database disk image is malformed
下一篇:分組查詢
