java data base connectivity java语言连接数据库
一套接口规范:都按这个方式来执行
作用:
接口使程序具有很强的插拔性,易于拓展
连接数据库驱动
jdbc接口的实现类,编译后将这实现类打成jar包,并且发布
API应用程序接口
API字节码 源码 帮助文档
url统一资源定位
mysql数据库的协议:jdbc:mysql://localhost:3306/数据库名称
Oracle数据库协议:jdbc:oracle:thin:@localhost:1521:数据库名称
驱动:各大数据库厂商编写的JDBC接口的实现类,编译之后将这些实现类打成jar包并且发布,这些jar包通常被我们称为连接数据库的驱动。
模拟实现
public static void main(String[] args) throws Exception{
//通过FileReader读取配置文件
FileReader r = new FileReader("D:\\ppp\\db.properties");
Properties pro = new Properties();
//通过属性对象的load方法将reader读取到内存中生成一个Map集合
pro.load(r);
r.close();
//通过属性对象的getproperty(Stirng key)
String dbname = pro.getProperty("dbname");
//通过java的反射机制创建该类
Class c = Class.forName(dbname);
Object Obj = c.newInstance();
jdbc j = (jdbc)Obj;
j.getConnection();
}
JDBC编程六部曲:
-
注册驱动(获取驱动对象,注册)
-
获取数据库连接
-
获取数据库操作对象
-
执行SQL语句
-
处理查询结果集
-
关闭资源--以为倒序的方式
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCTEST01 {
public static void main(String[] args) {
Connection conn = null;//数据库连接对象
Statement stmt = null;//数据库操作对象
ResultSet rs = null;//查询结果集
try {
Driver driver = new com.mysql.cj.jdbc.Driver();// 获取驱动对象
DriverManager.registerDriver(driver);
// 注册驱动
// Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone =UTC";//记得加?serverTimezone = UTC
String user = "root";
String password = "123123";
conn = DriverManager.getConnection(url, user, password);
//数据库连接对象
//获取操作对象
stmt = conn.createStatement();
//执行sql语句
String sql = "select e.ename,e.sal from emp e join salgrade s on e.sal between s.losal and s.hisal";
rs = stmt.executeQuery(sql);
//执行 数据库操作对象
//处理查询结果集
while(rs.next()) {//遍历数据
/*String ename = rs.getString("ename");
double sal = rs.getDouble("sal");
int grade = rs.getInt("grade");*/
String ename = rs.getString(1);
double sal = rs.getDouble(2);//字段的下标,不建议,程序可读性不强
int grade = rs.getInt(3);
System.out.println(ename+" "+grade+" "+sal);
}
//关闭资源
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭资源
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
ps:若第四步执行的SQL语句为DML语句,则没有第五步
关闭资源时,采用倒叙,一个数据库连接对象对应多个操作对象。