JDBC(Java Data Base Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為數據庫開發人員提供了一個標准的API,使數據庫開發人員能夠用純 Java API 編寫數據庫應用程序,並且可跨平台運行,並且不受數據庫供應商的限制。其優點:
package 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.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.mysql.jdbc.Statement;
public class JDBC {
protected Connection conn;
protected Statement statement;
public static Connection getConnection() throws Exception {
Connection connection = null; // 創建用於連接數據庫的Connection對象
try {
Class.forName("com.mysql.jdbc.Driver");// 加載Mysql數據驅動
/**
* 127.0.0.1指本機,若是鏈接遠程服務機器,則填寫遠程機器的ip 3306 mysql默認的端口號 test 數據庫名稱
* user 數據庫用戶名稱 password 密碼
*/
connection = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/test", "user", "password");// 創建數據連接
} catch (Exception e) {
e.printStackTrace();
throw new Exception("鏈接mysql數據失敗");
}
return connection; // 返回所建立的數據庫連接
}
/**
* 向mysql插入數據記錄 返回插入數據的個數
*
* @param sql
* 要插入的sql語句
* @return count 插入數據的個數
* @throws Exception
*/
public int insert(String sql) throws Exception {
conn = getConnection(); // 連接到數據庫
try {
statement = (Statement) conn.createStatement(); // 創建用於執行靜態sql語句的Statement對象
int count = statement.executeUpdate(sql); // 執行插入操作的sql語句
conn.close(); // 關閉數據庫連接
return count;// 返回插入數據的個數
} catch (SQLException e) {
e.printStackTrace();
throw new Exception("插入數據失敗");
}
}
/**
* 更新符合要求的記錄 返回更新的記錄數目
*
* @param sql
* 更新數據的sql語句
* @return count 更新數據的個數
* @throws Exception
*/
public int update(String sql) throws Exception {
conn = getConnection(); // 連接到數據庫
try {
// 創建用於執行靜態sql語句的Statement對象,
statement = (Statement) conn.createStatement();
int count = statement.executeUpdate(sql);// 執行更新操作的sql語句,
conn.close(); // 關閉數據庫連接
return count; // 返回更新數據的個數
} catch (SQLException e) {
e.printStackTrace();
throw new Exception("更新數據失敗");
}
}
/**
* 查詢數據庫,返回符合要求的記錄的數據
*
* @param sql 查詢數據的sql語句
* @throws Exception
* @return list
*/
public List<Object> query(String sql) throws Exception {
conn = getConnection(); // 連接到數據庫
try {
statement = (Statement) conn.createStatement(); // 創建用於執行靜態sql語句的Statement對象
ResultSet rs = statement.executeQuery(sql); // 執行sql查詢語句,返回查詢數據的結果集
List<Object> list=ResultSetToList(rs);
conn.close(); // 關閉數據庫連接
return list;
} catch (SQLException e) {
e.printStackTrace();
throw new Exception("查詢數據失敗");
}
}
/* 刪除符合要求的記錄,輸出情況*/
/**
*
* @param sql 刪除數據的sql語句
* @return count 返回刪除數據的數量
* @throws Exception
*/
public int delete(String sql) throws Exception {
conn = getConnection(); //連接到數據庫
try {
statement = (Statement) conn.createStatement(); //創建用於執行靜態sql語句的Statement對象
int count = statement.executeUpdate(sql);// 執行sql刪除語句
conn.close(); //關閉數據庫連接
return count;//返回刪除數據的數量
} catch (SQLException e) {
e.printStackTrace();
throw new Exception("刪除數據失敗");
}
}
/**
* 分頁查找
* @param sql 要查找的sql語句
* @param page 頁數
* @param count 數據條數
* @return List<Object>
* @throws Exception
*/
public List<Object> findByPage(String sql,
int page,int count) throws Exception {
conn = getConnection(); //連接到數據庫
PreparedStatement pre = conn.prepareStatement(sql);
pre.setMaxRows(count);
ResultSet rs = pre.executeQuery();
if(page<1){
rs.absolute(0);
}else{
page=page*count-1;
rs.absolute(page);
}
List<Object> list=ResultSetToList(rs);
return list;
}
/**
* ResultSet 轉換成List
*/
public List<Object> ResultSetToList(ResultSet rs) throws SQLException{
if (rs == null)
return Collections.emptyList();
ResultSetMetaData md = rs.getMetaData(); // 得到結果集(rs)的結構信息
int columnCount = md.getColumnCount(); // 返回此 ResultSet 對象中的列數
List<Object> list = new ArrayList<Object>();
Map<Object, Object> rowData = new HashMap<Object, Object>();
while (rs.next()) {
rowData = new HashMap<Object, Object>(columnCount);
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
return list;
}
}
1.注冊驅動
Class.forname("com.mysql.jdbc.Driver");//這是連接mysql數據庫的驅動
2.獲取數據庫連接
java.sql.Connection conn=java.sql.DriverManager.getConnection(); 3.獲取表達式
java.sql.Statement stmt=conn.createStatement("jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK","root","null");//三個參數分別是數據庫連接的URL,用戶名,密碼 4.執行SQL
java.sql.ResultSet rs=stmt.executeQuery("select * from user"); 5.顯示結果集裡面的數據
while(rs.next()){
System.out.println(rs.getInt(1));
System.out.println(rs.getString("username"));
System.out.println(rs.getString("password"));
System.out.pringln();
}//執行插入語句
//stmt.executeUpdate("insert into user values(1,'中文','345')");
6.釋放資源
rs.close();
stmt.close();
conn.close();
創建對象是通過關鍵字new 創建的,這裡只是一個聲明,聲明con是一個Connection類型的,真正創建對象是在等號後面代碼。這個下面的熟悉的語句是一樣的 User user=new User();等號前面聲明類型,等號後面創建實例