JDBC數(shù)據(jù)庫(kù)的使用操作總結(jié)_MySQL教程
推薦:MySQL筆記之?dāng)?shù)據(jù)類型詳解本篇文章對(duì)mysql數(shù)據(jù)類型進(jìn)行了詳細(xì)的介紹,需要的朋友參考下
JDBC是一組能夠執(zhí)行SQL語(yǔ)句的API
由于傳統(tǒng)的數(shù)據(jù)庫(kù)操作方式需要程序員掌握各個(gè)不同的數(shù)據(jù)庫(kù)的API,極其不便
因此java定義了JDBC這一標(biāo)準(zhǔn)的接口和類,為程序員操作數(shù)據(jù)庫(kù)提供了統(tǒng)一的方式
JDBC的操作方式比較單一,由五個(gè)流程組成:
1.通過(guò)數(shù)據(jù)庫(kù)廠商提供的JDBC類庫(kù)向DriverManager注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)
2.使用DriverManager提供的getConnection()方法連接到數(shù)據(jù)庫(kù)
3.通過(guò)數(shù)據(jù)庫(kù)的連接對(duì)象的createStatement方法建立SQL語(yǔ)句對(duì)象
4.執(zhí)行SQL語(yǔ)句,并將結(jié)果集合返回到ResultSet中
5.使用while循環(huán)讀取結(jié)果
6.關(guān)閉數(shù)據(jù)庫(kù)資源
下面來(lái)看看具體操作Mysql數(shù)據(jù)庫(kù)的方法
準(zhǔn)備工作
首先我們需要建立一個(gè)數(shù)據(jù)庫(kù)和一張簡(jiǎn)單的表
mysql> create database person;
Query OK, 1 row affected (0.00 sec)
mysql> use person;
Database changed
mysql> create table student(
-> id int,
-> name varchar(20),
-> birth year
-> ) default charset=utf8;
Query OK, 0 rows affected (0.10 sec)
然后往里面插入幾條數(shù)據(jù)
mysql> insert into student values
-> (1,'張三',1990),
-> (2,'李四',1991),
-> (3,'王五',1992);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
這樣一張簡(jiǎn)單的表就建好了
mysql> select * from student;
+------+--------+-------+
| id | name | birth |
+------+--------+-------+
| 1 | 張三 | 1990 |
| 2 | 李四 | 1991 |
| 3 | 王五 | 1992 |
+------+--------+-------+
rows in set (0.00 sec)
接下來(lái),去mysql官網(wǎng)下載數(shù)據(jù)庫(kù)連接器這個(gè)包
其中這個(gè)包里面含有一份文檔,里面列舉了基本的使用方法,可以參考
我們的操作也是按照這份文檔中的內(nèi)容進(jìn)行,然后最主要的地方就是導(dǎo)入這個(gè)jar包

為了操作方便,這里使用eclipse來(lái)導(dǎo)入
右鍵項(xiàng)目-->構(gòu)件路徑-->添加外部歸檔,添加好了之后如下所示

現(xiàn)在我們正式開始使用java來(lái)操作mysql數(shù)據(jù)庫(kù)
JDBC操作實(shí)例1:最簡(jiǎn)單的查詢操作
import java.sql.*;
public class Demo {
//為了代碼緊湊性,暫時(shí)拋出所有異常
public static void main(String[] args) throws Exception {
//注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");
//建立數(shù)據(jù)庫(kù)連接
//參數(shù)一:jdbc:mysql//地址:端口/數(shù)據(jù)庫(kù),參數(shù)二:用戶名,參數(shù)三:密碼
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/person","root","admin");
//創(chuàng)建SQL語(yǔ)句
Statement st = conn.createStatement();
//執(zhí)行語(yǔ)句,返回結(jié)果
ResultSet rt = st.executeQuery("show tables");
//循環(huán)取出結(jié)果
while(rt.next()) {
//獲取字段
System.out.println(rt.getString("Tables_in_person"));
}
//關(guān)閉資源,最先打開的最后關(guān)
rt.close();
st.close();
conn.close();
}
}
運(yùn)行結(jié)果:student
如此便可執(zhí)行show tables語(yǔ)句查詢出當(dāng)前數(shù)據(jù)庫(kù)含有多少?gòu)埍?/p>
其中rt.getString()方法是獲取字段,這點(diǎn)需要注意
關(guān)閉資源的方式也與以往相反
不過(guò),上面的操作方式靈活性不大,并且不嚴(yán)謹(jǐn)
實(shí)例2:優(yōu)化的查詢操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/person";
String user = "root";
String pwd = "admin";
String sql = "select * from student";
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,pwd);
st = conn.createStatement();
//執(zhí)行查詢語(yǔ)句,另外也可以用execute(),代表執(zhí)行任何SQL語(yǔ)句
rs = st.executeQuery(sql);
while(rs.next()) {
System.out.println(rs.getObject(1) + " " +
rs.getObject(2) + " " + rs.getInt("birth"));
}
//分別捕獲異常
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
//判斷資源是否存在
if(rs != null) {
rs.close();
//顯示的設(shè)置為空,提示gc回收
rs = null;
}
if(st != null) {
st.close();
st = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:

這里把異常給分別捕獲了,并且相關(guān)的字符串全部用變量定義
需要注意下循環(huán)取出數(shù)據(jù)里面的getInt()方法,此處必須知道類型和字段才能取出
如果不知道可以使用getObject(1)取出第一列,getObject(2)取出第二列,以此類推
實(shí)例3:自定義變量插入到數(shù)據(jù)庫(kù)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
//參數(shù)檢查
if (args.length != 3) {
System.out.println("參數(shù)形式不對(duì)");
System.exit(0);
}
String id = args[0];
String name = args[1];
String birth = args[2];
String sql = "insert into student values(" + id + ",'" + name +
"'," + "'" + birth + "')";
System.out.println(sql);
String url = "jdbc:mysql://localhost:3306/person";
String user = "root";
String pwd = "admin";
Connection conn = null;
Statement st = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,pwd);
st = conn.createStatement();
//注意,此處是excuteUpdate()方法執(zhí)行
st.executeUpdate(sql);
//分別捕獲異常
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(st != null) {
st.close();
st = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:

這里運(yùn)行需要設(shè)置自變量,窗口中右鍵-->運(yùn)行方式-->運(yùn)行配置
然后在自變量里面寫4 susan 1993,我沒(méi)有寫中文,因?yàn)楫a(chǎn)生亂碼,目前還不清楚原因
需要注意的是,執(zhí)行插入的SQL語(yǔ)句比較難寫,最好是打印出SQL語(yǔ)句用以檢查
實(shí)例4:PreparedStatement應(yīng)用
從上面的Demo可以看到,插入數(shù)據(jù)的時(shí)候,SQL操作相當(dāng)不便
這里可以使用PreparedStatement對(duì)象來(lái)簡(jiǎn)化SQL語(yǔ)句的建立
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Demo {
public static void main(String[] args) {
if (args.length != 3) {
System.out.println("參數(shù)形式不對(duì)");
System.exit(0);
}
String id = args[0];
String name = args[1];
String birth = args[2];
String url = "jdbc:mysql://localhost:3306/person";
String user = "root";
String pwd = "admin";
Connection conn = null;
//聲明PreparedStatement對(duì)象的引用
PreparedStatement pst = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,pwd);
//使用?代替變量
pst = conn.prepareStatement("insert into student values (?,?,?)");
//給指定參數(shù)的位置設(shè)定變量
pst.setString(1, id);
pst.setString(2, name);
pst.setString(3, birth);
pst.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(pst != null) {
pst.close();
pst = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:

實(shí)例5:Batch批處理
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/person";
String user = "root";
String pwd = "admin";
Connection conn = null;
Statement st = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,pwd);
st = conn.createStatement();
//添加批處理
st.addBatch("insert into student values(6,'Jerry','1995')");
st.addBatch("insert into student values(7,'Greg','1996')");
st.addBatch("insert into student values(8,'Ryan','1997')");
//執(zhí)行批處理
st.executeBatch();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(st != null) {
st.close();
st = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:

批處理比較簡(jiǎn)單,只需先建立Statement對(duì)象,然后逐個(gè)添加批處理即可
最后使用executeBatch()方法執(zhí)行批處理
此外,PreparedStatement對(duì)象也可以使用批處理
PreparedStatement ps = conn.prepareStatement("insert into student values(?,?,?)");
ps.setInt(1,8);
ps.setString(2,"GG");
ps.setString(3,"1996");
ps.addBatch();
ps.executeBatch();
實(shí)例6:Transaction事務(wù)處理
事務(wù)處理是要求sql以單元的形式更新數(shù)據(jù)庫(kù),要求其確保一致性
如銀行的轉(zhuǎn)賬業(yè)務(wù),一方轉(zhuǎn)出后,另一方則增加
如果出現(xiàn)異常,那么所有的操作則會(huì)回滾
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/person";
String user = "root";
String pwd = "admin";
Connection conn = null;
Statement st = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,user,pwd);
//取消自動(dòng)提交
conn.setAutoCommit(false);
st = conn.createStatement();
st.addBatch("insert into student values(6,'Jerry','1995')");
st.addBatch("insert into student values(7,'Greg','1996')");
st.addBatch("insert into student values(8,'Ryan','1997')");
st.executeBatch();
//提交后設(shè)置自動(dòng)提交
conn.commit();
conn.setAutoCommit(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
if(conn != null) {
try {
//出現(xiàn)異常則回滾操作,然后設(shè)置自動(dòng)提交
conn.rollback();
conn.setAutoCommit(true);
} catch (SQLException e1) {
e1.printStackTrace();
}
}
} finally {
try {
if(st != null) {
st.close();
st = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
運(yùn)行結(jié)果:

分享:MySQL 主主同步配置步驟創(chuàng)建同步用戶、修改 /etc/my.cnf 配置文件,為其添加以下內(nèi)容、分別重啟服務(wù)器ODD EVEN 上的mysql服務(wù)
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫(kù)中保留小數(shù)位的問(wèn)題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問(wèn)題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢中使用count)的兼容性問(wèn)題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- MySQL筆記之視圖的使用詳解
- mysql使用source 命令亂碼問(wèn)題解決方法
- MySql大批量導(dǎo)入數(shù)據(jù)優(yōu)化
- Mysql高性能備份方案解決數(shù)據(jù)不間斷訪問(wèn)
- mysql導(dǎo)出數(shù)據(jù)庫(kù)幾種方法
- MYSQL索引建立需要注意以下幾點(diǎn)細(xì)節(jié)
- Mysql字符集設(shè)置指南
- MySQL DELETE語(yǔ)法使用詳細(xì)解析
- SQL提示Login failed for user#039;sa#039;錯(cuò)誤的解決方案
- mysql解決遠(yuǎn)程不能訪問(wèn)的二種方法
猜你也喜歡看這些
- SQL Server 2005 CE軟件環(huán)境需求
- 分析SQL Server性能的改進(jìn)與邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)的關(guān)聯(lián)
- 高效的SQLSERVER分頁(yè)查詢(推薦)
- SQL Server 2008登錄錯(cuò)誤:無(wú)法連接到(local)解決方法
- SQL Server 2005改進(jìn)后的幾個(gè)實(shí)用新特性
- 清理SQL Server 2008日志文件Cannot shrink log file 2 的解決方案
- sql2008評(píng)估期已過(guò)的解決辦法及序列號(hào)
- 解讀經(jīng)典SQL語(yǔ)句大全
- 揭秘SQL Server服務(wù)器內(nèi)存管理問(wèn)題
- SQL Server 索引基礎(chǔ)知識(shí)(1)--- 記錄數(shù)據(jù)的基本格式
- 相關(guān)鏈接:
- 教程說(shuō)明:
MySQL教程-JDBC數(shù)據(jù)庫(kù)的使用操作總結(jié)
。