JAVA通幽(七)JDBC操作
前言
本章讲解利用java连接数据库,操纵数据库表。相信大家读到这里应该很兴奋了吧。读了那么久java,sql等等,到现在终于把他们两个结合起来了。可以说本章是web开发尤其是后台结构开发至关重要的一环。
步骤
1.什么是JDBC
我们知道,一个数据库厂商生产出一种数据库,那么数据库需要应用到各个程序之中。其中oracle,mysql等数据库厂商专门为java链接数据库提供了开放的接口,并将它们包装为jar包,也就是我们日常称之为驱动的东东。这使得java语言可以通过该接口直接操纵数据库表,无需得知底层的实现方式。当然,你也不可能知道,毕竟有些数据库如oracle是闭源的。
2.通过JDBC实现查询ORACLE表
- 创建Java项目,创建连接类,我这里命名为DBConnectTest.java
- 导入Oracle的JDBC驱动包
该驱动包位于oracle安装路径下的(形如D:\app\jwang\product\11.2.0\dbhome_1\jdbc\lib)jdbc中的lib下
当然了,没有安装数据库服务器(如连接远程数据库) 的同学,可以从官网下载jdbc驱动程序:
网址:https://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
将拿到的jdbc驱动包引入到你的项目中:
选择指定的jdbc驱动确定即可引入
- 编写代码实现查询scott用户下的emp表(增删改等均以此类推,读者自行摸索)
回顾一下emp表中的结构:
示例代码如下:
package com.jwang.conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBConnectTest {
private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
private static final String DB_USER = "scott";
private static final String DB_PASS = "tiger";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement psts = null;
ResultSet rs = null;
try {
//1)、加载oracle驱动类
Class.forName(DB_DRIVER);
//2)、创建Connection对象
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
//3)、创建sql语句
String sql = "select * from emp";
//4)、获取PrepareStatement对象,预编译sql
psts = conn.prepareStatement(sql);
//5)、执行sql,获得ResultSet结果集
rs = psts.executeQuery();
//6)、循环遍历ResultSet结果集,输出结果
System.out.println("员工编号\t员工姓名\t员工工作");
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭资源
try {
rs.close();
psts.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
程序运行结果:
思考
1.大家有没有想过,如果我这个连接数据库类是给许多个数据库来调用,这样写岂不是写死为连接oracle了?
程序改进:读取配置文件db.properties动态配置数据库连接
(1)src下新建配置文件db.properties,并写入相关内容
db.properties存入如下语句
db_driver=oracle.jdbc.driver.OracleDriver
db_url=jdbc:oracle:thin:@localhost:1521:orcl
db_user=scott
db_pass=tiger
改进后的程序:
package com.jwang.conn;
import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DBConnectTest {
public static void main(String[] args) {
//定义属性类
Properties properties = new Properties();
Connection conn = null;
PreparedStatement psts = null;
ResultSet rs = null;
try {
//加载文件db.properties
properties.load(new BufferedReader(new FileReader("src/db.properties")));
//1)、加载oracle驱动类
Class.forName(properties.getProperty("db_driver"));
//2)、创建Connection对象
conn = DriverManager.getConnection(properties.getProperty("db_url"),
properties.getProperty("db_user"), properties.getProperty("db_pass"));
//3)、创建sql语句
String sql = "select * from emp";
//4)、获取PrepareStatement对象,预编译sql
psts = conn.prepareStatement(sql);
//5)、执行sql,获得ResultSet结果集
rs = psts.executeQuery();
//6)、循环遍历ResultSet结果集,输出结果
System.out.println("员工编号\t员工姓名\t员工工作");
while(rs.next()){
System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭资源
try {
rs.close();
psts.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
这样做的好处在于,你以后更换数据库连接无需更改java代码,只需要更改配置文件就可以了,是不是很方便!