JDBC:
JDBC(Java Data Base Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基准,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
使用Eclipse來操作數據庫有六個步驟:
1 加載驅動
2 獲取鏈接對象
3 創建語句對象
4 循環取得結果集
5 再循環中數據類型轉換
6 關閉資源
接下來做一些簡單的JDBC代碼實例:
注:下面的代碼我用是throws Exception來拋出異常,會使結構不太嚴謹,因為是初學,所有沒有貼出嚴謹結構的代碼,會在最後補充。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC {
public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
//產生JDBC Driver對象,三種方法
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
new oracle.jdbc.driver.OracleDriver();
Class.forName("oracle.jdbc.driver.OracleDriver");//這個Driver的實例化在構建過程中會自動向DriverManager自動注冊
//連接數據庫
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##scott","root");//拿到數據庫的鏈接
//創建語句對象statement,作用:調用方法向數據庫傳遞SQL語句,並接受數據庫返回的結果集
java.sql.Statement sts = conn.createStatement();
ResultSet rs = sts.executeQuery("select * from a_tab"); //在第一條記錄的前一位,
rs.next();
//循環取得結果集
while (rs.next()) {
//轉化數據類型
System.out.print(rs.getInt("id") + " ");
System.out.print(rs.getString("name") + " ");
System.out.println(rs.getString("ad") + " ");
}
//關閉資源
rs.close();
sts.close();
conn.close();
}
}
循環取得結果集:

往數據庫中添加數據:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JDBC_03{
public static void main(String[] args) throws Exception{
//1 加載驅動 就是實例化鏈接對象
Class.forName("oracle.jdbc.driver.OracleDriver");
//2 獲取數據庫的鏈接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root");
//3 創建語句對象 傳輸語句並執行 還要接收返回的結果集
Statement ss = conn.createStatement();
String sql ="insert into a_tab values(123,'xiaoming','beijing')";
System.out.println(sql);
ss.execute(sql);
//6 關閉資源
ss.close();
conn.close();
}
}
換一種方法:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.jdbc.OracleDriver;
public class JDBC_04 {
public static void main(String[] args) throws SQLException{
if (args.length != 3) {
System.out.println("請輸入三個值");
System.exit(1);
}
int id = Integer.parseInt(args[0]);
String name = args[1];
String ad = args[2];
//加載驅動
new OracleDriver();
//獲取鏈接,
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root");
//創建語句
Statement st = conn.createStatement();
String sql = "insert into a_tab values('"+ id + "','"+ name +"','"+ ad +"')";
System.out.println(sql);
st.executeUpdate(sql);
//關閉資源
st.close();
conn.close();
}
}
使用batch來添加:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import oracle.jdbc.driver.OracleDriver;
public class JDBC_06 {
public static void main(String[] args) throws Exception{
//加載驅動
new OracleDriver();
//連接數據庫
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root");
//創建語句
Statement stmt = conn.createStatement();
stmt.addBatch("insert into a_tab values(10001,'hello0','addbatch')");
stmt.addBatch("insert into a_tab values(10001,'hello0','addbatch')");
stmt.addBatch("insert into a_tab values(10001,'hello0','addbatch')");
/*PreparedStatement st = conn.prepareStatement("insert into a_tab values(?,?,?)") ;
st.setInt(1, 123);
st.setString(2, "xiaoxiao");
st.setString(3, "beijing");
st.addBatch();
st.setInt(1, 120);
st.setString(2, "xiaoxiao");
st.setString(3, "beijing");
st.addBatch();
st.executeBatch();
*/
stmt.executeBatch();
//關閉
stmt.close();
conn.close();
}
}
使用事務:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import oracle.jdbc.OracleDriver;
public class JDBC_08 {
public static void main(String[] args) throws Exception{
//加載驅動
new OracleDriver();
//鏈接對象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##scott","root");
//傳輸對象
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//並發只讀模式
//如果沒有第一個參數 只能用resultset裡面的next();
//有了這個參數 就能用所有方法
ResultSet rs = st.executeQuery("select * from a_tab");
rs.next();//從頭頂進入第一行
System.out.println(rs.getInt(1));//第一行第一列
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
System.out.println(rs.getString(1));
System.out.println("----------------");
rs.last();
System.out.println(rs.getInt("id"));
System.out.println(rs.isLast() + "-----");
rs.absolute(2);
System.out.println(rs.getInt(1) + "absolute 2");
rs.previous();
System.out.println(rs.getInt(1) + "previous");
}
}
最後來個集合,對數據的基本操作:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import oracle.jdbc.driver.OracleDriver;
import oracle.net.aso.s;
public class JDBC_09 {
public static void main(String[] args) throws Exception{
//加載驅動
new OracleDriver();
//鏈接對象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","c##scott","root");
//傳輸對象
Statement sts = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//並發可更新
//結果集對象
ResultSet rs = sts.executeQuery("select ID,NAME,AD from a_tab");
//結果處理
rs.next();
//增
rs.updateInt(1, 9900);//第一個字段,9999
rs.updateString("NAME", "aobama");
rs.updateString("AD", "baigong");
//rs.insertRow();//把這行插入結果集和數據庫
rs.moveToCurrentRow();//把光標移動到新建的行
//刪
rs.absolute(2);//移動到指定行
rs.deleteRow();//刪除改行
//改
rs.updateString("NAME", "newyue");//更改內存中的數據集中的數據
rs.updateRow();//把更改的數據更新到數據庫中
//關閉
rs.close();
sts.close();
conn.close();
}
}
嚴謹代碼(以後工作中要使用嚴謹的代碼結構,否則會被老板罵死的):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.omg.CORBA.COMM_FAILURE;
/**
* try catch
* ClassNotFoundException SQLException
*
* oracle\product\12.1.0\dbhome_1\jdbc\lib 把這個目錄下面的 ojdbc7.jar 拿到 當前項目中 --
* 簡單使用jdbc 6步 :
* 1 加載驅動
* 2 獲取鏈接/或者說鏈接數據庫
* 3 創建語句對象 statement 作用:
* 4 循環取得結果集
* 5在循環結果集中數據類型進行轉換
* 6 關閉資源
*/
public class JDBC_00_Decktop {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//<一> 產生JDBC driver對象 就是說 加載驅動 有三種方法
//1.1 forName句柄 加載文件 獲取實例
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//1.2 跟上面一樣
//這個Driver實例在構建過程中會向DriverManager裡面自動注冊,不用自己管
Class.forName("oracle.jdbc.driver.OracleDriver");
//1.3 直接實例化
new oracle.jdbc.driver.OracleDriver();
//<二> 連接數據庫 --- 就是通過DriverManager的獲取鏈接方法 傳過去三個函數,數據庫路徑 用戶名 密碼
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
//<三> 創建語句對象 Statement 作用:調用方法向數據庫傳遞SQL語句,並接收返回的結果集。
stmt = conn.createStatement();
//----結果集怎麼獲取
rs = stmt.executeQuery("select * from c##scott.emp");//字符串內不用加分號
//rs 在第一條記錄的上方
//rs.next();//返回的是boolean型
System.out.println("EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO");
//<四> 循環獲取結果集
while (rs.next()) {
//<五> 在循環中把數據類型進行轉換得到自己想要的數據類型(java對應的數據類型) 其實我們可以隨意轉換,只要不失去精度就可以
System.out.print(rs.getString("empno")+" ");
System.out.print(rs.getString("ename")+" ");
System.out.print(rs.getString("job")+" ");
System.out.print(rs.getInt("mgr")+" ");
System.out.print(rs.getString("hiredate")+" ");
System.out.print(rs.getInt("sal")+" ");
System.out.print(rs.getInt("comm")+" ");
System.out.println(rs.getInt("deptno")+" ");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try{
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}catch (SQLException e2) {
e2.printStackTrace();
}
}
}
}
以上就是我在JDBC中的所學,望各位斧正!