首页IT科技jdbc连接MySQL查询多个内容(JDBC 连接 MySQL)

jdbc连接MySQL查询多个内容(JDBC 连接 MySQL)

时间2025-09-04 22:58:41分类IT科技浏览5300
导读:哈喽~大家好,这次我们来看看 JDBC 如何 连接 MySQL....

哈喽~大家好               ,这次我们来看看 JDBC 如何 连接 MySQL.

目录

一               、开头

二                      、介绍

1       、JDBC 的概念

2       、JDBC 的功能

3                      、JDBC 的常用接口和类

三              、数据库的创建(MySQL)

1       、连接 MySQL 

(1)                      、注册驱动

(2)              、获取连接

(3)、获取执行者连接

(4)                      、执行 SQL 语句                      ,并接受结果

(5)                     、处理结果

(6)、释放资源

四               、对 MySQL 进行增删改查

1                     、准备工作

五       、JDBC 实践操作

1               、根据 id 获取信息

2                      、添加信息

3       、修改信息

4       、删除信息

六                      、代码优化

七              、JSP 连接 MYSQL

1       、查询操作

2                      、增加操作

3              、修改操作

4、删除操作

一                      、开头

       首先如何下载安装 MySQL (链接)       ,如何下载安装 SQLyog (链接)       ,以及怎样下载 mysql-connector-java.jar(链接)                      ,可以看看这三位大佬的              ,这里操作数据库用的是  SQLyog  这款软件               。

       好了之后       ,我们用 idea 创建项目                      ,记得要勾选 Web应用程序                      。

        然后将 mysql-connector-java.jar 放入在 WEB - INF 里面的 lib 里面(如果没有就自己创建一个              ,记得要打包文件)

二                     、介绍

1、JDBC 的概念

        JDBC 是 Java DataBase Connectivity (Java 数据连接)技术的简称,是一种可用于执行 SQL 语句的 Java API       。它由一些 java 语言编写的类和接口组成;程序员通过使用 jdbc 可以方便地将 SQL 语句传送给几乎任何一种数据库       。

2               、JDBC 的功能

(1) 与数据库建立连接                      。

(2) 向数据库发送 SQL 语句并执行这些语句              。

(3) 处理数据返回的结果       。

3                     、JDBC 的常用接口和类

(1) Driver 接口:加载驱动程序                      。 (2) DriverManager 类:装人所需的 JDBC 驱动程序                      ,编程时调用它的方法来创建连接              。 (3) Connection 接口:编程时使用该类对象创建 Statement 对象。 (4) Statement 接口:编程时使用该类对象得到 ResultSet 对象                      。 (5) ResultSet 类:负责保存 Statement 执行后所产生的查询结果                     。

工作原理图

三       、数据库的创建(MySQL)

右击 root@localhost 创建 db1注:基字符集一定要 uft8                     ,别问为什么,本人因为这被折磨了半小时)输入名称 user

 或者用 sql 语句创建

CREATE DATABASE db1; USE db1; CREATE TABLE `user`( `id` INT, `name` VARCHAR(30) ); INSERT INTO `user` VALUES (1,张一),(2,张二),(3,张三),(4,张四),(5,张五);

1               、连接 MySQL 

(1)                      、注册驱动

Class.forName("com.mysql.cj.jdbc.Driver");

(2)       、获取连接

Connection com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456");

(3)       、获取执行者连接

Statement stat = com.createStatement();

(4)                      、执行 SQL 语句               ,并接受结果

String sql = "SELECT * FROM user"; ResultSet rs = stat.executeQuery(sql);

(5)              、处理结果

while (rs.next()){ System.out.println(rs.getInt("id") + "\t" + rs.getString("name")); }

(6)       、释放资源

com.close(); stat.close(); com.close();

代码连接起来

package com.text.jdbc; import java.sql.*; public class jbdc { public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); Connection com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456"); // DriverManager 注册驱动 // Connection 数据库连接对象 url(指定连接的路径 语法:“jdbc:mysql://ip地址:端口号/数据库名称               ”) Statement stat = com.createStatement(); //执行 sql 语句的对象 String sql = "SELECT * FROM user"; ResultSet rs = stat.executeQuery(sql); // 执行 增删改查 (DML)语句用 int executeUpdate(Sting sql); // 执行 DQL 语句 ResultSet executeQuery(String sql); // 对象释放 void close(); while (rs.next()){ System.out.println(rs.getInt("id") + "\t" + rs.getString("name")); } com.close(); stat.close(); com.close(); } }

这里有个小细节                     ,在步骤一中       ,注册驱动那               ,如果忘了驱动名或者敲错了                      ,可以在 lib -> mysql-connector-java.jar -> jdbc -> Driver 里面查看

点击运行       ,控制台读取数据库的数据       ,完成连接。 

四                      、对 MySQL 进行增删改查

1              、准备工作

       首先我们创建好数据库(名为db1)数据表(名为student),并添加好数据 (这是我们的总表)                      ,如图:

       在前面我们用 jdbc 类 打印出所有的数据表信息              ,这里我们换一种方式       ,升级版

       这里我们创建 controller包(里面有 StudentController 类)、dao包(里面有 StudentDao 接口                      、StudentDaoImpl 类)                     、daomian 包(里面有 Student 类)、service 包(里面有 StudentService 接口               、StudentServiceImpl 类)                      ,如图              ,并写入代码:

StudentController 类:

package com.inxzw.domain.controller; import com.inxzw.domain.domain.Student; import com.inxzw.domain.service.StudentService; import com.inxzw.domain.service.StudentServiceImpl; import org.testng.annotations.Test; import java.util.ArrayList; public class StudentController { private StudentService service = new StudentServiceImpl(); @Test public void findAll(){ ArrayList<Student> list = service.findAll(); for (Student stu : list){ System.out.println(stu); } } public void findById(){ } }

 StudentDao 接口:

package com.inxzw.domain.dao; import com.inxzw.domain.domain.Student; import java.util.ArrayList; public interface StudentDao { // 查询所有学生信息 public abstract ArrayList<Student> findAll(); //获取id public abstract Student findById(Integer id); // 新增信息 public abstract int insert(Student stu); // 修改信息 public abstract int update(Student stu); // 删除信息 public abstract int delete(Integer id); } StudentDaoImpl类: package com.inxzw.domain.dao; import com.inxzw.domain.domain.Student; import java.sql.*; import java.util.ArrayList; import java.util.Date; public class StudentDaoImpl implements StudentDao{ @Override public ArrayList<Student> findAll(){ Connection com = null; Statement stat = null; ResultSet rs = null; ArrayList<Student> list = new ArrayList<>(); try { Class.forName("com.mysql.cj.jdbc.Driver"); com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456"); stat = com.createStatement(); String sql = "SELECT * FROM student"; rs = stat.executeQuery(sql); while (rs.next()){ // System.out.println(rs.getInt("id") + "\t" + rs.getString("name")); Integer sid = rs.getInt("sid"); String name = rs.getString("name"); Integer age = rs.getInt("age"); Date birthday = rs.getDate("birthday"); Student stu = new Student(sid,name,age,birthday); list.add(stu); } }catch (Exception e){ e.printStackTrace(); }finally { if (com != null) { try { com.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } return list; } @Override public Student findById(Integer id) { return null; } @Override public int insert(Student stu) { return 0; } @Override public int update(Student stu) { return 0; } @Override public int delete(Integer id) { return 0; } } Student 类: package com.inxzw.domain.domain; import java.util.Date; public class Student { private Integer sid; private String name; private Integer age; private Date birthday; public Student(Integer sid, String name, Integer age, Date birthday) { this.sid = sid; this.name = name; this.age = age; this.birthday = birthday; } public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() {//打印 return "Student{" + "sid=" + sid + ", name=" + name + \ + ", age=" + age + ", birthday=" + birthday + }; } } StudentService 接口: package com.inxzw.domain.service; import com.inxzw.domain.domain.Student; import java.util.ArrayList; public interface StudentService { public abstract ArrayList<Student> findAll(); public abstract Student findById(Integer id); public abstract int insert(String stu); public abstract int update(Student stu); public abstract int delete(Integer id); } StudentServiceImpl 类: package com.inxzw.domain.service; import com.inxzw.domain.dao.StudentDao; import com.inxzw.domain.dao.StudentDaoImpl; import com.inxzw.domain.domain.Student; import java.util.ArrayList; public class StudentServiceImpl implements StudentService{ private StudentDao dao = new StudentDaoImpl(); public ArrayList<Student> findAll(){ return dao.findAll(); } public Student findById(Integer id){ return null; } @Override public int insert(String stu) { return 0; } @Override public int update(Student stu) { return 0; } @Override public int delete(Integer id) { return 0; } }

       在 StudentController 类(控制类) ,运行 findAll()                       ,记得要加 @Text                      ,点击运行               。完成查询所有信息                     。

五                     、JDBC 实践操作

1       、根据 id 获取信息

我们可以通过 id 来获取属性,eg:通过 id 为 5 来查询元组       。代码如下:

StudentDaoImpl 类:

public Student findById(Integer id) { Student stu = new Student(); Connection com = null; Statement stat = null; ResultSet rs = null; ArrayList<Student> list = new ArrayList<>(); try { Class.forName("com.mysql.cj.jdbc.Driver"); com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456"); stat = com.createStatement(); String sql = "SELECT * FROM student WHERE sid = "+id+" "; rs = stat.executeQuery(sql); while (rs.next()){ // System.out.println(rs.getInt("id") + "\t" + rs.getString("name")); Integer sid = rs.getInt("sid"); String name = rs.getString("name"); Integer age = rs.getInt("age"); Date birthday = rs.getDate("birthday"); stu.setSid(sid); stu.setName(name); stu.setAge(age); stu.setBirthday(birthday); } }catch (Exception e){ e.printStackTrace(); }finally { if (com != null) { try { com.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } return stu; } StudentServiceImpl 类: public Student findById(Integer id){ return dao.findById(id); } StudentController 类: public void findById(){ Student stu = service.findById(4);//查询3号记录 System.out.println(stu); }

        点击运行               ,完成查询               。

2               、添加信息

StudentDaoImpl 类:

@Override public int insert(Student stu) { Connection com = null; Statement stat = null; int result = 0; try { Class.forName("com.mysql.cj.jdbc.Driver"); com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456"); stat = com.createStatement(); Date d = stu.getBirthday(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String birthday = sdf.format(d); String sql = "INSERT INTO student VALUES ("+stu.getSid()+","+stu.getName()+","+stu.getAge()+","+birthday+")"; result = stat.executeUpdate(sql); }catch (Exception e){ e.printStackTrace(); }finally { if (com != null) { try { com.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } return result; }

StudentServiceImpl 类:

public int insert(Student stu) { return dao.insert(stu); } StudentController 类: public void insert(){ Student stu = new Student(9, "张九", 29, new Date()); int result = service.insert(stu); if (result != 0){ System.out.println("添加成功"); }else { System.out.println("添加失败"); } }

         点击运行                     ,显示出添加成功       ,我们用 findAll() 来查看表信息               ,完成添加                      。

3                      、修改信息

StudentDaoImpl 类:

public int update(Student stu) { Connection com = null; Statement stat = null; int result = 0; try { Class.forName("com.mysql.cj.jdbc.Driver"); com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456"); stat = com.createStatement(); Date d = stu.getBirthday(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String birthday = sdf.format(d); String sql = "UPDATE student SET sid = "+stu.getSid()+", name = "+stu.getName()+", age = "+stu.getAge()+",birthday = "+birthday+" WHERE sid = "+stu.getSid()+""; result = stat.executeUpdate(sql); }catch (Exception e){ e.printStackTrace(); }finally { if (com != null) { try { com.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } return result; }

StudentServiceImpl 类:

public int update(Student stu) { return dao.update(stu); }

StudentController 类:

@Test public void update(){ Student stu = service.findById(5); stu.setName("张五点五"); int result = service.update(stu); if (result != 0){ System.out.println("修改成功"); }else { System.out.println("修改失败"); } }

        点击运行                      ,显示出修改成功       ,我们用 findAll() 来查看表信息       ,完成修改       。

4       、删除信息

StudentDaoImpl 类:

public int delete(Integer id) { Connection com = null; Statement stat = null; int result = 0; try { Class.forName("com.mysql.cj.jdbc.Driver"); com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456"); stat = com.createStatement(); String sql = "DELETE FROM student WHERE sid = "+id+""; result = stat.executeUpdate(sql); }catch (Exception e){ e.printStackTrace(); }finally { if (com != null) { try { com.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } return result; }

StudentServiceImpl 类:

public int delete(Integer id) { return dao.delete(id); }

StudentController 类:

@Test public void delete(){ int result = service.delete(5); if (result != 0){ System.out.println("删除成功"); }else { System.out.println("删除失败"); } }

       点击运行                      ,显示出删除成功              ,我们用 findAll() 来查看表信息       ,完成删除(我们删除了张五点五那一行信息)       。

六       、代码优化

       在这里我们完成了对数据表进行了增删改查操作                      ,最后来看 StudentDaoImpl 类中发现我们已经写了 300 多行代码              ,而且我们还写了,非常多的重复代码                      ,效率非常的底                     ,所以为了减少代码量,这里我们需要优化                      。

       我们创建一个新的包名叫 utils                ,新建类 JDBCutils                     ,然后创建配置文件 config.properties

           在 JDBCutils 类里面:“构造私有方法                      、声明所需要的配置变量              、注册驱动       、获取数据库连接方法                      、释放资源方法                      ”        ,代码如下:

private JDBCutils(){} // 声明所需要的配置变量 private static String driverClass; private static String url; private static String username; private static String password; private static Connection con; //提供静态代码块               ,读取配置文件信息为变量赋值                      ,注册驱动 static { try { InputStream is = JDBCutils.class.getClassLoader().getResourceAsStream("config.properties"); Properties prop = new Properties(); prop.load(is); driverClass = prop.getProperty("driverClass"); url = prop.getProperty("url"); username = prop.getProperty("username"); password = prop.getProperty("password"); } catch (IOException e) { e.printStackTrace(); } } // 获取数据库连接方法 public static Connection getConecction(){ try { con = DriverManager.getConnection(url,username,password); } catch (SQLException e) { e.printStackTrace(); } return con; } //释放资源方法 public static void close(Connection con, Statement stat, ResultSet rs){ if (con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null){ try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection con, Statement stat){ if (con != null){ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

 config.properties :

driverClass = com.mysql.cj.jdbc.Driver url = jdbc:mysql://10.16.158.90:3306/db1 username = root password = 123456

我们已经创建好了准备工作       ,下面来看看 findAll() 是如何优化的

首先       ,这两步是可以替换掉的

之前:

Class.forName("com.mysql.cj.jdbc.Driver"); com = DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456");

 之后:

com = JDBCutils.getConecction();

之前:

if (com != null) { try { com.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } }

 之后:

JDBCutils.close(com, stat, rs);

 现在看是不是感觉很爽?是不是省去了很多代码?点击运行                      ,看看是否能跑起来              。

 ok              ,运行没问题       ,优化成功       。

然后                      ,findById()              、insert()、update()                      、delete() 方法操作都一样              ,这里就不一一显示了                      。

七                     、JSP 连接 MYSQL

首先,我们还是这张 student 这张表                      ,对这张表进行增删改查操作              。

1、查询操作

我们要查询所有信息                     ,其实方法都差不多,和上面的 MYSQL 的那 5 步是一样的               ,所以这里就不一一再次讲解了                     ,直接看代码。

<%@ page language="java" import="java.sql.Connection" contentType="text/html; charset=UTF-8" pageEncoding="GB18030"%> <%@ page import="java.sql.*" %> <%@ page import="java.util.Date" %> <!DOCTYPE html> <html> <head> <title>JSP 读取数据库</title> </head> <body> <table border="1" align="center"> <% String driverClass="com.mysql.jdbc.Driver"; String url="jdbc:mysql://localhost/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"; String user="root"; String password="123456"; Connection conn; try{ Class.forName(driverClass); conn=DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); // 查询所有信息 String sql = "select * from student"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ Integer id = rs.getInt("id"); String name = rs.getString("name"); Integer age = rs.getInt("age"); Date birthday = rs.getDate("birthday"); out.println(id + "&nbsp;&nbsp;" + name + "&nbsp;&nbsp;" + age + "&nbsp;&nbsp;" + birthday + "<br>"); } }catch (Exception ex){ ex.printStackTrace(); } %> </table> </body> </html>

 注意:这里有一个小细节       ,在mysql 6.0版本之上必须配置的操作!properties配置文件内               ,单独写上url的地址是不对的                      ,需要在url文本末尾加上  ?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC  这句话                      。一定要加上       ,本人 Debug 了一个多小时       ,千万别被 java 语法迷惑了                      ,一定要加上!!!

2               、增加操作

我们先看代码

<%@ page language="java" import="java.sql.Connection" contentType="text/html; charset=UTF-8" pageEncoding="GB18030"%> <%@ page import="java.sql.*" %> <%@ page import="java.util.Date" %> <!DOCTYPE html> <html> <head> <title>JSP 读取数据库</title> </head> <body> <table border="1" align="center"> <% String driverClass="com.mysql.jdbc.Driver"; String url="jdbc:mysql://localhost/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"; String user="root"; String password="123456"; Connection conn; try{ Class.forName(driverClass); conn=DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql = "insert into student(id,name,age,birthday) VALUES (10,张十,23,2000-12-23)"; int rs = stmt.executeUpdate(sql); if(rs == 0 ){ out.print("增加失败"); }else { out.print("增加成功"); } }catch (Exception ex){ ex.printStackTrace(); } %> </table> </body> </html>

 注意这里还有个细节(细节都是头发换来的              ,呜呜呜)       ,我们服务器启动完成之后                      ,这里一定要在浏览器执行一下              ,否则的话,对数据库没有任何操作                     。一定要记住!!!

刷新数据库                      ,查看效果

3                     、修改操作

这里我们要把  “张十       ” 的 id 改为 12                     ,那么对应的语句是   UPDATE student SET id = 12 where name=张十,我们看下代码

<%@ page language="java" import="java.sql.Connection" contentType="text/html; charset=UTF-8" pageEncoding="GB18030"%> <%@ page import="java.sql.*" %> <%@ page import="java.util.Date" %> <!DOCTYPE html> <html> <head> <title>JSP 读取数据库</title> </head> <body> <table border="1" align="center"> <% String driverClass="com.mysql.jdbc.Driver"; String url="jdbc:mysql://localhost/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"; String user="root"; String password="123456"; Connection conn; try{ Class.forName(driverClass); conn=DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql="UPDATE student SET id = 12 where name=张十"; int rs = stmt.executeUpdate(sql); if(rs == 0 ){ out.print("修改失败"); }else { out.print("修改成功"); } }catch (Exception ex){ ex.printStackTrace(); } %> </table> </body> </html>

点击运行               ,记得在浏览器运行一次                     ,ok       ,完成修改

效果如下

 4       、删除操作

我们将 id 为 12的条件删除掉               ,这里同样先给出语句   "DELETE FROM student WHERE id=12"

先来看代码

<%@ page language="java" import="java.sql.Connection" contentType="text/html; charset=UTF-8" pageEncoding="GB18030"%> <%@ page import="java.sql.*" %> <%@ page import="java.util.Date" %> <!DOCTYPE html> <html> <head> <title>JSP 读取数据库</title> </head> <body> <table border="1" align="center"> <% String driverClass="com.mysql.jdbc.Driver"; String url="jdbc:mysql://localhost/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"; String user="root"; String password="123456"; Connection conn; try{ Class.forName(driverClass); conn=DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String sql="DELETE FROM student WHERE id=12"; int rs = stmt.executeUpdate(sql); if(rs == 0 ){ out.print("删除失败"); }else { out.print("删除成功"); } }catch (Exception ex){ ex.printStackTrace(); } %> </table> </body> </html>

这里浏览器显示删除成功 

刷新来看下效果

小结:大家在 StudentDaoImpl 类中有一个小细节                      ,在 DriverManager.getConnection 中设置(“jdbc:mysql://ip地址:端口号/数据库名称       ”)ip 地址这里       ,在换地方写代码时       ,一定要记得改                      ,我debug 了一小时才发现              ,我一直在想为什么上午下午在图书馆里面有用       ,晚上在寝室就没用了?血淋淋的痛啊~ 亲们                      ,一定要记得改!

(求关注)持续更新中……

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
鸿蒙系统怎么给小艺改名字(鸿蒙系统小艺怎么改声音?鸿蒙系统小艺更改声音教程)