代碼實作
- 導入驅動jar包
-
注冊驅動
Class.forName(“com.mysql.jdbc.Driver”);
-
擷取資料庫連接配接對象
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/資料庫名稱”, “使用者名”, “密碼”);
- 定義sql語句
-
擷取執行sql的對象 Statement
Statement stmt = conn.createStatement();
PreparedStatement pstmt = conn.prepareStatement(sql);
-
執行sql
int count = stmt.executeUpdate(sql); count為傳回執行的資料數量
- boolean execute(String sql) :可以執行任意的sql 了解
-
ResultSet executeQuery(String sql) :執行DQL(select)語句
* boolean next(): 遊标向下移動一行,判斷目前行是否是最後一行末尾(是否有資料),如果是,則傳回false,如果不是則傳回true
-
int executeUpdate(String sql) :執行DML(insert、update、delete)語句、DDL(create,alter、drop)語句
* 傳回值:影響的行數,可以通過這個影響的行數判斷DML語句是否執行成功 傳回值>0的則執行成功,反之,則失敗。
-
關閉資源
stmt.close();conn.close();
JDBC工具類 : JDBCUtils
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 檔案的讀取,隻需要讀取一次即可拿到這些值。使用靜态代碼塊
*/
static{
//讀取資源檔案,擷取值。
try {
//1. 建立Properties集合類。
Properties pro = new Properties();
//擷取src路徑下的檔案的方式--->ClassLoader 類加載器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
//2. 加載檔案
// pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
pro.load(new FileReader(path));
//3. 擷取資料,指派
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注冊驅動
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 擷取連接配接
* @return 連接配接對象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 釋放資源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 釋放資源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
JDBC控制事務
使用Connection對象來管理事務
*開啟事務:setAutoCommit(boolean autoCommit) :調用該方法設定參數為false,即開啟事務-----在執行sql之前開啟事務
*送出事務:commit() – 當所有sql都執行完送出事務
*復原事務:rollback() – 在catch中復原事務
Druid連接配接池
-
步驟
1. 導入jar包 druid-1.0.9.jar
2. 定義配置檔案:
* 是properties形式的
* 可以叫任意名稱,可以放在任意目錄下
3. 加載配置檔案。Properties
*
Properties pro = new Properties(); InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is);
4. 擷取資料庫連接配接池對象:通過工廠來來擷取 DruidDataSourceFactory
*
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
5. 擷取連接配接:getConnection
*
6. 對JDBCUtils進行修改使用連接配接池進行簡化Connection conn = ds.getConnection();
JDBCTemplate–Spring架構對JDBC的簡單封裝
- 導入jar包
-
建立JdbcTemplate對象。依賴于資料源DataSource
* JdbcTemplate template = new JdbcTemplate(ds);
-
調用JdbcTemplate的方法來完成CRUD的操作
* update():執行DML語句。增、删、改語句
* queryForMap():查詢結果将結果集封裝為map集合,将列名作為key,将值作為value 将這條記錄封裝為一個map集合------注意:這個方法查詢的結果集長度隻能是1
*
Map<String, Object> map = template.queryForMap(sql, 1001,1002);
* queryForList():查詢結果将結果集封裝為list集合------注意:将每一條記錄封裝為一個Map集合,再将Map集合裝載到List集合中
*
List<Map<String, Object>> list = template.queryForList(sql);
* query():查詢結果,将結果封裝為JavaBean對象
* query的參數:RowMapper------一般我們使用BeanPropertyRowMapper實作類。可以完成資料到JavaBean的自動封裝
*
List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
* new BeanPropertyRowMapper<類型>(類型.class)
* queryForObject:查詢結果,将結果封裝為對象
* 一般用于聚合函數的查詢
*
Long total = template.queryForObject(sql, Long.class);