1.JDBC的概念
JDBC:Java DataBase Connectivity Java数据库连接,java语言操作数据库
jabc的本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则(接口),各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)进行编程,真正执行的代码是驱动jar包中的实现类
2.JDBC访问数据库的步骤
(1)导入驱动jar包
(2)注册驱动 (告诉程序使用哪一个数据库驱动jar) Class.forName(“com.mysql.jdbc.Driver”);
(3)建立连接 con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,username,password)
(4)定义sql
(5)获取执行sql的statement或prepareStatement对象 con.createStatement();
(6)执行sql
(7)处理结果
(8)释放资源
DriverManager:驱动管理对象
Connection:数据路连接对象
Statement:执行sql对象
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
String sql="select * from user";
//获取执行对象
Statement statement = con.createStatement();
//执行sql语句
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()) {
resultSet.getInt(1);
resultSet.getString("name");
resultSet.getDouble(3);
}
resultSet.close(); //注意释放顺序,先申请的后释放
statement.close();
con.close();
}
PrepareStatement:执行sql的对象
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
String sql="select * from user where username=? and password=?";
//获取执行对象
PreparedStatement preparedStatement = con.prepareStatement(sql);
//给参数赋值
preparedStatement.setString(1,"张三");
preparedStatement.setString(2,"123456");
//执行sql语句
ResultSet resultSet = preparedStatement.executeQuery(sql);
while(resultSet.next()) {
resultSet.getInt(1);
resultSet.getString("name");
resultSet.getDouble(3);
}
resultSet.close(); //注意释放顺序,先申请的后释放
preparedStatement.close();
con.close();
}
ResultSet:结果集对象,封装查询结果
3.JDBC管理事物
事物:一个包含一条或多条数据库操作的不可分割的执行单元,在同一个事物中的操作要么全部成功,要么全部失败
public static void main(String[] args) {
Connection con=null;
PreparedStatement ps1=null;
PreparedStatement ps2=null;
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
con.setAutoCommit(false);
String sql1="update account set balance=balance-?where id=?";
String sql2="update account set balance=balance+? where id=?";
ps1 = con.prepareStatement(sql1);
ps2=con.prepareStatement(sql2);
ps1.setDouble(1,500);
ps1.setInt(2,1);
ps2.setDouble(1,500);
ps2.setInt(2,2);
int i = ps1.executeUpdate();
int i1 = ps2.executeUpdate();
con.commit();
}catch(Exception e){
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally{
try {
if (ps1!=null) ps1.close();
if (ps2!=null) ps2.close();
if (con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4.数据库连接池
概念:其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后连接池被创建,容器就会申请一些连接对象。当容器访问数据库时,从容器中获取连接,访问完归还给池子。
//创建数据库连接池对象
DataSource ds=new CombopooledDataSource();
//获取连接
Connection conn = ds.getConnection();
5.JDBCTemplate