使用JDBC操作MySql数据库
1、JDBC简介
1、JDBC是Java连接数据库的技术
使用Java连接并操作数据库(增加、删除、更新、查询)
2、JDBC的意义
让程序更加的灵活,并且任何程序都离不开数据库。全栈工程师必须掌握这项技术。
3、如何使用JDBC
Java可是连接很多数据库,这些连接的技术却不是Java去实现的。数据库由每个不同的厂商创造,数据时不会公开的。Java只做连接并操作数据库的接口和框架。(只做接口,不具体实现
)
所以我们要使用Java连接数据库, 就需要下载对应数据库的驱动包。(驱动包就是Java类文件
)
2、Maven配置
1、在本地新建一个仓库文件夹,里面解压该maven压缩包依赖库。
2、进入到conf目录,打开settings文件
在第54行左右找到,并复制到相应的位置:
<localRepository>D:/Program Files (x86)/repository/mvn_repository</localRepository>
在第160多行左右,并复制到相应的位置:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
不做这两处的配置,每次有新需要的jar包,都会访问maven官网,效率慢,就改成图二阿里提供的镜像,图一是把需要的都放在本地了。
3、进入Eclipse
Window
Preferences
搜索:maven,要设置的有两项,分别是:Installations、User Settings
先设置Installations,注意,选择maven依赖包的目录,是刚才解压的目录,选择到bin之前就好了。
会 自动 有这样的提示
完成之后,都要点击Apply(应用)
之后是设置User Settings,还是这个解压目录,选择我们刚才配置的Settings文件
仍然是Apply,最后再确认一次Apply and Close(应用并关闭)
3、Eclipse使用
Ctrl + N 新建项目,搜索maven,选择Maven Project,下一步
要选择本地和这个q开头的1.1
完成之后在左侧,会有一个项目,打开它
添加需要的jar包。
需要的jar包在这个网址找:https://mvnrepository.com/
之后就是使用Java连接数据库并操作数据库6步:
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.建立连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_0805?useSSL=false", "root",
"123456");
System.out.println(con);
// 3.预处理sql语句
// 需求:查询出id、名字,展示到控制台
PreparedStatement pst = con.prepareStatement("select * from t_mysql_employees limit 5");
// 4.执行sql语句
ResultSet rs = pst.executeQuery();
// 5.处理sql语句执行的结果
while (rs.next()) {
System.out.println(rs.getInt("employee_id") + "==" + rs.getString("last_name"));
}
// 6.释放资源(链接、结果、预定义对象[后至前])
rs.close();
pst.close();
con.close();
第二步数据库名后加的(?useSSL=false),我这是jdk12,数据库是MySQL8.0.18
但 是
这样有新的需求,都要重新编写代码,就很烦,所以我们需要封装一个JDBC工具类
上图中框起来的从下往上,分别是:
1、resources文件夹下jdbc.properties:连接数据库的驱动、链接、用户、密码集文件
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/db_0805?useSSL=false
mysql.userName=root
mysql.password=123456
2、DBAccess.java:公共的建立连接、释放资源部分就抽取出来
package com.newer.jdbc01.utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DBAccess {
// 公共的两部分:1建立连接、2资源释放
// 想要程序一运行就能建立连接,连接需要的东西都写成static静态的,最先执行的。
private static String driver;
private static String url;
private static String userName;
private static String password;
static {
Properties p = new Properties();
try {
p.load(new BufferedReader(new FileReader("resources/jdbc.properties")));
driver = p.getProperty("mysql.driver");
url = p.getProperty("mysql.url");
userName = p.getProperty("mysql.userName");
password = p.getProperty("mysql.password");
// 加载驱动
Class.forName(driver);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 建立连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, userName, password);
}
// 2.释放资源
public static void close(ResultSet rs, PreparedStatement pst, Connection con) throws SQLException {
close(rs);
close(pst);
close(con);
}
private static void close(Connection con) throws SQLException {
if (con != null) {
con.close();
}
}
private static void close(PreparedStatement pst) throws SQLException {
if (pst != null) {
pst.close();
}
}
private static void close(ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
}
}
3、User.java是从数据库中查询出数据,把相应的数据放进这个对象里。要查询什么列段的值就给这个类对象设置相应的私有属性,并做成标准的OOP对象(属性私有化,无参构造方法,有参构造方法,set、get方法,toString()方法)。
4、BaseDao.java
package com.newer.jdbc01.dao;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.newer.jdbc01.utils.DBAccess;
public class BaseDao<T> {
public List<T> executeQuery(String sql, Class clz) throws Exception {
List<T> list = new ArrayList<T>();
// 建立连接
Connection con = DBAccess.getConnection();
// 预处理sql语句
PreparedStatement pst = con.prepareStatement(sql);
// 执行sql语句
ResultSet rs = pst.executeQuery();
// 处理执行sql的结果
T t;
while (rs.next()) {
// 反射
t = (T) clz.newInstance();
// 获取对象的所有属性
Field[] fields = clz.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
f.set(t, rs.getObject(f.getName()));
f.setAccessible(false);
}
list.add(t);
}
DBAccess.close(rs, pst, con);
return list;
}
}
5、UserDao.java:具体的实现
package com.newer.jdbc01.dao;
import java.util.List;
import com.newer.jdbc01.myEntity.User;
public class UserDao extends BaseDao<User> {
// 定义list()方法
public List<User> list() throws Exception {
// 需要执行的sql语句,以及查询的所属对象
// 返回 调用父类的executeQuery()方法 获得的返回值
return super.executeQuery("select * from t_mysql_employees limit 5", User.class);
}
public static void main(String[] args) throws Exception {
UserDao userDao = new UserDao();
List<User> list = userDao.list();
for (User u : list) {
System.out.println(u);
}
}
}
至 此
JDBC工具类就封装好了~