JDBC作用接口和创建的步骤详细解析
JDBC
1.DCL(介紹)
1.1創建用戶:
CREATE?USER?'用戶名'@'主機名'?IDENTIFIED?BY?'密碼'; 關鍵字說明:
? ? 1.?`用戶名`:將創建的用戶名 ??
??? 2.?`主機名`:指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程 主機登陸,可以使用通配符% ??
??? 3.?`密碼`:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務器
具體的操作:
-- 1.創建用戶 identified by 為用戶設置密碼 -- user1用戶只能在localhost這個IP登錄mysql服務器 CREATE?USER?'user1'@'localhost'?IDENTIFIED?BY?'123'; ‐‐?user2用戶可以在任何電腦上登錄mysql服務器 CREATE?USER?'user2'@'%'?IDENTIFIED?BY?'123';1.2授權用戶
授權格式:GRANT?權限1,?權限2...?ON?數據庫名.表名?TO?'用戶名'@'主機名'; 關鍵字說明.
? 1.?`GRANT`?授權關鍵字 ?
? 2.?授予用戶的權限,如`SELECT`,`INSERT`,`UPDATE`等。如果要授予所的權限則使用`ALL` ??
? 3.?`數據庫名.表名`:該用戶可以操作哪個數據庫的哪些表。如果要授予該用戶對所有數據庫和表的相應操作權限則 可用*表示,如`*.*` ??
? 4.?`'用戶名'@'主機名'`:?給哪個用戶授權
具體的操作:
1.1給luliang用戶分配對test這個數據庫操作的權限
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON test.* TO 'luliang'@'localhost';1.2給luliang用戶分配對所有的數據庫操作的權限。
CRANT ALL ON *.* TO 'luliang'@'localhost';1.3撤銷授權
REVOKE?ALL?ON?test.*?FROM?'user1'@'localhost';
具體操作:
撤銷luliang用戶對test操作的權限。
REVOKE ALL ON test.*FROM 'luliang'@'localhost';1.4查看權限
SHOW?GRANTS?FOR?'用戶名'@'主機名';
查看luiang用戶的權限
SHOW GREATS FOR 'luliang'@'localhost';1.5刪除用戶
DROP?USER?'用戶名'@'主機名';
具體的操作:
DROP USER 'luliang'@'localhost';1.6修改用戶名
修改管理員密碼
mysqladmin?-uroot?-p?password?新密碼?--?新密碼不需要加上引號
注意:需要在未登錄MySql的情況下的操作
具體操作:
mysqlamdin -uroot -p password 123456
輸入老密碼
1.7修改普通用戶密碼
set password for 'luliang'@'localhost'=password('666666');
JDBC處理MysSQL中的用戶:
JDBC的概念:
JDBC:是有Sun公司提供的一套的規范的(接口),由一推數據。
客戶端操作MySQL數據庫的方式
1. 使用第三方客戶端來訪問MySQL:SQLyog、Navicat、SQLWave、MyDB Studio、EMS SQL Manager for MySQL
2. 使用MySQL自帶的命令行方式
3. 通過Java來訪問MySQL數據庫,
什么是JDBC: Java?Data?Base?Connectivity (Java數據庫連接) JDBC是Java訪問數據庫的 標準規范
JDBC的作用:JDBC是用于執行SQL語句的Java API(Java語言通過JDBC可以操作數據庫)
JDBC的由來:
jdbc的好處;
建立與數據庫的連接。
向數據庫發起查詢請求。
處理數據庫返回結果。?
JDBC的快速入門:
步驟:
1.注冊驅動
2.獲取連接
3.創建SQL執行平臺
4.執行SQL語句
5.處理結果
6.釋放資源
代碼演示:
package com.luliang.JDBC;import org.junit.Test; import java.sql.*; public class Demo01 {@Testpublic void select() throws Exception {//1.注冊驅動/*1. 注冊驅動任意數據庫的類都是java.sql.Driver的實現類,要注冊的也是接口的實現類記住:MySql的驅動類名是:com.mysql.jdbc.Driver如何注冊:不推薦的方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver());有問題:注冊了2次硬編碼問題推薦的方式:Class.forName("com.mysql.jdbc.Driver"); 把指定名稱的類加載到JVM內存中本質是使用了反射技術*/Class.forName("com.mysql.jdbc.Driver");//2.獲取連接/*2.獲取連接連接對象:java.sql.Connection如何獲取連接對象:DriverManager.getConnection(url, username, password)url:數據庫連接地址。JDBC規定了url的寫法 由三部分組成,三部分之間使用英文冒號連接第一部分:協議名,固定值jdbc第二部分:子協議,通常是數據庫的類型,比如:MySql的寫法是mysql第三部分:數據庫的具體地址,由數據庫廠商自行決定的,不同數據庫的寫法不同。MySql的寫法://數據庫的ip:數據庫的端口/database的名稱 比如://192.168.18.18:3306/heima63連接本機、默認端口的MySql,可以簡寫成:///heima63username:數據庫的登錄名password:數據庫的密碼*/Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lu", "root", "root");//3.創建SQL執行平臺/*3.創建SQL執行平臺SQL執行平臺:是JDBC規范提供了,專門用來執行SQL語句的一個對象 java.sql.Statement獲取的方式:connection.createStatement()*/Statement statement = connection.createStatement();//4.執行SQL語句/*執行SQL語句執行DQL語句:statement.executeQuery(sql),返回:ResultSet,查詢的結果集DQL:查詢數據1.查詢所有的數據:select*from 表明2.查詢指定的列:select 字段1,字段2,..from 表名;3.查詢處理null值:select if null (字段,默認值) from 表名;4.查詢并計算:select 字段1+字段2,.....from 表面;執行DML語句:statement.executeUpdate(sql),返回:int,表示影響的行數執行任意語句:statement.execute(sql),返回:boolean, 如果執行的是查詢,返回true;否則返回false*/ResultSet resultSet = statement.executeQuery("SELECT *FROM emp ");//int resultSet = statement.executeUpdate("INSERT INTO student4(id,name,price) VALUES (NULL ,'luliang2',1000000)"); //返回值為://5.處理結果while (resultSet.next()){String name = resultSet.getString("name");String gender = resultSet.getString("gender");double salary = resultSet.getDouble("salary");Date join_date = resultSet.getDate("join_date");int dept_id = resultSet.getInt("dept_id");System.out.println("姓名:"+name+", 工資:"+salary+", 年齡:"+join_date+", 學號:"+dept_id+",性別:"+gender);}//System.out.println("影響行數:" + resultSet);//6.釋放資源//釋放資源。順序:ResultSet=>Statement=>ConnectionresultSet.close();statement.close();connection.close();} }next用法:
JDBC常用的API
Connection接口:
package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils; import com.luliang.JDBCbao.JdbcUtils1;import java.sql.Connection; import java.sql.Statement;/* 面試題: 什么時候,需要把 setAtuoCommit設為 false? 答: 當有多個dml 同時執行,將其看做一個整體提交,則使用 事務管理 , 則需要把 setAutoCommit 設為false;*/ public class Demo05 {public static void main(String[] args) throws Exception{//1.加載驅動,獲取連接Connection connection = JdbcUtils1.getConnection();//2.開啟事務把事務設置不自動提交connection.setAutoCommit(true);//設置這個不自動提交事務就是數據庫的數據沒有影響//3.創建sql對象(Statement / PreparedStatement /CallableStatement)Statement statement = connection.createStatement();//4.通過statement向數據庫發出sql命令//對emp表進行操作: 把SMITH 的sal -10 給 KING sal+10int i = statement.executeUpdate("UPDATE emp SET salary=salary+10000 WHERE NAME ='孫悟空'");System.out.println("影響的行數:"+i);//5.關閉資源statement.close();connection.close();} }當有多個dml 同時執行,將其看做一個整體提交,則使用 事務管理 ,則需要把 setAutoCommit 設為false;
Statement接口和PreparedStatement的區別
后者的效率比前者高,在使用PreparedStatement對象執行SQL命令時,命令被數據庫進行編譯和解析,然后被放到命令緩沖區,然后,每當執行同一個PreparedStatement對象時,它就會被解析一次,但不會被再次編譯。在緩沖區中可以返現預編譯的命令,并且可以重新使用。如果insert、update、delete ,最好使用PreparedStatement,在有大量用戶的企業級應用軟件中,經常會重復執行相同的SQL命令,使用PreparedStatement對象帶來的編譯次數的減少能夠提高數據庫的總體性能。
ResuilSet接口:
說明:在默認的情況下,我們的rs結果集,只能向前移動,這樣rs結果就不能復用,如果希望復用,則可以這樣做:
package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils1;import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement;/* ResultSet 的可選項有: resultSetType - 結果集類型, 它是 ResultSet.TYPE_FORWARD_ONLY、 ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一 resultSetConcurrency - 并發類型; 它是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE 之一*/ public class Demo07 {public static void main(String[] args) throws Exception{//查詢//1.注冊驅動,獲取連接Connection connection = JdbcUtils1.getConnection();//2,創建SQL執行平臺Statement statement = connection.createStatement();//執行SQL語句//假設我們希望resultSet結果,可以滾動(可以向前,也可以向后)ResultSet resultSet = statement.executeQuery("SELECT *FROM emp");while (resultSet.next()){System.out.println(resultSet.getString("name"));}System.out.println("---------------");resultSet.beforeFirst();while (resultSet.next()){System.out.println(resultSet.getString("name"));}} }JDBC的增刪改查:
增:代碼演示
package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils; import com.luliang.JDBCbao.JdbcUtils1;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; //插入 public class Demo02 {public static void main(String[] args) {Connection connertion = null;try {connertion = JdbcUtils1.getConnection();} catch (Exception e) {e.printStackTrace();}//創建SQL執行的平臺Statement statement = null;try {statement = connertion.createStatement();} catch (SQLException e) {e.printStackTrace();}//執行SQL語句//執行DML語句:statement.executeUpdate(sql),返回值:int,表示影響的行數try {int i = statement.executeUpdate("INSERT INTO product1(id,pname,price)VALUES (null,'陸良1',100000.00)");System.out.println("處理結果:"+i);} catch (SQLException e) {e.printStackTrace();}try {statement.close();} catch (SQLException e) {e.printStackTrace();}try {connertion.close();} catch (SQLException e) {e.printStackTrace();}} }刪:代碼演示
package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;//刪除 public class Demo04 {public static void main(String[] args) {Connection connertion = JdbcUtils.getConnertion();//創建SQL執行平臺Statement statement=null;try {statement = connertion.createStatement();//執行SQL語句// 執行DML語句:statement.executeUpdate(sql),返回值:int,表示影響的行數int i = statement.executeUpdate("DELETE FROM product1 WHERE id=5");//處理SQL語句System.out.println("執行后的結果:"+i);//關閉資源流statement.close();} catch (SQLException e) {e.printStackTrace();}finally {try {connertion.close();} catch (SQLException e) {e.printStackTrace();}}} }改:代碼演示
package com.luliang.lianxi;import com.luliang.JDBCbao.JdbcUtils;import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement;//修改 public class Demo03 {public static void main(String[] args) {Connection connertion = JdbcUtils.getConnertion();Statement statement = null;//創建SQL平臺try {statement = connertion.createStatement();//執行SQL語句int i = statement.executeUpdate("UPDATE product1 SET price=price+10000 WHERE id=1 ");System.out.println("執行影響后的:"+i);} catch (SQLException e) {e.printStackTrace();}finally {try {statement.close();} catch (SQLException e) {e.printStackTrace();}try {connertion.close();} catch (SQLException e) {e.printStackTrace();}}} }查:
package com.luliang.lianxi;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;//查詢 public class Demo01 {public static void main(String[] args) throws Exception{//注冊驅動Class.forName("com.mysql.jdbc.Driver");//獲取連接Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee","root","root");//創建SQL執行平臺Statement statement = connection.createStatement();//執行SQL語句//執行DQL語句:statement.executeQuery(sql),返回值:ResultSet,是查詢的結果集對象ResultSet resultSet = statement.executeQuery("SELECT *FROM employee");//處理結果while (resultSet.next()){System.out.println("id:"+resultSet.getInt("id")+",姓名:"+resultSet.getString("name")+", 密碼:"+resultSet.getString("PASSWORD"));}//釋放資源resultSet.close();statement.close();connection.close();} }JDBC的工具類封裝:
==JDBC的事務管理==
?事務管理相關的API
?事務管理的方法,都是由Connection對象提供的:
-
開啟事務:connection.setAutoCommit(false)
-
提交事務:connection.commit()
-
回滾事務:connection.rollback()
事務管理的步驟:
try{//1.注冊驅動//2.獲取連接//===開啟事務=== 只要在執行SQL之前開啟即可//3.創建SQL執行平臺//4.執行SQL語句//5.處理結果//===關閉事務:提交事務=== 只要在釋放資源之前,關閉事務即可 }catch(Exception e){//===關閉事務:回滾事務=== }finally{//6.釋放資源 }JDBC的實現登錄案例:
分析:
1.使用數據庫保存的用戶的賬號和密碼
2.讓用戶輸入賬號和密碼
3.使用SQL根據用戶的賬號和密碼去數據庫查詢數據
4.如果查詢到數據,說明登錄失敗。
代碼演示:
package com.luliang.DengLu; import com.luliang.JDBCbao.JdbcUtils1; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; /* 1. 使用數據庫保存用戶的賬號和密碼 2. 讓用戶輸入賬號和密碼 3. 使用SQL根據用戶的賬號和密碼去數據庫查詢數據 4. 如果查詢到數據,說明登錄成功 5. 如果查詢不到數據,說明登錄失敗*/ public class Demo01 {public static void main(String[] args) throws Exception{//1.編寫代碼讓用戶輸入Scanner scanner = new Scanner(System.in);System.out.println("請你輸入用戶名:");String name = scanner.nextLine();System.out.println("請你輸入密碼:");String password=scanner.nextLine();//2.使用SQL根據用戶的賬號和密碼去數據庫查詢數據//2.1注冊驅動,獲取連接Connection connection = JdbcUtils1.getConnection();//2.2創建SQL執行平臺Statement statement = connection.createStatement();//2.3執行SQL語句String resultSet1="SELECT *FROM user WHERE name='"+name+"' AND password='"+password+"'";//?如果查詢到數據,說明登錄成功,如果查詢不到數據,說明登錄失敗ResultSet resultSet = statement.executeQuery(resultSet1);//判斷if(resultSet.next()){//能進來查詢到了數據String pname = resultSet.getString("name");System.out.println("歡迎你登陸:"+pname);}else {//查詢不到數據,說明登陸失敗System.out.println("賬號密碼錯誤....");}//關閉資源流resultSet.close();statement.close();connection.close();} }?
總結
以上是生活随笔為你收集整理的JDBC作用接口和创建的步骤详细解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Atlassian发布事故管理解决方案J
- 下一篇: Matlab 2021b安装