Java |
您所在的位置:网站首页 › 数据库连接流程包括 › Java |
一、连接mysql数据库
1、启动 MySQL
以管理员身份打开 cmd 命令行,输入 net start mysql 创建一张 user 表,有id、name、password三个字段。 (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=rootJdbcUtils.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 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |