一.JDBC编程是什么
JDBC,全称为 java database connectivity,即Java数据库连接。
JDBC是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.,javax.sql. 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
二.JDBC的工作原理
JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问AP的一种高级抽象,它主要包含一些通用的接口类。
此为JDBC访问数据库的层次结构:
JDBC优势
- Java语言访问数据库操作完全面向抽象接口编程。
- 开发数据库应用不用限定在特定数据库厂商的API
- 程序的可移植性大大增强
- 适合于超大批量数据的操作,速度快
三.JDBC使用
(一).前提准备
1.首先,我们应该安装好数据库,为简单快捷的安装,个人推荐使用小P(phpstudy_pro)来安装数据库。
操作流程如下:
1)在小皮官网下载好软件,并安装。
官网链接:https://www.xp.cn/
2)打开小皮->软件管理,选择你需要版本的数据库进行安装(个人推荐5.7.26,8.0上的版本可能会遭遇到一些问题,网上解决办法是安装低版本的数据库)。
2.准备数据库驱动包,在官网下载与数据库版本差不多的驱动包。
链接:https://mvnrepository.com/artifact/mysql/mysql-connector-java
打开链接,下滑选择版本(本人使用5.1.40,数据库为5.7.26,可以正常使用)
进入后,点击 jar进行下载
这样,前提工作就做好了。
(二)为项目添加驱动包
1)在Idea上创建一个项目,右键项目新建一个目录,命名为lib
2)将刚才下载好的驱动包复制到lib文件夹中,在Idea中右键lib,点击Add as Library…。点击OK,完成驱动包导入。
(三)创建与数据库的连接并进行sql操作
1.实现数据源对象
DataSource dataSource = new MysqlDataSource();
DataSource 是个接口描述了数据从哪里来,数据库的位置,要使用该,接口的方法就需要使用实现该接口的子类
2.设置对象的属性
设置对象的URL,user以及password
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/a?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("222222");
1)url的设置:依次代码为例 以jdbc为开头,数据库为mysql,127.0.0.1为本机的IP地址,3306为接口号(小皮中数据库端口号默认为3306),端口号后接上“/”+要连接的数据库名称,“?”后为参数,'characterEncoding=utf8’指定所处理字符的解码和编码的格式,'useSSL=false’为关闭加密。
总结:格式为:ip地址(描述mysql服务器在那个主机上)+端口号(区分一个主机的应用程序)+数据库名+‘?’+额外参数(解释说明这次数据库的连接)+'&'关闭加密
2)User的设置:root为mysql自带的 管理员用户 权限最大。
3)password设置:输入数据库的密码(我自己设置的为222222,小皮默认为root)。
3.与数据库服务器建立连接
Connection connection= dataSource.getConnection();
注:
在连接中可能遇到形形色色的错误,这时我们应查看报错信息来排查错误。常见的几种报错信息
- 此为数据库密码错误。
- 此为端口号错误
- 此为数据库不存在错误
具体错误,可以根据报错内容推断出,根据问题找解决方法。
4.构建sql语句
例如,在(id int,name varchar(20))的学生表中,添加一个学生。
String sql="insert into student values(1,'张三')";
PreparedStatement statement =connection.prepareStatement(sql);
PrapredStatemet :“预编译的语句”:用来解析该语句的准确性
同时注意方法依然是上一个connect对象里的方法,用来编译sql语句同时返回PrapredStatement对象。
5.执行sql语句
int n=statement.executeUpdate();
通过exectueUpdate()执行代码,将返回一个整型,表示执行的行数,相当于mysql中的
利用整型n接收其返回值,并打印。
System.out.println(n);
完整代码:
public class Main {
public static void main(String[] args) throws SQLException {
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("222222");
Connection connection= dataSource.getConnection();
//String sql="insert into student values(?,?)";
String sql="insert into student values(1,'张三')";
PreparedStatement statement =connection.prepareStatement(sql);
int n=statement.executeUpdate();
System.out.println(n);
statement.close();
connection.close();
}
}
除此之外,以上是用来增删改的一系列的操作在最关键的操作是 statement.executeUpdate();
若要进行查询操作则用statement.executeQuery();,且用ResultSet来接收。
代码:ResultSet resultset = statement.executeQuery();
并通过遍历获取表中的信息
while(resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("name"));
}
6.内存释放
statement.close();
connection.close();
resultSet.close();
注:释放顺序与先去使用顺序相反
以上便是全部内容,如有不对,欢迎指正。