生活随笔
收集整理的這篇文章主要介紹了
原生JDBC和工具类的基本实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
工具:
- IDEA
- MySQL8.0或之前版本
文章目錄
- JDBC原理
- JDBC入門案例
- JDBC的API詳解
- JDBC增刪改查操作
- JDBC工具類
JDBC是Java訪問數據庫的標準規范,可以為不同的關系型數據庫提供統?訪問,它由一組用Java編寫的接口和類組成。
JDBC需要
連接驅動,驅動是兩個設備要進行通信,滿足一定通信數據格式,數據格式由設備提供商規定,設備提供商為設備提供驅動軟件,通過軟件可以與該設備進行通信。
今天我們使用的是mysql的驅動
mysql-connector-java-8.0.20.jar(適配MySQL8.0版本),如果是之前版本的MySQL建議使用應用次數較多的
mysql-connector-java-5.1.38.jar
JDBC核心規范:
- DriverManager:?于注冊驅動
- Connection: 表示與數據庫創建的連接
- Statement: 操作數據庫sql語句的對象
- ResultSet: 結果集或?張虛擬表
JDBC原理
Java提供訪問數據庫規范稱為JDBC,而生產廠商提供規范的實現類稱為驅動。JDBC是接口,驅動是接口的實現,沒有驅動將無法完成數據庫連接,從而不能操作數據庫!每個數據庫廠商都需要提供自己的驅動,用來連接自己公司的數據庫,也就是說驅動一般都由數據庫生成廠商提供(也就是在我們上邊導入的jar包當中)。
開發步驟
注冊驅動獲得連接獲得執行sql語句的對象執行sql語句,并返回結果處理結果釋放資源
JDBC入門案例
首先熟悉一下JDBC的helloworld,
準備MySQL數據:
create table category
(
cid
int PRIMARY KEY AUTO_INCREMENT,
cname
varchar(100)
);
insert into category
(cname
) values('家電');
insert into category
(cname
) values('服飾');
insert into category
(cname
) values('化妝品');
建立一個簡單的表
2. 導入驅動jar包
在IDEA項目下創建lib目錄
在MVN下好jar包并復制,雙擊新建的lib目錄ctrl+v,jar包就保存到該目錄下,之后右鍵導入的jar包,選擇添加到庫…或Add as Library...,就正式添加完畢了
MySQL8.0連接jdbc方法
package JDBCTest
;import org
.junit
.Test
;import java
.sql
.*
;public class JDBCDemo {public static void main(String
[] args
) throws ClassNotFoundException
, SQLException
{@TestClass
.forName("com.mysql.cj.jdbc.Driver");String url
= "jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatments=true";Connection connection
= DriverManager
.getConnection(url
, "root", "root");Statement statement
= connection
.createStatement();String sql1
= "select * from category";ResultSet resultSet
= statement
.executeQuery(sql1
);while (resultSet
.next()) {int cid
= resultSet
.getInt("cid");String cname
= resultSet
.getString("cname");System
.out
.println("cid = " + cid
+ ", cname = " + cname
);}resultSet
.close();statement
.close();connection
.close();}
}
JDBC的API詳解
注冊驅動
有兩種方法:
①DriverManager.registerDriver(new com.mysql.jdbc.Driver());
②Class.forName("com.mysql.jdbc.Driver");
其中第一種辦法不被推薦使用,因為驅動會被注冊兩次,并且會強烈依賴數據庫的驅動jar,通常我們在做開發的時候用的都是第二種方式來注冊驅動獲得鏈接
static Connection getConnection(String url, String user, String password) :試圖建立到給定數據庫 URL 的連接
使用參數說明:
- url 需要連接數據庫的位置(網址)
- user用戶名 (要區別于數據庫表名)
- password 密碼
eg:getConnection("jdbc:mysql://localhost:3306/database", "root", "root");
URL是SUN公司和數據庫廠商的一個協議
jdbc
:mysql
://localhost
:3306/database
協議子協議 IP:端口號數據庫
- mysql數據庫:
- jdbc:mysql://localhost:3306/database 或者
- jdbc:mysql:///database(默認本機連接)
- oracle數據庫:
- jdbc:oracle:thin:@localhost:1521:sid
java.sql.Connection接口:一個連接
接口的實現在數據庫驅動中,所有與數據庫交互都是基于連接對象的。
java.sql.Statement接口: 操作sql語句,并返回相應結果
String sql
= "某SQL語句";
獲取Statement語句執?平臺:Statement stmt
=con
.createStatement();
常用方法:
int executeUpdate(String sql); --執行insert update delete語句.
ResultSet executeQuery(String sql); --執行select語句.
boolean execute(String sql); --僅當執行select并且有結果時才返回true,執行其他的語句返回false.
處理結果集(注:執行insert、update、delete無需處理)
ResultSet實際上就是一張二維的表格,我們可以調用其 boolean next() 方法指向某行記錄,當第一次調用 next() 方法時,便指向第一行記錄的位置,這時就可以使用ResultSet提供的 getXXX(int col) 方法來獲取指定列的數據:(與數組索引從0開始不同,這里索引從1開始)
rs
.next();
rs
.getInt(1);
常用方法:
- Object getObject(int index) / Object getObject(String name) 獲得任意對象
- String getString(int index) / String getString(String name) 獲得字符串
- int getInt(int index) / int getInt(String name) 獲得整型
- double getDouble(int index) / double getDouble(String name) 獲得雙精度浮點型
釋放資源
與IO流?樣,使用后的東西都需要關閉!關閉的順序是先得到的后關閉,后得到的先關閉。
rs
.close();
stmt
.close();
con
.close();
JDBC增刪改查操作
增:
@Testpublic void testJDBC2() throws SQLException
, ClassNotFoundException
{
Class
.forName("com.mysql.jdbc.Driver");String url
= "jdbc:mysql://localhost:3306/mydb";Connection conn
= DriverManager
.getConnection(url
, "root","root");Statement stat
= conn
.createStatement();String sql
= "insert into category(cname) values('測試')";int result
= stat
.executeUpdate(sql
);System
.out
.println("result = " + result
);stat
.close();conn
.close();}
刪:
@Test
public void testJDBC4() throws SQLException
, ClassNotFoundException
{
Class
.forName("com.mysql.jdbc.Driver");
String url
= "jdbc:mysql://localhost:3306/mydb";
Connection conn
= DriverManager
.getConnection(url
, "root",
"root");
Statement stat
= conn
.createStatement();
String sql
= "delete from category where cid=4";
int result
= stat
.executeUpdate(sql
);
System
.out
.println("result = " + result
);
stat
.close();
conn
.close();
}
改:
@Testpublic void testJDBC3() throws SQLException
, ClassNotFoundException
{
Class
.forName("com.mysql.jdbc.Driver");String url
= "jdbc:mysql://localhost:3306/mydb";Connection conn
= DriverManager
.getConnection(url
, "root","root");Statement stat
= conn
.createStatement();String sql
= "update category set cname='測試2' where cid=4";int result
= stat
.executeUpdate(sql
);System
.out
.println("result = " + result
);stat
.close();conn
.close();}
查:
@Testpublic void testJDBC5() throws SQLException
, ClassNotFoundException
{
Class
.forName("com.mysql.jdbc.Driver");String url
= "jdbc:mysql://localhost:3306/mydb";Connection conn
= DriverManager
.getConnection(url
, "root","root");Statement stat
= conn
.createStatement();String sql
= "select * from category where cid = 3";ResultSet rs
= stat
.executeQuery(sql
);if (rs
.next()) {int cid
= rs
.getInt("cid");String cname
= rs
.getString("cname");System
.out
.println("cid = " + cid
+ ",cname = " +cname
);} else {System
.out
.println("數據沒有查到");}rs
.close();stat
.close();conn
.close();}
JDBC工具類
為啥要用到工具類呢?
JDBC操作中有大量的重復性編碼,為了減少不必要的工作量,引入了工具類,獲得數據庫連接操作,將在以后的增刪改查所有功能中都存在,可以封裝工具類JDBCUtils。提供獲取連接對象的方法,從而達到代碼的重復利用。
該工具類提供方法: public static Connection getConnection()
右鍵src,新建一個文件,隨便命名
MySQL8.0用戶
jdbc
.driver
=com
.mysql
.jdbc
.Driver
jdbc
:mysql
://localhost
:3306/mydb
?characterEncoding
=utf8
&useSSL
=false&serverTimezone
=UTC
&rewriteBatchedStatments
=true
jdbc
.user
=root
jdbc
.password
=root
MySQL8.0以前版本的用戶
jdbc
.driver
=com
.mysql
.jdbc
.Driver
jdbc
.url
=jdbc
:mysql
://localhost
:3306/mydb
jdbc
.user
=root
jdbc
.password
=root
建立JDBC工具類
public class JDBCUtils2 {private static String driver
;private static String url
;private static String user
;private static String password
;static {try{
InputStream is
=JDBCUtils2
.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties prop
=new Properties();prop
.load(is
);driver
=prop
.getProperty("jdbc.driver");url
=prop
.getProperty("jdbc.url");user
=prop
.getProperty("jdbc.user");password
=prop
.getProperty("jdbc.password");
Class
.forName(driver
);}catch(IOException e
){e
.printStackTrace();}catch(ClassNotFoundException e
){e
.printStackTrace();}}
public static Connection
getConnection()throws SQLException
{Connection conn
=DriverManager
.getConnection(url
,user
,password
);return conn
;}
public static void close(ResultSet rs
,Statement stat
,Connectionconn
)throws SQLException
{if(rs
!=null
){rs
.close();}if(stat
!=null
){stat
.close();}
實是歸還
;如果Connection是創建的
,就是銷毀
if(conn
!=null
){conn
.close();}}}
使用JDBC工具類 完成查詢
@Test
public void testJDBC6() throws SQLException
{
Connection conn
= JDBCUtils2
.getConnection();
Statement stat
= conn
.createStatement();
ResultSet rs
= stat
.executeQuery("select * from category");
while (rs
.next()) {
int cid
= rs
.getInt("cid");
String cname
= rs
.getString("cname");
System
.out
.println("cid = " + cid
+ ",cname = " + cname
);
}
JDBCUtils2
.close(rs
, stat
, conn
);
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的原生JDBC和工具类的基本实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。