一、什麼是JDBC 技術.
JDBC(Java DataBase Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
通俗來說就是:
(1)java語言操作數據庫;
(2)jdbc是oracle公司指定的一套規範;
(3)驅動:jdbc的實現類,由數據庫廠商提供。
二、JDBC技術的作用
(1)連接數據庫;
(2)發送sql語句;
(3)處理結果。
三、JDBC技術的操作步驟
(1)創建一個數據庫和表
(2)創建一個web項目
(3)編碼:
註冊驅動
獲取連接
編寫sql語句
創建預編譯的語句執行者
設置參數
執行sql語句
處理結果
釋放資源
四、代碼實現
1、基本實現:
package com.itheima.a_jdbc.a_hello;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.sql.Statement;
import org.junit.Test;
import com.itheima.a.utils.JdbcUtils;
public class Hello {
@Test
public void f1() {
System.out.println("hello");
}
@Test
public void f2() throws Exception { //查詢操作
//註冊驅動
Class.forName("com.mysql.jdbc.Driver");//Driver類,完整路徑
//創建連接
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day07","root","root");
//編寫SQL語句
String sql="select * from category";
//創建語句執行者
PreparedStatement ps=conn.prepareStatement(sql);//通過連接執行SQL語句
//設置參數
//修改數據庫的表內容時會用到
//執行SQL語句
ResultSet rs=ps.executeQuery();
//處理結果
while(rs.next()) {
System.out.println(rs.getString("cid")+rs.getString("cname"));
}
//釋放資源
rs.close();
ps.close();
conn.close();
}
@Test
public void f3() { //插入操作
Connection conn=null;
ResultSet rs=null;
PreparedStatement st=null;
try {
//獲取鏈接
conn=JdbcUtils.getConnection();
//編寫sql
String sql="insert into category values(?,?);";
//創建語句執行者
st=conn.prepareStatement(sql);
//設置參數
st.setString(1, "c006");
st.setString(2, "戶外");
//執行sql
int i=st.executeUpdate();
//處理結果
if(i==1) {
System.out.println("success");
}else {
System.out.println("fail");
}
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//釋放資源
JdbcUtils.closeResource(conn, st, rs);
}
}
@Test
public void f4() { //更新操作
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn=JdbcUtils.getConnection();
String sql="update category set cname=? where cid = ?";
st=conn.prepareStatement(sql);
st.setString(1, "手機");
st.setString(2, "c006");
int i=st.executeUpdate();
if(i==1) {
System.out.println("success");
}else {
System.out.println("fail");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//釋放資源
JdbcUtils.closeResource(conn, st, rs);
}
}
@Test
public void f5() { //刪除操作
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn=JdbcUtils.getConnection();
String sql="delete from category where cid = ?";
st=conn.prepareStatement(sql);
st.setString(1, "c006");
int i=st.executeUpdate();
if(i==1) {
System.out.println("success");
}else {
System.out.println("fail");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//釋放資源
JdbcUtils.closeResource(conn, st, rs);
}
}
}
2、JdbcUtils工具類改進:
package com.itheima.a.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class JdbcUtils {
static final String DRIVERCLASS;
static final String URL;
static final String USER;
static final String PASSWORD;
static {
//獲取ResourceBundle ctrl+2 l
ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
//獲取指定內容
DRIVERCLASS=bundle.getString("driverClass");
URL=bundle.getString("url");
USER=bundle.getString("user");
PASSWORD=bundle.getString("password");
}
public static Connection getConnection() throws ClassNotFoundException, SQLException {
//註冊驅動
Class.forName(DRIVERCLASS);
//獲取鏈接
Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);
return conn;
}
/**
* 釋放資源
* @param conn 鏈接
* @param st 語句執行者
* @param rs 結果集
*/
public static void closeResource(Connection conn,Statement st,ResultSet rs) {
closeConn(conn);
closeStatement(st);
closeResultSet(rs);
}
/**
* 釋放鏈接
* @param conn 鏈接
*/
public static void closeConn(Connection conn) {
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn=null;
}
}
/**
* 釋放語句執行者
* @param st 語句執行者
*/
public static void closeStatement(Statement st) {
if(st!=null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
st=null;
}
}
/**
* 釋放結果集
* @param rs 結果集
*/
public static void closeResultSet(ResultSet rs) {
if(rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs=null;
}
}
}