一、JDBC理解
Java DataBase Connectivity----java 语言连接数据库
JDBC 是sun公司定制的一套接口(interface)----java.sql.*;(包)
每一个数据库产品都有自己独特的实现原理,利用接口可以进行不同的实现。
接口都有调用者和实现者
面向接口调用、面向接口写实现类,这都属于面向接口编程
为什么要面向接口编程
解耦合:降低程序的耦合度,提高程序的扩展力
多态机制是非常典型的:面向抽象编程。
例如创建实体对象时
当有一个方法同时用Dog类和Cat类时,可以直接使用Animal类
JDBC开发前的准备
在官网下载对应mysql版本的jar包
Central Repository: mysql/mysql-connector-java
二、JDBC六步走
注册驱动 获取连接 获取数据库操作对象 执行sql语句 查询结果集 释放资源
package JDBC;
import java.sql.*;
//JDBC 六步走 注册驱动 获取连接 获取数据库操作对象 执行sql语句 查询结果集 释放资源
public class textJDBC {
public static void main(String[] args) {
Connection conn=null;
Statement stmt=null;
try {
//注册驱动
// 常用写法:Class.forName("com.mysql.jdbc.Driver");(类加载)
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//获取数据库连接
/*
url 统一资源定位符
格式为:通信协议//IP地址:端口/资源名
* */
//获取连接的缩写conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ys","root","123456");
String url = "jdbc:mysql://localhost:3306/shujuku";//jdbc:mysql://数据库地址:端口号/数据库名
String user = "yonghuming"; //数据库用户名
String password = "mima";//数据库密码
conn= DriverManager.getConnection(url, user, password);//获取连接
System.out.println("数据库连接对象=" + conn);//com.mysql.jdbc.JDBC4Connection@1a86f2f1
//获取数据库操作对象
stmt= conn.createStatement();//获取一个sql语句返回给数据库
//执行sql语句
String sql = "insert into dept(deptno,dname,loc) values (50,'人事部','北京')";//语句中不能用中文包括空格
//专门执行DML语句的(insert delete update)
//返回值是“影响数据库中的记录条数” 例如插入两条数据,这返回值为2
int count = stmt.executeUpdate(sql);//从数据库接收sql语句执行后的返回值
System.out.println(count == 1 ? "数据库修改成功" : "数据库修改失败");
//处理查询结果集
} catch (SQLException e) {
e.printStackTrace();
}finally {
//释放支援,为了保证资源一定释放所以放在finally中关闭
//并且遵循从小到大关闭 分别对其try...catch
try {
if(stmt !=null){
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
使用资源管理器的方法绑定
root为资源配置文件
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class JDBCdemo2 {
public static void main(String[] args) { //使用资源绑定气绑定属性配置文件
ResourceBundle bundie = ResourceBundle.getBundle("root");
String driver = bundie.getString("driver");
String url = bundie.getString("url");
String user = bundie.getString("user");
String password = bundie.getString("password");
Connection conn = null;
Statement stmt = null;
try {
//注册驱动
try {
Class.forName(driver);//常用写法(类加载)
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//获取数据库连接
/*
url 统一资源定位符
格式为:通信协议//IP地址:端口/资源名
* */
//获取连接的缩写conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ys","root","123456");
conn = DriverManager.getConnection(url, user, password);//获取连接
System.out.println("数据库连接对象=" + conn);//com.mysql.jdbc.JDBC4Connection@1a86f2f1
//获取数据库操作对象
stmt = conn.createStatement();//获取一个sql语句返回给数据库
//执行sql语句
String sql = "insert into dept(deptno,dname,loc) values (501,'人事部1','北京1')";//语句中不能用中文包括空格
//专门执行DML语句的(insert delete update)
//返回值是“影响数据库中的记录条数” 例如插入两条数据,这返回值为2
int count = stmt.executeUpdate(sql);//从数据库接收sql语句执行后的返回值
System.out.println(count == 1 ? "数据库修改成功" : "数据库修改失败");
//处理查询结果集
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放支援,为了保证资源一定释放所以放在finally中关闭
//并且遵循从小到大关闭 分别对其try...catch
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
root文件内容
driver=com.mysql.jdbc.Driver
url= jdbc:mysql://localhost:3306/数据库名
user= 用户名
password=密码