DBHelperjava
package com.nll.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBHelper {
//加載驅動通常來講只加載一次
static {
try {
//第一步加載驅動
//mysql5.0+版("com.mysql.cj.jdbc.Driver")8.0+版("com.mysql.cj.jdbc.Driver")
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() {
//第二步 創建鏈接 咱們也封裝一下沒有爲何 主要是太長了 本身寫麻煩
Connection conn=null;
try {
//mysql能夠改成"jdbc:mysql://localhost:3306/(數據庫名)?allowPublicKeyRetrieval=true&serverTimezone=UTC&useSSL=false&characterEncoding=UTF-8"
conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","scott");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//第三步 寫sql語句 對咱們來講 sql語句只是預處理語句對象裏面的一個參數而已 並且功能不同 sql語句不同
//所以 sql語句咱們最終也就當作一個參數便可
//增刪改 都是同一個方法 executeUpdate 並且返回值也是同樣
//因此咱們封裝的時候 增刪改一塊兒封裝
public int doUpdate(String sql,Object...params) {
//首先獲取鏈接
Connection conn=getConnection();
//肯定一個返回值
int result=-1;
try {
//預處理語句對象
PreparedStatement pstmt=conn.prepareStatement(sql);
//參數呢,會不會有佔位符?
//由於不僅僅是增刪改會員參數 咱們查詢也會有參數因此咱們也封裝一下
doParams(pstmt,params);
//執行sql語句
result=pstmt.executeUpdate();
closeAll(null,conn,pstmt);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public List<Map<String,String>> findAll(String sql,Object...params) {
List<Map<String,String>> list=new ArrayList<Map<String,String>>();
try {
//首先獲取鏈接
Connection conn=getConnection();
ResultSet resultset=null;
//預處理語句對象
PreparedStatement pstmt=conn.prepareStatement(sql);
//參數呢,會不會有佔位符?
//由於不僅僅是增刪改會員參數 咱們查詢也會有參數因此咱們也封裝一下
doParams(pstmt,params);
resultset=pstmt.executeQuery();
//如何獲得Map的鍵-》這個sql語句的字段
//首先要經過結果集 獲得元數據
ResultSetMetaData rsmd=resultset.getMetaData();
String[] columnNames=new String[rsmd.getColumnCount()];
for (int i = 0; i < columnNames.length; i++) {
//注意咱們這裏獲得的鍵全都是大寫 所以咱們改成咱們習慣的小寫
columnNames[i]=rsmd.getColumnName(i+1).toLowerCase();
}
while(resultset.next()) {
Map<String,String> map=new HashMap<String,String>();
//根據列名來取值
for(String cn:columnNames) {
String value=resultset.getString(cn);
map.put(cn, value);
}
//當一條取完放到list裏面去
list.add(map);
}
closeAll(resultset,conn,pstmt);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
private void closeAll(ResultSet rs, Connection conn, PreparedStatement pstmt) {
// TODO Auto-generated method stub
try {
if(rs!=null) {
rs.close();
}
if(conn!=null) {
conn.close();
}
if(pstmt!=null) {
pstmt.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void doParams(PreparedStatement pstmt, Object...params) {
//先判斷 用戶沒有傳參數過來 那咱們就不用注入參數
if(params!=null&¶ms.length>0) {
//有參數 咱們才注入參數 Object... 量詞參數,本質是一個數組
for (int i = 0; i < params.length; i++) {
//萬物皆對象
try {
pstmt.setObject(i+1, params[i]);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
Test.javamysql
package com.nll.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Map; public class Test1 { public static void main(String[] args) { // TODO Auto-generated method stub //測試jdbc的封裝 //由於咱們不是靜態方法 因此先示例化 DBHelper db=new DBHelper(); // //寫sql語句不帶參數 // String sql1="update autoincre_demo set id=id+1"; // int result1=db.doUpdate(sql1); // if(result1>0) { // System.out.println("修改爲功"); // }else { // System.out.println("修改失敗"); // } // //寫sql語句 (帶參數的) // String sql="update autoincre_demo set NAME=?"; // //執行 // int result=db.doUpdate(sql,"海口"); // if(result>0) { // System.out.println("修改爲功"); // }else { // System.out.println("修改失敗"); // } //查詢操做 String sql2="select * from autoincre_demo"; List<Map<String,String>> list=db.findAll(sql2); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i).get("name")); } } }