JDBC
程序员文章站
2024-02-01 18:18:40
JDBC编码的步骤: 1、加载驱动并注册驱动 Class.forName("com.mysql.jdbc.Driver"); 说明:在加载Driver类时,它会自动创建自己的实例并向 DriverManager 注册该实例。 com.mysql.jdbc.Driver的源码: 2、获取与数据库的连接 ......
JDBC简介
JDBC
JDBC全称Java DataBase Connectivity即Java数据库连接技术,是Java语言和数据库之间的一座桥梁,它是一个规范而不是一个实现。简单来讲,我们可以通过Java代码对数据库进行操作管理。
JDBC其实就是一组接口,也是规范,让所有的数据库厂商按照该规范,去实现对外提供的这一组接口,因此数据库厂商提供符合jdbc规范的能够访问自家数据的一组程序(驱动)。
JDBC常见接口和类
以下四个API都是sql包下的接口
接口(类)名 | 描述 |
---|---|
DriverManager | 驱动管理,实现与数据库的连接 |
Connection | 与数据库的连接状态 |
Statement | SQL语句执行,将SQL语句发往数据库执行 |
ResultSet | 结果集,在数据库操作中查询的结果 |
JDBC快速入门
下载JDBC驱动
下载驱动 5.x版本 8.x版本下载链接
JDBC连接步骤
创建java Project项目
右键项目–>创建目录(lib)–>将驱动粘贴到lib目录中–>右键jar文件–>build path–>add to path
步骤
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.连接数据库
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?useSSL=false", "root", "root");
if(con!=null) {
System.out.println("数据库连接成功");
}else {
System.out.println("数据库连接失败");
}
//3.创建SQL语句执行器
Statement stat = con.createStatement();
String sql="insert into course values(104,'大数据',3)";
//发送sql数据库执行并返回结果
int n = stat.executeUpdate(sql);
if(n>0) {
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
//4.资源释放
stat.close();
con.close();
代码详解
1.驱动注册
Class.forName("com.mysql.jdbc.Driver"); 5.x版本
Class.forName("com.mysql.cj.jdbc.Driver"); 8.x版本
2.数据库连接
jdbc:mysql://ip地址:端口号/要操作的数据库名称 5.x版本写法
jdbc:mysql://ip地址:端口号/要操作的数据库名称?serverTimezone=UTC 8.x写法
当在url中ip和端口分别为localhost:3306的时候可以省略
3.创建SQL语句执行器
Statement stat = con.createStatement();
4.ResultSet用于执行静态 SQL 语句并返回它所生成结果的对象
##当执行的SQL语句为DML语句的时候,需要调用executeUpdate(String sql)去执行,返回值为int,表示受影响的行数
##当执行的SQL语句为DQL的时候,需要调用executeQuery(String sql)执行,返回的ResultSet对象
解决SQL注入攻击
API:
PreparedStatement SQL语句执行器
PreparedStatement 与 Statement为父子关系,Statement是父
表示预编译的 SQL 语句的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中,所谓的预编译就是对要执行的sql先进行语法检测,固定语法结构,为了能够使sql语句正常通过sql语句的语法检测,值的部分用?替代。
代码示例
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
String driver="jdbc:mysql:///demo?useSSL=false&serverTimezone=UTC";
Connection con = DriverManager.getConnection(driver, "root", "root");
String sql="insert into user(uname,upwd)values(?,?)";
//生成SQL语句执行器
PreparedStatement ps = con.prepareStatement(sql);
//给?赋值
ps.setString(1, "小明");
ps.setString(2, "666");
int n = ps.executeUpdate();
System.out.println(n);
//释放资源
ps.close();
con.close();
封装
1.驱动注册只需要执行一次,因此放入静态代码块中(随着类的加载而执行,而且只执行一次)
2.将驱动类,url,用户名,密码提取出来,保存到文件中(.properties)
3.将连接数据与释放资源分别封装到两个方法中
private static String DRIVER;//驱动类
private static String URL;//连接路径
private static String USERNAME;//用户名
private static String PASSWORD;//密码
static {
try {
//创建Properties对象
Properties p = new Properties();
p.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
DRIVER = p.getProperty("dbDriver");
URL = p.getProperty("url");
USERNAME = p.getProperty("username");
PASSWORD = p.getProperty("password");
System.out.println(DRIVER);
Class.forName(DRIVER);//驱动注册
} catch (Exception e) {
e.printStackTrace();
}
}
//连接数据库的方法
public static Connection getCon() {
Connection con = null;
try {
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//释放资源的方法
public static void close(Connection con ,ResultSet rs,PreparedStatement ps) {
try {
if(rs!=null) {
rs.close();
}
if(ps!=null) {
ps.close();
}
if(con!=null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
src下的db.properties
dbDriver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///demo?useSSL=false&serverTimezone=UTC
username=root
password=root
//使用
//连接数据库
Connection con = JdbcUtils.getCon();
//释放资源
JdbcUtils.close(con, null, ps);
本文地址:https://blog.csdn.net/weixin_44255355/article/details/111998748