JDBC:
Java Database Connectivity
JDBC实际上就是用于访问各种关系型数据库的一组API。
这个API不是数据库厂商定制的,而是Java统一进行定制的,各个数据库的厂商都来支持这个API,这样的话,我们使用同样的一组API,我们就可以通过Java程序访问各个关系型数据库了。
使用JDBC的步骤:
1.加载驱动
JDBC只是一个访问数据库的标准,它本身是不能访问数据库的,我们想要访问数据库必须使用数据库厂商给我们封装好的API,也就是说给我们封装好的一些类,而这些类都封装在JDBC的驱动之中,我们想要使用,我们就需要去加载JDBC的驱动。
2.连接数据库
3.操作数据库
4.关闭数据库连接
为了方便,我们一般会创建一个DBTools
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBTools {
private static Connection conn = null;
private static final String URL = "jdbc:mysql://localhost:3306/数据库名";
private static final String USER = "root";//数据库用户名称
private static final String PASSWORD = "root";//密码
private static PreparedStatement pstat = null;
private static ResultSet rs = null;
static{
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//编写一个方法获取数据库的连接对象
public static Connection getConn(){
if(conn==null){
try {
conn = DriverManager.getConnection(URL, USER, PASSWORD);
conn.setAutoCommit(false);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return conn;
}
public static void execute(String sql,Object...objs){
conn = getConn();
try {
pstat = conn.prepareStatement(sql);
if(objs!=null){
for(int i=0;i<objs.length;i++){
pstat.setObject(i+1, objs[i]);
}
}
pstat.execute();
commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
rollback();
}
}
public static List<Object[]> executeQuery(String sql,Object...objs){
List<Object[]> list = new ArrayList<Object[]>();
conn = getConn();
try {
pstat = conn.prepareStatement(sql);
if(objs!=null){
for(int i=0;i<objs.length;i++){
pstat.setObject(i+1, objs[i]);
}
}
rs = pstat.executeQuery();
while(rs.next()){
Object[] obj = new Object[rs.getMetaData().getColumnCount()];
for(int i=0;i<obj.length;i++){
obj[i] = rs.getObject(i+1);
}
list.add(obj);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close();
}
return list;
}
public static void commit(){
if(conn!=null){
try {
conn.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close();
}
}
}
public static void rollback(){
if(conn!=null){
try {
conn.rollback();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close();
}
}
}
public static void close(){
if(pstat!=null){
try {
pstat.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
conn = null;
}
}
}
}
京公网安备 11010502036488号