JDBC在java.sql包中。
DriverManager類在java.sql包中。
加載驅(qū)動程序使用的是java.lang包中的Class類的forName()方法,加載JDBC驅(qū)動程序。
1.JDBC的介紹
2.JDBC連接數(shù)據(jù)庫
3.數(shù)據(jù)處理
4.綜合實例
?具體怎么安裝的Mysql以及找到所需要的包,以后學(xué)習(xí)看課本或者查資料。
1.JDBC的介紹
(1)在應(yīng)用中,java會連接數(shù)據(jù)庫,以實現(xiàn)一些應(yīng)用軟件設(shè)計。也就是常說的Java做前端,數(shù)據(jù)庫管理系統(tǒng)做后臺的應(yīng)用系統(tǒng)。這樣的好處就是:數(shù)據(jù)庫管理系統(tǒng)可以完成大量數(shù)據(jù)的存儲和處理,Java做前端也可以達到界面友好、一般用戶能較容易與計算機交互的目的。
? ? (2)java連接數(shù)據(jù)庫,java語言是通過JDBC(Java DataBase Connectivity)實現(xiàn)與數(shù)據(jù)庫系統(tǒng)的連接。
JDBC是java數(shù)據(jù)庫連接規(guī)范,是一種可執(zhí)行SQL語句的Java API,由一些Java語言寫的類和接口組成,在java.sql包中。
(3)常用的JDBC:
(3)JDBC可以完成的功能:
? ? ? ?1.與數(shù)據(jù)庫的連接。
(Connettion conn = null;?
try{
? conn = (Connection)DriverManager.getConnection(url ,user,password;);
})
? ? ? ?2.向數(shù)據(jù)庫發(fā)送sql語句。
? ? ? 3.處理數(shù)據(jù)庫返回的結(jié)果。(Resultset ? 一般是在查詢操作中)
[PreparedStatement psmt3 = (PreparedStatement) conn.prepareStatement(sql);
ResultSet rs = psmt3.executeQuery();
]
(4)JDBC訪問數(shù)據(jù)庫的類型【共3種】(一般是采用第二種(JDBC直接與數(shù)據(jù)庫連接),即Java編寫的驅(qū)動程序直接與數(shù)據(jù)庫連接)
查詢語句(顯示記錄):
(1)select * from st; //查詢表st中的所有元素,即會顯示表st的所有信息
? ? ? ? select * from st where major ?= "computer";//查詢表st中的專業(yè)是計算機的所有元素,即顯示表st中專業(yè)是computer的所有人。
注:這個major 可以改為其他的元素,例如name ,age,看題目要求查詢什么。?
2.與數(shù)據(jù)庫的連接
例如:
String driver = "com.mysql.jdbc.Driver";//JDBC驅(qū)動程序
String url ="jdbc:mysql://localhost:3306/student1";//jdbc:[數(shù)據(jù)庫類型]://[數(shù)據(jù)庫ip地址]:[數(shù)據(jù)庫端口](默認是localhost_3306)/[數(shù)據(jù)庫名](僅僅修改數(shù)據(jù)庫名,其他不變)
String user ="root";
String password ="root";
Connection conn = null;
try {
Class.forName(driver);//2.加載JDBC驅(qū)動程序(此時會出現(xiàn)錯誤,修改錯誤,選擇surround with try/catch)
conn = (Connection)DriverManager.getConnection(url, "root", "root"); //3.把前面的信息進行連接(此時還是會有錯誤,修改錯誤,選擇Add Exception to existing catch caluse(選擇SQLException[所有的數(shù)據(jù)庫異常都叫做SQLException]),進行合并異常類型)(目前為止,連接完成)
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
3.數(shù)據(jù)處理
Statement
常用PreparedStatement進行格式化成數(shù)據(jù)庫能識別的語句,即處理預(yù)編譯的SQL語句。
關(guān)閉結(jié)果集:rs.close();
關(guān)閉連接:conn.close();
這些是寫在try最后的。
實例:java與數(shù)據(jù)庫的連接,實現(xiàn)基本的增刪改查操作。
操作步驟:
(1)使用Mysql數(shù)據(jù)庫 ?(navicat.exe軟件)
? ? ? ? ?1.先啟動軟件jspStudy,點擊進入-啟動(運行狀態(tài)是Apach,Tomcat,Mysql),(使用完點擊-停止).如下圖所示。
? ? ? ? 2.啟動navicat.exe,進行連接,然后建立數(shù)據(jù)庫,建立表。
? ? ? ?(1)單擊連接,不寫輸入密碼,不寫連接名 ,就會生成默認的連接名localhost_3306.
? ? ? ? ? 無論使用哪個連接名,都不需要改動代碼的信息。
? ? ? ? ? 也可以新建連接(例如本地數(shù)據(jù))。類似電池的模樣(代表連接),類似一摞硬幣的代表數(shù)據(jù) ? ? ? ? 庫,而綠色的硬幣的數(shù)據(jù)庫代表你當(dāng)前使用的數(shù)據(jù)庫。
? (2)建立數(shù)據(jù)庫
? ? ? 連接名(以localhost_3306為例) -右擊 -新建數(shù)據(jù)庫?
在“”新建數(shù)據(jù)庫“”彈出框中,輸入數(shù)據(jù)庫名(必須是英文名,可以有數(shù)字,不能是中文),然后選擇好字符集(UTF-8 Unicode)[防止亂碼] (如果忘記了,選擇新建好的數(shù)據(jù)庫-右擊-數(shù)據(jù)庫屬性進行修改),點擊確定。
點開數(shù)據(jù)庫student1,下面有個“”表”-右擊-新建表,在彈出框中,設(shè)置好數(shù)據(jù)。
首先設(shè)置主鍵,如下圖所示,名id,類型int,左下角打鉤自動遞增,在那欄前面右擊-選擇主鍵,然后會“*”變成跟大寫I似的,且最后有個鑰匙,則設(shè)置主鍵成功。如下圖所示。
然后進行設(shè)置其他表中的元素(抽象設(shè)置),選擇上面菜單欄的“添加欄位”(此時欄位在下方)【如果選擇插入欄位,則是往上插,可以通過菜單欄的“下移”調(diào)下來】,并且進行數(shù)據(jù)設(shè)置。
注:名name ,類型text (注意無string);
? ? ? ?名age,類型int.
點擊保存,輸入表名st,點擊確定,建表成功。
如下圖所示。
如果再進行表的其他元素插入與設(shè)置,表st右擊-設(shè)計表,進行元素插入設(shè)置。如下圖。
最后,進行寫入表中元素的具體數(shù)據(jù)(例如:名:張三 ,年齡:12),表st雙擊打開,就可以填入數(shù)據(jù),填完選擇最下面的對號,繼續(xù)填入數(shù)據(jù)就是最下面選擇“插入記錄(此時是往上插,)”,填完數(shù)據(jù),點擊對號,選擇最下面的“刷新”,就會降下來。
(2).在eclipse下進行編碼,實現(xiàn)兩者互動。
package JDBC;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
/*1.新建主類,程序都寫在主類里
*2.導(dǎo)包(mysql-connector-java-5.1.45-bin.jar)(考試時包會在桌面上) 怎么找到的這個包?(后續(xù)學(xué)習(xí))
*在自己所在的項目project(不是包中,是最外面的地方)中右擊-Properties(屬性)-java Build path-右邊選擇Add External jars(添加擴展包)
*則在中間編輯區(qū)會顯示這個包。
* 3.編輯程序
*? (1)設(shè)置好數(shù)據(jù)庫的基本信息,再進行連接
*? (2)進行操作:增加(插入),刪除,修改,[這三個都是執(zhí)行更新[executeUpdate()]]查詢(注意返回一個結(jié)果集Resultset 進行executeQuery());
*? (3)在執(zhí)行時,執(zhí)行一個,其他的就注銷執(zhí)行那條語句,查詢操作放在最后,就可以顯示出前面的執(zhí)行操作做好的結(jié)果了? ?
*/
//此處只執(zhí)行了插入操作和查詢操作,其他的注銷了。
public class Test1 {
public static void main(String[] args) {
/*
* 1.設(shè)置要連接的數(shù)據(jù)庫的基本信息
* (1.先設(shè)置好基本信息driver? url(注意好localhost:3306這之間需要緊密相連,無空格,且是英文下的) user password 定義這四個變量,填好與數(shù)據(jù)庫有關(guān)的信息)
* (2.連接Connection conn = null;)
*/
//1.設(shè)置基本信息
String driver = "com.mysql.jdbc.Driver";//JDBC驅(qū)動程序
String url ="jdbc:mysql://localhost:3306/student1";//jdbc:[數(shù)據(jù)庫類型]://[數(shù)據(jù)庫ip地址]:[數(shù)據(jù)庫端口](默認是localhost_3306)/[數(shù)據(jù)庫名](僅僅修改數(shù)據(jù)庫名,其他不變)
String user ="root";
String password ="root";
Connection conn = null;
try {
//2.加載JDBC驅(qū)動程序(此時會出現(xiàn)錯誤,修改錯誤,選擇surround with try/catch)
Class.forName(driver);
conn = (Connection)DriverManager.getConnection(url, "root", "root"); //3.把前面的信息進行連接(此時還是會有錯誤,修改錯誤,選擇Add Exception to existing catch caluse(選擇SQLException[所有的數(shù)據(jù)庫異常都叫做SQLException]),進行合并異常類型)(目前為止,連接完成)
/*2.執(zhí)行操作
* /
*/
//插入操作
//如果插入多條信息,直接插入,和這個一樣。
String sql ="insert into st(name,age) values(?,?)";//sql插入語句
PreparedStatement psmt = (PreparedStatement) conn.prepareStatement(sql); //轉(zhuǎn)換成數(shù)據(jù)庫能識別的語句(2個大寫的PreparedStatement,1個小寫的)
psmt.setString(1, "王五");
psmt.setString(1, "李六");
psmt.setInt(2, 34);
psmt.setInt(2, 44);
psmt.executeUpdate();
//刪除操作
sql =? "delete from st where name = ?";
PreparedStatement psmt1 = (PreparedStatement) conn.prepareStatement(sql);
psmt1.setString(1, "張三");//對應(yīng)sql定義語句的位置從1開始
? ? //psmt1.executeUpdate();
//修改操作
sql = "update st set age =? where name = ?";
PreparedStatement psmt2 = (PreparedStatement) conn.prepareStatement(sql);
psmt2.setInt(1, 34);
psmt2.setString(2, "李四");
//psmt2.executeUpdate();//別忘記更新信息執(zhí)行
//查詢操作
sql = "select * from st";
PreparedStatement psmt3 = (PreparedStatement) conn.prepareStatement(sql);
ResultSet rs = psmt3.executeQuery(); //執(zhí)行查詢會返回一個結(jié)果集[這個是與其他操作的區(qū)別]
while(rs.next()){
System.out.println("姓名:"+rs.getString(2));//數(shù)據(jù)庫中從1開始
System.out.println("年齡:"+rs.getInt(3));
}
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
結(jié)果如下圖: