JDBC
首先我們要了解什么是JBDC:
在我們建立了數(shù)據(jù)庫之后,需要與java代碼關(guān)聯(lián),可以通過java代碼執(zhí)行數(shù)據(jù)庫的增刪改查.但由于數(shù)據(jù)庫的種類有多種多樣的,所有給我們提供了這么一種可以統(tǒng)一訪問的java類和接口.jdbc是一種基準(zhǔn),我們可以根據(jù)JDBC構(gòu)建更高級的工作和接口.-
如何使用?
- 首先我們需要導(dǎo)入jdbc的jar包 ->add build path
- 加載驅(qū)動.
- 獲取數(shù)據(jù)庫連接.
- 獲取操作數(shù)據(jù)的對象.
- 執(zhí)行sql語句.
- 釋放對象.
首先聲明 我的數(shù)據(jù)庫叫student 表名stu 具體:
數(shù)據(jù)庫表.PNG
具體代碼如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Test1 {
public static void main(String[] args) throws SQLException {
//如果是查找接受結(jié)果 如果插入 刪除 更新不用管(ResultSet)
try {
Class.forName("com.mysql.jdbc.Driver");//加載驅(qū)動
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//獲取數(shù)據(jù)連接(con)
Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "root");
PreparedStatement stmt = con.prepareStatement("select *from stu");//獲取操作數(shù)據(jù)的對象(stmt)//執(zhí)行sql語句
// int row = stmt.executeUpdate();//增刪改
ResultSet set = stmt.executeQuery();//查找
while (set.next()) {//讀取數(shù)據(jù)
//id name age gender
// int id =set.getInt(1);//通過下標(biāo)獲取
// String name = set.getString(2);
// int age = set.getInt(3);
// String gender = set.getString(4);
int id = set.getInt("id");//通過字段獲取
String name = set.getString("name");
int age = set.getInt("age");
String gender = set.getString("gender");
System.out.println(id+name+age+gender);
}
//釋放對象 (ResultSet) ->stmt ->con
set.close();
stmt.close();
con.close();
}
}
這是最基本的執(zhí)行,還有簡化版的
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Test3 {
//
final static String userName = "root";
final static String pass = "root";
final static String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8";
public static Connection getConnect() {
Connection connectuin = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connectuin =DriverManager.getConnection(url, userName, pass);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return connectuin;
}
public static void main(String[] args) {
Connection connection = Test3.getConnect();
PreparedStatement stmt = null;
ResultSet set = null;
try {
stmt = connection.prepareStatement("select name from stu where age < ?");
stmt.setInt(1, 25);
set =stmt.executeQuery();
while (set.next()) {
String name = set.getString("name");
System.out.println(name);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
try {
set.close();
stmt.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
上面這個完整的代碼中,我們使用?是為了防止SQL注入.使用?會更明了.
這兩段代碼都是執(zhí)行的查詢語句,如果要執(zhí)行增加 刪除 修改 我們就使用
int row = stmt.executeUpdate();//增刪改 就可以了.
DBUtile
- 什么是DBUtile?
我們在知道JDBC的基礎(chǔ)上就可以很好的了解DBUtile,在 我們使用JDBC的時候會發(fā)現(xiàn)我們要重復(fù)寫很多代碼(加載驅(qū)動 獲取數(shù)據(jù)庫的連接 獲取數(shù)據(jù)庫的連接對象) 并且需要重復(fù)釋放對象,所有就有了一個封裝了JDBC代碼的一個工具類庫. - 需要導(dǎo)入相應(yīng)的jar包.
具體代碼如下:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import jdbc.Test3;
//默認(rèn)訪問權(quán)限 只能在自己包內(nèi)
//public 全部都可以
//protected 只能在自己的子類中
//private 只能在自己類中用
public class Test1 {
public static void main(String[] args) throws SQLException {
//獲取連接
Connection con = Test3.getConnect(); // 這是調(diào)用上面封裝的方面 (本人比較懶 望諒解)
//執(zhí)行sql
QueryRunner runner = new QueryRunner();
//1.連接 2sql 3.要存儲的類型
List<Student> list = runner.query(con, "select * from stu",new BeanListHandler<Student>(Student.class));
//con.close();//關(guān)閉數(shù)據(jù)庫
DbUtils.close(con);//關(guān)閉數(shù)據(jù)庫
//打印結(jié)果
System.out.println(list);
}
}
這就是一個student類
public class Student {
private Integer id;
private String name;
private String gender;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", gender=" + gender
+ ", age=" + age + "]";
}
}
c3p0
- c3p0是一種連接池,概念與線程池類似.通俗點說;就是有一個池子 里面有好幾個連接,需要用連接的時候 取走,不用 就放回.這樣就可以節(jié)省創(chuàng)建連接的時間.
- 導(dǎo)入jar包.
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Test1 {
//線程池
//c3p0設(shè)置配置文件
// 1.代碼配置
// 2. Property文件
// xml
public static void main(String[] args) throws SQLException {
//作用:讀xml 建立線程池 初始化連接 放入線程池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//獲取連接
Connection con = dataSource.getConnection();
//正常jdbc 不需要關(guān)閉連接 c3p0回自動回收連接
PreparedStatement stmt = con.prepareStatement("select *from stu");//獲取操作數(shù)據(jù)的對象(stmt)//執(zhí)行sql語句
// int row = stmt.executeUpdate();//增刪改
ResultSet set = stmt.executeQuery();//查找
while (set.next()) {//讀取數(shù)據(jù)
int id = set.getInt("id");//通過字段獲取
String name = set.getString("name");
int age = set.getInt("age");
String gender = set.getString("gender");
System.out.println(id+name+age+gender);
}
//釋放對象 (ResultSet) ->stmt ->con
set.close();
stmt.close();
con.close();
}
}
下面是c3p0 與DBUtile結(jié)合的使用的代碼
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import dbutiles.Student;
//c3p0 與 Dbutile一起用
public class Test2 {
public static void main(String[] args) throws SQLException {
//獲取數(shù)據(jù)庫連接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//創(chuàng)建dbutile操作對象
QueryRunner query = new QueryRunner(dataSource);
//執(zhí)行語句
List<Student> list = query.query("select * from stu",new BeanListHandler<Student>(Student.class));
System.out.println(list);
}
}
以上純屬是一名碼農(nóng)小白的理解,如果有錯誤的地方望各位大神指正.
如果有需要jar包的本媛也可以提供哦!