JDBC是什么?
JDBC(Java DataBase Connectivity)Java数据库连接, 主要提供编写Java数据库应用程序的API支持。
编写JDBC应用程序的基本步骤:
1)导入JDBC类或包括JDBC类的包。
2)加载JDBC驱动程序。
3)建立与数据库的连接。
4)执行SQL语句,与数据库交互。
5)关闭连接。
数据库驱动程序
通常开发中多采用纯Java的驱动程序,直接与特定的数据库系统通信。直接将JDBC命令转换为数据库系统的本地协议。使用更加的直接和简便。
导入JDBC类及加载JDBC驱动程序
此处以Oracle数据库的JDBC驱动程序文件“classes14.jar”(Oracle官方网站下载)为例。
1)一般情况下,在Oracle数据库的安装程序(C:\oracle\product\10.2.0\db_1\jdbc\lib)下也可以找到classes14.jar
2)在创建的项目中新建一个名为lib的文件夹,将jar包复制到该文件夹下
3)然后右键该jar包,依次选择“构建路径”、“配置构建路径”。完成之后会发现项目中多了一个“引用的库”,如果新出现的“object14”可以正常打开,说明导入成功了,如下图
代码示例
1、简单的JDBC程序的基本步骤。
//加载JDBC驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
//建立于数据库的连接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle","scott","tiger");
//准备SQL
Statement stmt = conn.createStatement();
//执行更新操作
String sql = "insert into student (stuNo,stuName,stuAge,sex,birthday) " +
"values(seq_student_stuNo.nextval,'张三',22,'男',to_date('2014-08-11','yyyy-mm-dd'))";
int result = stmt.executeUpdate(sql);
if(result>0){
System.out.println("学生信息插入成功");
}else{
System.out.println("学生信息插入失败");
}
//释放资源
stmt.close();
conn.close();
2、给出一个完整的JDBC程序,写出一个调用JDBC的工具类和测试样例实现对数据表的增删改查的简单功能。
1)工具类
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtil {
private static String driverName = "oracle.jdbc.driver.OracleDriver";
private static String url = "jdbc:oracle:thin:@localhost:1521:oracle";
private static String userName = "scott";
private static String userPwd = "tiger";
private static Connection conn =null;
private static Statement stmt =null;
private static ResultSet rs = null;
public static Connection getConnection(){
try {
//加载JDBC驱动程序
Class.forName(driverName);
//建立与数据库的连接
if(conn==null||conn.isClosed()){
conn = DriverManager.getConnection(url,userName,userPwd);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//添加、删除、修改
public static int executeUpdate(String sql){
int result = 0;
try {
getConnection();
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
//查询
public static ResultSet executeQuery(String sql){
try {
getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
//释放资源
public static void closeAll() {
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(stmt!=null){
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2)测试类
package util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class DBUtilTest {
public static void main(String[] args) {
saveStudent();
//deleteStudent();
//updateStudent();
//selectStudent();
DBUtil.closeAll();
}
private static void saveStudent(){
String sql = "insert into student (stuNo,stuName,stuAge,sex,birthday) " +
"values(seq_student_stuNo.nextval,'张三',22,'男',to_date('2014-08-11','yyyy-mm-dd'))";
DBUtil.executeUpdate(sql);
}
private static void deleteStudent(){
String sql = "delete from student where stuNo = 5";
DBUtil.executeUpdate(sql);
}
private static void updateStudent(){
String sql = "update student set sex = '女' where stuNo = 3";
DBUtil.executeUpdate(sql);
}
private static void selectStudent(){
String sql = "select * from student";
ResultSet rs = DBUtil.executeQuery(sql);
try {
ResultSetMetaData rsmd = rs.getMetaData();
int colNum = rsmd.getColumnCount();
for(int i = 1;i<=colNum;i++){
System.out.print(rsmd.getColumnClassName(i)+"\t");
}
System.out.println();
while(rs.next()){
System.out.print(rs.getInt("stuNo")+"\t");
System.out.print(rs.getString("stuName")+"\t");
System.out.print(rs.getInt("stuAge")+"\t");
System.out.print(rs.getString("sex")+"\t");
System.out.print(rs.getDate("birthday")+"\t");
System.out.println("\n===========================================================");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}