JDBC使用 1. 導包 直接使用IDEA導入依賴包即可 新建一個lib,把jar包放在這裡 2. 載入驅動 3. 創建Connection對象 連接資料庫,從而獲得Connection對象 PS:查看實例名 1. 開始 運行 輸入 2. 找到服務 3. 後面的就是我們的oracle資料庫的實例名 ...
JDBC使用
1. 導包
直接使用IDEA導入依賴包即可
新建一個lib,把jar包放在這裡
2. 載入驅動
Class.forName("oracle.jdbc.driver.OracleDriver");
3. 創建Connection對象
連接資料庫,從而獲得Connection對象
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";//具體的實例名可以查看自己的服務管理,有個
Connection conn = DriverManager.getConnection(url,"scott","tiger");//後面的兩個參數分別為連接資料庫的用戶名和密碼
PS:查看實例名
- 開始->運行->輸入
services.msc
- 找到服務
- 後面的就是我們的oracle資料庫的實例名
4. 創建Statement對象
Statement stmt = conn.createStatement();
- Statement: 普通語句類型,只能執行一條完整的語句
- PreparedStatement: 預編譯語句,它支持占位符“?”, 如:select * from emp WHERE ename LIKE ? and sal>?
- CallableStatement: 支持存儲過程的調用
PreparedStatement
和CallableStatement
都是繼承Statement
,比Statement
要強大
補充鏈接:
PreparedStatement的使用
CallableStatement的使用(待補充)
5. 執行SQL語句
//執行查詢語句,會返回有個結果集ResultSet
ResultSet rs = stmt.executeQuery("select * from student");
6. 使用ResultSet獲取資料庫數據
//遍歷結果集, 每次調用next方法時會使結集的游標後移,最初游標位於第一行之前
//Student累是我們寫的一個bean類,就是把資料庫中的每一條數據當作為一個對象,每一列都當作為Student類的屬性
while (rs.next()){
//第迴圈一次封裝一條記錄
Student student = new Student();
student.setNum(rs.getInt("num"));
student.setName(rs.getString("name"));
//獲取其它欄位rs.getXxx("列名") Xxx表示相應的數據類型
//或者也可以re.getXxx(int columnNum) 參數為第幾列
//如果不知道列的具體類型,也可以使用rs.getObject
}
oracle與java的類型對應
oracle | java |
---|---|
varchar/varchar(2) | String |
int | int |
number | double |
date | date |
7. 關閉
依次關閉ResultSet
Statement
Connection
補充
- 一般將連接方法和關閉方法封裝為靜態方法調用,連接方法和關閉方法封裝在JdbcUtil工具類中
- 開啟資料庫鏈接的三個參數一般我們不會更改,所以我們直接寫死在資源文件裡面
- 設置編碼UTF-8,使用中文字元就會自動轉為Unicode
ResourceBundle文件一般要在src同目錄,否則會出現java.lang.NoClassDefFoundError異常,代碼如下
jdbc.url = jdbc:oracle:thin:@localhost:1521:ORCL jdbc.driver = oracle.jdbc.driver.OracleDriver jdbc.username = stars jdbc.password = stars
ResourceBundle bundle = ResourceBundle.getBundle("資源文件名"); String s = bundle.getString("keyName");//getString("username").. }
- 設置編碼UTF-8,使用中文字元就會自動轉為Unicode
寫一個Dao類,其中有update,save,delete,find等方法,從而實現對資料庫的增刪改查
JdbcUtil工具類:
package homework;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
/**
* @author StarsOne
* @date Create in 2019/4/24 0024 22:18
* @description
*/
class JdbcUtil {
private static final String DRIVER = getValue("jdbc.driver");
private static final String URL = getValue("jdbc.url");
private static final String USERNAME = getValue("jdbc.username");
private static final String PASSWORD = getValue("jdbc.password");
static{
try {
//註冊資料庫驅動程式
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
System.err.println("註冊資料庫驅動程式失敗。" + e.getMessage());
}
}
/**
* 獲取資料庫連接
* @return 一個Connection
*/
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return conn;
} catch (SQLException e) {
System.err.println("a獲得數據連接失敗。" + e.getMessage());
}
return null;
}
/**
* 關閉
* @param conn
* @param stmt
* @param rs
*/
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
//關閉資料庫的資源的順序最好與使用的順序相反
if(rs != null){
rs.close();
}
if(stmt != null){
stmt.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 讀取屬性文件中的信息
*
* @param key
* @return
*/
private static String getValue(String key) {
// 資源包綁定
ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
return bundle.getString(key);
}
public static void main(String[] args) {
System.out.println(getValue("jdbc.driver"));
System.out.println(getConnection());
}
}
StudentDao.java
我的代碼還沒有補全,使用的Statement
語句
package homework;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
* @author StarsOne
* @date Create in 2019/4/24 0024 22:24
* @description
*/
class StudentDao {
/**
* 添加一個
* @param student
*/
public void save(Student student) {
String name = student.getName();
int num = student.getNum();
Connection connection = null;
Statement statement = null;
try {
connection = JdbcUtil.getConnection();
statement = connection.createStatement();
//拼接SQL語句,把數據插入到資料庫中
statement.execute("insert into STUDENT value(" + num + "," + name + ") ");
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, statement, null);
}
}
public void update(Student student) {
}
/**
* 刪除指定編號的學生
* @param num
*/
public void delete(Integer num) {
Connection connection = null;
Statement statement = null;
try {
connection = JdbcUtil.getConnection();
statement = connection.createStatement();
//拼接SQL語句,把數據插入到資料庫中
boolean flag = statement.execute("delete from STUDENT where num = " + num);
if (flag) {
System.out.println("刪除成功!");
} else {
System.out.println("刪除失敗!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, statement, null);
}
}
/**
* 主鍵查詢
* @param number
*/
public void findByPK(Integer number) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet=null;
try {
connection = JdbcUtil.getConnection();
statement = connection.createStatement();
//查詢query,返回一個數據集
resultSet = statement.executeQuery("select * from STUDENT where num =" + number);
while (resultSet.next()) {
int num = resultSet.getInt("num");
String name = resultSet.getString("name");
String sex = resultSet.getString("sex");
int age = resultSet.getInt("age");
Date birthdate = resultSet.getDate("birthdate");
double grade = resultSet.getDouble("grade");
//新建一個對象
new Student(num, age, grade, name, sex, birthdate);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, statement, resultSet);
}
}
/**
* 查詢全部
* @return
*/
public List<Student> findAll() {
List<Student> list = new ArrayList<>();
Connection connection = null;
Statement statement = null;
ResultSet resultSet=null;
try {
connection = JdbcUtil.getConnection();
statement = connection.createStatement();
//查詢query,返回一個數據集
resultSet = statement.executeQuery("select * from STUDENT" );
while (resultSet.next()) {
int num = resultSet.getInt("num");
String name = resultSet.getString("name");
String sex = resultSet.getString("sex");
int age = resultSet.getInt("age");
Date birthdate = resultSet.getDate("birthdate");
double grade = resultSet.getDouble("grade");
//新建一個對象
list.add(new Student(num, age, grade, name, sex, birthdate));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, statement, resultSet);
}
return list;
}
}