Java

您所在的位置:网站首页 数据库连接流程包括 Java

Java

2024-07-17 14:09:22| 来源: 网络整理| 查看: 265

一、连接mysql数据库         1、启动 MySQL

                以管理员身份打开 cmd 命令行,输入 net start mysql

        2、MySQL 创建表

                创建一张 user 表,有id、name、password三个字段。

        3、导入jar包

                (1) 创建新项目,在项目下创建lib包,用于存放所需要的jar包

                 (2) 拷贝 mysql 驱动包 mysql-connector-j-8.0.31.jar 到 lib 目录下。

                        右键jar包,点击 添加为库。

         添加后 jar 包旁出现一个小三角,可以点开查看里面的内容,此时导入成功。

mysql 驱动 jar 包下载:

        官网:https://dev.mysql.com/downloads/

        CSDN:mysql-connector-j-8.0.31-Java文档类资源-CSDN文库

        4、创建类 Demo01.java         5、注册驱动 Class.forName("com.mysql.cj.jdbc.Driver");         6、获取数据库连接对象 方法1: private static final String URL = "jdbc:mysql://localhost:3306/db1"; private static final String USER = "root"; private static final String PASSWORD = "root"; ... ... Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); 方法2: Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=root"); 方法3: Properties p = new Properties(); p.setProperty("user","root"); p.setProperty("password","root") Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", p);

【注意】需要填写3个参数,分别是数据库连接URL、用户名、密码,需要填写你自己的。

                 其中URL的构成:

jdbc:mysql:// localhost:3306 / db1 协议 IP地址 端口 要连接的数据库名称         7、获取执行SQL语句的对象 Statement stat = conn.createStatement();         8、执行SQL语句         增删改:executeUpdate stat.executeUpdate("insert into user value(1,'admin','root')"); stat.executeUpdate("update user set name = 'sunny' where id = 1"); stat.executeUpdate("delete from user where id = 1");         查:executeQuery ResultSet rs = stat.executeQuery("select * from user"); while (rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String password = rs.getString("password"); System.out.println("id="+id+",name="+name+",password="+password); }

         方法解析:

rs.next —— 判断结果集是否有下一条记录,返回boolean类型。rs.getInt  —— 可以传入String或者int类型的参数,String类型的参数为数据表的对应列名,int类型的参数则为数据表的对应列数,推荐传入String类型。返回int类型的数据。rs. getString  —— 可以传入String或者int类型的参数,String类型的参数为数据表的对应列名,int类型的参数则为数据表的对应列数,推荐传入String类型。返回String类型的数据。       9、释放连接 rs.close(); stat.close(); conn.close();

        完整代码:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Demo01 { private static final String URL = "jdbc:mysql://localhost:3306/db1"; private static final String USER = "root"; private static final String PASSWORD = "root"; public static void main(String[] args) throws Exception { // 注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 获取数据库连接对象 // 方法1 Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); // 方法2 /*Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=root");*/ // 方法3 /* Properties p = new Properties(); p.setProperty("user","root"); p.setProperty("password","root") Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", p); */ // 获取执行SQL语句的对象 Statement stat = conn.createStatement(); // 执行SQL语句 stat.executeUpdate("insert into user value(1,'admin','root')"); stat.executeUpdate("update user set name = 'sunny' where id = 1"); stat.executeUpdate("delete from user where id = 1"); ResultSet rs = stat.executeQuery("select * from user"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String password = rs.getString("password"); System.out.println("id=" + id + ",name=" + name + ",password=" + password); } // 释放连接 rs.close(); stat.close(); conn.close(); } }

二、编写使用工具类

        观察上面的代码我们可以发现,除了执行SQL的语句有所不同外,其他代码的格式基本上都是固定的。我们可以编写一个工具类,提供 获取数据库连接对象、关闭数据库相关资源 等相关方法。

        1、编写工具类 JdbcUtils.java

        创建 Utils 文件夹,将代码相关的工具类都放到里面。编写JdbcUtils.java,代码首先运行静态代码块类的语句,获得数据库连接对象。

import java.sql.*; public class JdbcUtils { private static final String driver = "com.mysql.cj.jdbc.Driver"; private static final String url = "jdbc:mysql://localhost:3306/db1"; private static final String name = "root"; private static final String password = "root"; private static final Connection conn; static { try { Class.forName(driver); conn = DriverManager.getConnection(url, name, password); } catch (ClassNotFoundException | SQLException e) { throw new RuntimeException(e); } } /** * 获取数据库连接对象 * @return 数据库连接对象 */ public static Connection getConnect() { return conn; } /** * 关闭数据库相关资源 * @param conn 数据库连接对象 * @param ps sql语句执行对象 * @param rs 查询结果集 */ public static void close(Connection conn, PreparedStatement ps, ResultSet rs) { try { if (conn != null) conn.close(); if (ps != null) ps.close(); if (rs != null) rs.close(); } catch (SQLException e) { throw new RuntimeException(e); } } /** * 关闭数据库相关资源 * @param conn 数据库连接对象 * @param ps sql语句执行对象 */ public static void close(Connection conn, PreparedStatement ps) { close(conn, ps, null); } /** * 关闭数据库相关资源 * @param conn 数据库连接对象 * @param rs 查询结果集 */ public static void close(Connection conn, ResultSet rs) { close(conn, null, rs); } }         2、解耦代码

        分析工具类,可以发现关于数据库连接的相关参数,如 driver、url、user、password 等均写在代码中,程序的耦合性较高。可以将变量写在 .properties文件中,程序通过读取文件的方式获得相关信息。

        首先创建 jdbc.properties 资源包,以 “ 键=值 ” 的形式写入相关参数。

          jdbc.properties

driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/db1 name=root password=root

        JdbcUtils.java

import java.io.IOException; import java.sql.*; import java.util.Properties; public class JdbcUtils { private static final String driver; private static final String url; private static final String name; private static final String password; static { try { Properties p = new Properties(); p.load(JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties")); driver = p.getProperty("driver"); url = p.getProperty("url"); name = p.getProperty("name"); password = p.getProperty("password"); Class.forName(driver); } catch (ClassNotFoundException | IOException e) { throw new RuntimeException(e); } } /** * 获取数据库连接对象 * @return 数据库连接对象 * @throws Exception 获取失败 */ public static Connection getConnect() throws Exception { return DriverManager.getConnection(url, name, password); } /** * 关闭数据库相关资源 * @param conn 数据库连接对象 * @param ps sql语句执行对象 * @param rs 查询结果集 */ public static void close(Connection conn, PreparedStatement ps, ResultSet rs) { try { if (conn != null) conn.close(); if (ps != null) ps.close(); if (rs != null) rs.close(); } catch (SQLException e) { throw new RuntimeException(e); } } /** * 关闭数据库相关资源 * @param conn 数据库连接对象 * @param ps sql语句执行对象 */ public static void close(Connection conn, PreparedStatement ps) { close(conn, ps, null); } /** * 关闭数据库相关资源 * @param conn 数据库连接对象 * @param rs 查询结果集 */ public static void close(Connection conn, ResultSet rs) { close(conn, null, rs); } }        3、使用工具类 import Utils.JdbcUtils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class JdbcUtilsDemo { public static void main(String[] args) throws Exception { query(); } public static void query() throws Exception { Connection conn = JdbcUtils.getConnect(); Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery("select * from user"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); String password = rs.getString("password"); System.out.println("id=" + id + ",name=" + name + ",password=" + password); } JdbcUtils.close(conn, rs); } }

三、使用数据库连接池

        数据库连接池是存储数据库连接对象的容器,你可以想象成一个已经提前 装好数个连接对象的池子。当你需要 连接对象 时,可以直接从池子获取,用完归还即可。这样当程序在运行的时候,不用自己去创建数据库连接对象,从而提高了运行效率。常用的JDBC连接池有C3P0、Druid。

        1、简单的数据库连接池

        编写一个简陋的 数据库连接池,用于理解原理。

import Utils.JdbcUtils; import java.sql.Connection; import java.util.LinkedList; public class SimpleConnectPool { private static LinkedList pool = new LinkedList(); static { try { for (int i = 1; i 0){ return pool.removeFirst(); } throw new RuntimeException("数据库连接池中 对象已用完"); } // 提供 归还数据库连接对象 的方法(pool添加) public static void close(Connection conn){ pool.addLast(conn); } }

        使用该连接池

import java.sql.Connection; public class SimpleConnectPoolDemo { public static void main(String[] args) { for (int i = 1; i


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭