JDBC、c3p0連線池
JDBC : JAVA DataBase Connectivity - java資料庫連線,是一套由java程式碼編寫的開發資料庫應用程式的標準。是用於Java應用程式連線各種資料庫的標準方法。
JDBC連線資料庫的步驟
1.載入驅動
語法:Class.forName(“classname”); 功能:獲取字串引數指定的類,並初始化該類。例如載入mysql的驅動語句是:
Class.forName(“com.mysql.jdbc.Driver”);
2.建立連線
//2.1.資料庫的連線地址
String url=“jdbc:mysql://localhost:3306/student?characterEncoding=utf-8”;
/** * 1.DriverManager:管理一組jdbc驅動服務,負責建立connection物件 * 2.connection物件:連線物件,負責和資料庫進行連線,只有連線成功後才能對資料庫進行相應的操作,但是在連前,我需要知道資料庫的連線地址、使用者名稱和密碼 * 3.Statement:執行物件,由connection進行建立,負責把SQL語句傳送給資料庫伺服器。 需要拼接SQL語句,不安全,容易引起SQL注入 */ public class TestJdbc { public static void main(String[] args) { //建立連線物件 Connection conn=null; //定義一個執行物件 Statement st=null; //建立一個變數接收資料庫伺服器返回的結果 int result=0; try { //第一步:載入驅動 Class.forName("com.mysql.jdbc.Driver"); //第二步:建立連線 //1.資料庫的連線地址 String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8"; //2.資料庫的使用者名稱 String userName="root"; //3.資料庫密碼 String password="336029"; //建立連線 conn=DriverManager.getConnection(url, userName, password); //System.out.println(conn); //第三步:建立執行物件 //sql語句 String id="1"; String sql="delete from stu where stuid="+id; st=conn.createStatement(); //第四步:執行並返回執行結果 result=st.executeUpdate(sql); } catch (Exception e) { e.printStackTrace(); }finally{ //第五步:關閉連線 try { st.close(); //銷燬執行物件 conn.close(); //關閉連線通道 } catch (Exception e2) { e2.printStackTrace(); } } if(result>0) { System.out.println("刪除成功"); }else { System.out.println("刪除失敗"); } } }
預編譯執行物件
/**
* PreparedStatement:預編譯執行物件,它是Statement物件的子介面
* 把sql語句預編譯並存儲到PreparedStatement物件中
* 它允許該sql語句有佔位符,建立完成後對佔位符進行賦值,佔位符的座標從1開始
*/
public class DeleteStudent {
public static void main(String[] args) {
//連線物件
Connection conn=null;
//建立連線物件
PreparedStatement pst=null;
//建立變數接受結果
int result=0;
//1.載入驅動
try {
Class.forName("com.mysql.jdbc.Driver");
//2.建立連線
String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
String userName="root";
String password="336029";
conn=DriverManager.getConnection(url, userName, password);
//3.建立執行物件
//sql
String sql="delete from stu where stuid=?";
//建立執行物件
pst=conn.prepareStatement(sql);
//賦值
pst.setInt(1, 2);
//4.執行並返回資訊
result=pst.executeUpdate();
//5.關閉連線
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
pst.close();//銷燬執行物件
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(result>0) {
System.out.println("刪除成功");
}else {
System.out.println("刪除失敗");
}
}
}
ResultSet:結果集物件
/*
* ResultSet:結果集物件,查詢結果返回
*/
public class SelectStudent {
public static void main(String[] args) {
select();
}
public static void select() {
//連線物件
Connection conn=null;
//執行物件
PreparedStatement pst=null;
//定義結果集物件
ResultSet rs=null;
//定義一個集合去接收結果集中的值
List<Student> list = new ArrayList<Student>();
try {
//第一步 載入驅動
Class.forName("com.mysql.jdbc.Driver");
//第二步 建立連線
//1.資料庫的連線地址
String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
//2.資料庫使用者名稱
String user="root";
//3.資料庫密碼
String password="336029";
//建立連線
conn=DriverManager.getConnection(url, user, password);
//第三步 建立執行物件
//sql
String sql="select * from stu";
pst=conn.prepareStatement(sql);
//第四步 執行並返回結果
rs=pst.executeQuery();
while(rs.next()) { //rs包含所有資料,next()表示向下走一行
Student stu = new Student();
stu.setStuid(rs.getInt("stuid"));
stu.setStuname(rs.getString("stuname"));
stu.setAge(rs.getInt("age"));
stu.setAddress(rs.getString("address"));
//向集合中新增資料
list.add(stu);
}
//遍歷集合
for(Student stu1:list) {
System.out.println(stu1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//第五步 關閉資源
try {
rs.close();
pst.close();
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
} 資料庫連線池: 資料庫連線池的優點:
- 資源重用
- 更快的系統反應速度
- 新的資源分配手段
- 統一的連線管理,避免資料庫連線洩露
c3p0的使用步驟 1.匯入c3p0的jar包 2.建立資料來源類(DataSource),負責初始化連線池,並提供資料庫連接獲取方法 3.定義ComboPooledDataSource變數 4.設定連線池引數(建議使用配置檔案設定引數) 5.獲取資料庫連線
c3p0的配置檔案資訊:
<?xml version="1.0" encoding="UTF-8"?><default-config>
<!-- 基本配置 -->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<!-- 每次增量,當需要建立Connection物件時,一次建立幾個 -->
<property name="acquireIncrement">3</property>
<!-- 當建立池物件後,池中應該有幾個Connection物件 -->
<property name="initialPoolSize">10</property>
<!-- 池中最少Connection個數,如果少於這個值,就會建立Connection -->
<property name="minPoolSize">2</property>
<!-- 池中最大連線個數 -->
<property name="maxPoolSize">10</property>
</default-config>
<!-- 命名配置,new ComboPooledDataSource("mysql-config")時,使用的就是這個配置 -->
<named-config name="mysql-config">
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</named-config>