前言
小亭子正在努力的学习编程,接下来将开启javaEE的学习~~
分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~
同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~
目录
数据库基础知识请参考 Mysql数据库基础知识总复习
什么是JDBC?
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
JDBC工作原理
JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类。
JDBC访问数据库层次结构
JDBC优势:
- Java语言访问数据库操作完全面向抽象接口编程
- 开发数据库应用不用限定在特定数据库厂商的API
- 程序的可移植性大大增强
JDBC创建的过程:
1、准备数据库驱动包,并添加到项目的依赖中:
- 1.去中央仓库中下载 mysql-connector-java-5.1.47.jar 包,创建 lib 文件夹地址:Maven Repository: mysql » mysql-connector-java (mvnrepository.com)
- 2.把 jar 包 复制到 lib 文件夹中
- 3.右击 lib 文件夹,添加库
- 4.添加完,打开 jar 包的三角,查看有没有生成以下文件
2、编写代码
- JDBC 需要通过以下步骤来完成:
- 1.创建并初始化一个数据源
- 2.和数据库服务器创建连接
- 3.构造SQL语句
- 4.执行SQL语句
- 5.释放必要的资源
详细说明:
(插入,删除的写法差不多,先以插入的为例讲解,删除的写法在构造sql语句哪里会说明)
1.创建并初始化一个数据源
说明:
(1)第一句使用了向上转型,下面的几句使用了向下转型,还可以写成这样:
(2)setURL: url 唯一资源定位符,描述网络上某个资源的位置
MySQL数据连接的URL参数格式如下:
jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
(3)setUser:数据库用户名(数据库默认的是 root )
(4)setPassword:数据库密码
以上代码还可以用加载数据库驱动,用反射来写:
// 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法区,并执行该类的静态方法块、静态属性。 Class.forName("com.mysql.jdbc.Driver"); // 创建数据库连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test? user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
但是不建议这样写,原因有2.
1.个人认为反射不安全,而且读起来不方便
2.DataSource 内置了数据库连接池,可以复用连接,提高连接服务器的效率。(后面再详细说)
2.和数据库服务器创建连接
说明:
1.getConnection会有一个异常,抛出即可
2.Connection 选JDBC的
3.构造SQL语句
(这里举的例子是从控制台输入数据,构造的语句看红框内的就行。)
说明:
1.上述写法用了 ? (占位符)和 prepareStatement ,可以防止SQL注入
2. 使用prepareStatement 预编译一下 SQL
3.Setxxx 中的set 后面是类型,可以根据实际需求选别的
注意:删除操作,把 insert 改为 delete就行
补充:
1.sql注入
2.预编译
4.执行SQL语句
说明:
statement.executeUpdate():把sql语句(编译过来的)发送给数据库服务器,由服务器做出响应。
executeUpdate() :包括 insert,delete,update 操作,返回值是 int 类型,表示影响的行数。
5.释放必要的资源
说明:
1.释放资源:先创建后释放
【类似于开门,回家时先开的单元口的大门,再开家里的小门;出门时先开家里的小门,再开单元楼的大门。】
2.释放资源这里还有一种写法,判断资源是否为空,用try catch来实现关闭资源
//关闭结果集 if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } //关闭命令 if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } //关闭连接命令 if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } }
查询的写法
说明:
1.前面初始化数据和连接数据库都一样,构造sql的时候改成 select
2.用 executeQuery 执行sql的结果 返回的对象是 ResultSet (结果集) 相当于一个表,
3.遍历结果集 使用了类似迭代器这样的语法风格。
4.getXXX类似于上面的setXXX
上述为 JDBC的基础用法
各个类总结
java代码实现一个学生信息的插入和查询
注:运行这个代码需要按照上述步骤安装数据库驱动包,用Mysql创建相应的数据库和数据表。
插入数据
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBCInsert {
public static void main(String[] args) throws SQLException {
//1.创建并初始化一个数据源
DataSource dataSoure = new MysqlDataSource();
((MysqlDataSource)dataSoure).setURL("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSoure).setUser("root");
((MysqlDataSource)dataSoure).setPassword("2222");
//2.和数据库建立连接
Connection connection = (Connection) dataSoure.getConnection();
//3.构造sql语句
//从控制台读取用户输入的内容
Scanner sc = new Scanner(System.in);
System.out.println("请输入学号:");
int id = sc.nextInt();
System.out.println("请输入姓名:");
String name = sc.next();
//构造sql语句的写法
String sql = "insert into student value(?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
System.out.println(statement);
//4.执行sql语句
int ret = statement.executeUpdate();
System.out.println("ret = " + ret);
//5.释放必要资源
statement.close();
connection.close();
}
}
查询数据
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBCSelect {
//查询,前4步与JDBCinsert一样
public static void main(String[] args) throws SQLException {
DataSource dataSoure = new MysqlDataSource();
((MysqlDataSource)dataSoure).setURL("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSoure).setUser("root");
((MysqlDataSource)dataSoure).setPassword("2222");
Connection connection = (Connection) dataSoure.getConnection();
String sql = "select* from student";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
//5.遍历结果集合
while (resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = "+ id +",name = "+ name);
}
//6.释放资源
resultSet.close();
statement.close();
connection.close();
}
}
以上就是本文分享的所有内容,后序会在此文加入JDBC封装工具类的写法,关注小亭子,一起学java~~