带你学习Java的JDBC连接操作MySql数据库
通过学习了Java的基础语法知识后,又学习了面向对象编程的思想,包括类,函数,方法,继承,多态,内部类,函数式编程,枚举,包装类等内容,学习的内容还是相对比较多的,要想全部都掌握了还需花时间再去巩固学习。要想把这些知识运用到项目中,还要学习常用的设计模式,学习连接操作数据库相关知识。本篇文章我们主要来学习一下使用JDBC连接MySql数据库,并对数据进行增删改查的操作,这些都是项目中必不可少的应用。
JDBC是什么
JDBC全称Java Database Connectivity,译为Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC驱动程序是直接连接到数据库的Java驱动程序。
JDBC驱动程序
各个数据库厂商根据JDBC的规范制作的 JDBC 实现类的类库,有四种类型:
1.JDBC-ODBC桥。
2.部分本地API部分Java的驱动程序。
3.JDBC网络纯Java驱动程序。
4.本地协议的纯 Java 驱动程序。
JDBC接口
1.面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。
2.面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果集)。
JDBC应用
第一步:下载MySql驱动包
Java 连接 MySQL 需要驱动包,最新版下载地址为:https://downloads.mysql.com/archives/c-j/,选择对应版本和系统进行下载,解压后得到 jar 库文件,然后在对应的项目中导入该库文件。
第二步:导入驱动包
在项目目录中创建一个文件夹 lib,将解压的 jar 库文件放入此文件夹中,在 xxx.jar 库文件右键“构建路径”-“添加至构建路径”,就可以将jar包添加到当前项目引用的库里面。
第三步:加载驱动
// 注册 JDBC 驱动
Class.forName("com.mysql.jdbc.Driver");
第四步:连接数据库
DB_URL:连接数据库的路径(jdbc:mysql://localhost:3306/test),注意:不同的数据库连接是不一样
USER:数据库用户名(root)
PASSWORD:数据库密码(123456)
Connection conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
第五步:执行SQL语句
在连接建立后,需要对数据库进行访问,执行 sql 语句,主要有三种方式:
- 使用 Statement 执行sql语句,用于执行不带参数的简单SQL语句。
- 使用 PreparedStatement 执行sql语句,用于执行预编译的sql声明。
- 使用 CallableStatement 执行sql语句,用于执行数据库中存储过程的调用。
为了防范 SQL 注入攻击,我们主要使用 PreparedStatement 执行带参数的SQL语句。
String sql = "select * from user";
PreparedStatement ps = conn.prepareStatement(sql);
第六步:获取数据
ResultSet:对于给定声明取得结果,该对象以逻辑表格的形式封装了执行数据库操作的结果集,通过 PreparedStatement 的 excuteQuery() 方法创建该对象。
ResultSet 对象维护了一个指向当前数据行的游标,初始的时候游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行。
// 获取数据集
ResultSet rs = ps.executeQuery(); // 执行查询语句
// 执行插入,更新,删除语句
// String delSql = "delete from user where id = 3";
// int result = ps.executeUpdate(delSql );
while(rs.next()){
Integer id = rs.getInt(1);
String name = rs.getString(2);
Integer age = rs.getInt(4);
System.out.println("id="+ id + ",name=" + name + ",age=" + age);
}
第七步:关闭连接
Connection,PreparedStatement,ResultSet 都需要关闭,后开启的要先关闭。
注:关闭之前要检查对象是否为 null
// 完成后关闭对象,也可以写在 finally 里面
rs.close();
ps.close();
conn.close();
运行结果
文章内容如果写的存在问题欢迎留言指出,让我们共同交流,共同探讨,共同进步~~~
文章如果对你有帮助,动动你的小手点个赞,鼓励一下,给我前行的动力。
- 点赞
- 收藏
- 关注作者
评论(0)