JDBC:Java数据库连接,提供了一种与平台无关的用于执行SQL语句的标准javaAPI,可以方便实现多种关系型数据库的统一操作。
一段JDBC访问数据库的代码:
package com.gc.acion;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* 一段经典的JDBC访问Oracle数据库的代码
* @author wangyj13357
*/
public class SimpleJDBC {
public static void main(String[] args) throws Exception {
//加载数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//创建连接对象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","hr","hr123456");
//创建执行对象
Statement statement = conn.createStatement();
//PreparedStatement ps = conn.prepareStatement("select * from tbstudent");
//执行sql
ResultSet result = statement.executeQuery("select * from tbstudent");
//ResultSet result = ps.executeQuery();
//处理数据集
while(result.next()){
int id = result.getInt("id");
String name = result.getString("name");
}
//释放数据库资源
if(result != null){
result.close();
}
if(statement != null){
statement.close();
}
// if(ps != null){
// ps.close();
// }
if(conn != null){
conn.close();
}
}
}
以上代码一共涉及到了几个对象:
Connection:数据库连接:可以通过DriverManager得到连接。数据库连接信息有数据库IP,端口,实例,用户名和密码
Statement和PreparedStatement:执行对象
区别:Statement是逐条单独编译单独执行,效率较慢。
PreparedStatement支持预编译,批处理。也是JDBC的存储过程。
ResultSet:数据集,查询数据库得到的结果
一段JDBC修改数据库的例子:
package com.gc.acion;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
/**
* 修改数据库的代码
* @author wangyj13357
*
*/
public class UpdateJDBC {
Connection conn =null;
PreparedStatement ps = null;
public void insertData() throws Exception{
try {
//加载数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//需要执行的sql
String sql = "insert into tbstudent values(001,'wangyj')";
//初始化连接对象
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "hr", "hr12345");
//是否自动提交,开始启动事务
conn.setAutoCommit(false);
//得到执行对象
ps = conn.prepareStatement(sql);
//执行sql
ps.executeUpdate();
//提交事务
conn.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
//失败则事务回滚
conn.rollback();
e.printStackTrace();
} finally{
//释放数据库资源
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
}
}
}
浅要解析DriverManager和DataSource的区别:
DriverManager是直接和数据库地层连接(三个getConnection方法都是含参的,即要将连接的地址,实例,用户名密码写进去)
DataSource是用数据库连接池进行封装好获得连接的,访问量大的项目最好用连接池(可以在xml中配置数据库连接池,这样就不用在程序中指定了)
package javax.sql;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Wrapper;
import javax.sql.CommonDataSource;
public interface DataSource extends CommonDataSource, Wrapper {
Connection getConnection() throws SQLException;
Connection getConnection(String arg0, String arg1) throws SQLException;
}