JDBC
jdbc: java database connectivity
java与数据库的连接 java 提供给各个数据库厂商接口。厂商去实现这些接口。而我们切换不同数据库时。只需要更改一些配置就行。极大的简便了程序。
Java制定的标准如下
通过导入对应数据库厂商提供的jar包。
JDBC通用步骤
-
准备工作
包括导入jar包,构建buildpath
-
建立连接
使用反射来加载驱动 Class.forName("com.mysql.jdbc.Driver"); 通过DriverManager类的静态方法来建立连接。 参数1:数据库地址,参2:用户名,参3:密码 DriverManager.getConnection("jdbc:mysql://localhost:3306/esspjy","root","8888"); 创建了Connection对象,通过内部的Socket对象(是一个远程连接) 和 MySQL建立了连接。而创建 Socket对象很花费时间,所以创建Connection对象很花费时间。后期是通过连接池管理来提高效率。
-
获取处理块
处理块有两种 一种是静态处理块Statement 对象。向数据库发送要执行的 SQL语句。Statement对象 ,用于执行不带参数 的简单SQL语句 第二种是预编译处理块PreparedStatement 。在获取对象的时候就需要传入sql语句,进行预编译 因此效率高。而且可以防止sql注入。
-
分析
执行完SQL语句后可能成功也可能失败,如果成功,有数据则我们很大一部分情况是 需要获取查询的结果。 对于select的结果集进行分析,类似于迭代器, 先判断(移动)再获取
-
释放资源
释放资源的原则是 先打开的后关闭, 则我们的顺序一般为: 结果集->处理块->连接
以下为完整步骤
事例使用Oracle数据库 (使用静态处理块方式)
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取连接
Connextion conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe"
, "SCOTT", "TIGER")
//创建静态处理块
Statement state = conn.createStatement();
//执行sql 语句。
ResultSet set=state.executeQuery("select * from emp ");
//通过迭代器来遍历结果。每次遍历一行。
while(set.next()){
//通过getObject 传入列下标方式获取该行该列的值。下标从1开始
System.out.println(set.getObject(1).toString()+'-'+set.getObject(2));
}
set.close();
state.close();
conn.close();
使用预编译处理块方式
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取连接
Connextion conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe"
, "SCOTT", "TIGER")
//创建预编译处理块 。传入sql语句。sql语句中的参数使用?进行占位。
PreparedStatement statement= conn.prepareStatement(Insert into my_sheet
values(?,?,?));
//通过setObject方法 来对sql中的占位符进行设置值。 参数1为占位下标,(从1开始)参2为值。
statement.setObject(1,1);
statement.setObject(2,"小红");
statement.setObject(3,12);
//执行操作
int row = statement.executeUpdate();
//释放资源
statement.close();
conn.close()