一、学习准备
Eclipse 开发工具 + mysql数据库+navicat 数据库连接工具
Mysql的数据库连接驱动jar包 + testing测试集成+maven工具集成
Jar的获取方法:
1、直接下载需要的jar,导入项目中使用。
2、在maven工程中加入依赖:本文使用的maven依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.0</version> </dependency>
二、JDBC简单实用步骤:
Jdbc连接数据库操作,主要分为三个步骤:本文以mysql为例操作说明:
2.1加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
2.2获取数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
2.3对数据库的表结构进行CURD操作
三、JDBC增、删、改、查
3.1 通过navicat 连接本地mysql 创建user表结构:
3.2 建立相关的类来实现jdbc的crud的操作
3.1.1 模型类User
User类用于和数据库user表映射,方便CURD的实时操作。
/** * */ package com.lilin.maven.service.jdbc; /** * @author lilin * */ public class User { private Integer id; /** * 用户名称 */ private String name; /** * 用户密码 */ private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String toString() { return "user 的名称是" + name + " user的密码是:" + password; } }
3.1.2 工具类JdbcUtil
工具类主要定义了数据库连接的相关属性:URL 、USER、PASSWORD
工具类在静态块中获取了数据库的连接,存放于私有CONN中,同时对外提供了访问连接的公共方法:getConnection
/** * */ package com.lilin.maven.service.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * @author lilin * */ public class JdbcUtil { public static final String URL = "jdbc:mysql://127.0.0.1:3306/test"; public static final String USER = "root"; public static final String PASSWORD = "1"; private static Connection conn = null; /** * 静态块 获取数据库的连接 */ static { try { // 1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 2.获取数据库连接 conn = DriverManager.getConnection(URL, USER, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /** * 提供获取连接的调用方法 * * @return */ public static Connection getConnection() { return conn; } }
3.1.3 逻辑层类UserService
UserService类,主要是通过调用工具类,获取数据库连接,然后使用连接,配合好编写的sql语句,来对数据库中的user表来进行CURD操作,包含了一系列的常用的处理。
/** * */ package com.lilin.maven.service.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; /** * @author lilin * */ public class UserService { private Connection connection = JdbcUtil.getConnection(); /** * 新增用户信息 * * @param user * @throws Exception */ public void addUser(User user) throws Exception { String sql = " insert into user(NAME,PASS_WORD)values(?,?)"; // 预编译sql语句 在excute的时候真正执行 PreparedStatement ptmt = connection.prepareStatement(sql); // 传递参数 补充完整的sql ptmt.setString(1, user.getName()); ptmt.setString(2, user.getPassword()); ptmt.execute(); } /** * 删除用户信息 * * @param user * @throws Exception */ public void deleteUser(Integer id) throws Exception { String sql = " delete from user where ID=?"; // 预编译sql语句 在excute的时候真正执行 PreparedStatement ptmt = connection.prepareStatement(sql); // 传递参数 补充完整的sql ptmt.setInt(1, id); ptmt.execute(); } /** * 更新用户信息 * * @param user * @throws Exception */ public void updateUser(User user) throws Exception { String sql = " update user set NAME=? ,PASS_WORD=? where ID=?"; // 预编译sql语句 在excute的时候真正执行 PreparedStatement ptmt = connection.prepareStatement(sql); // 传递参数 补充完整的sql ptmt.setInt(3, user.getId()); ptmt.setString(1, user.getName()); ptmt.setString(2, user.getPassword()); ptmt.execute(); } /** * 查询单个用户信息 * * @param user * @throws Exception */ public User getUserByName(String name) throws Exception { String sql = " select * from user where NAME=?"; // 预编译sql语句 在excute的时候真正执行 PreparedStatement ptmt = connection.prepareStatement(sql); // 传递参数 补充完整的sql ptmt.setString(1, name); ResultSet resultSet = ptmt.executeQuery(); User user = null; while (resultSet.next()) { user = new User(); user.setId(resultSet.getInt("ID")); user.setName(resultSet.getString("NAME")); user.setPassword(resultSet.getString("PASS_WORD")); } return user; } /** * 查询所有的用户信息 * * @return * @throws Exception */ public List<User> getUsers() throws Exception { // 3.操作数据库 实现增删改查 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select * from user"); List<User> list = new ArrayList<User>(); User user = null; while (resultSet.next()) { user = new User(); String name = resultSet.getString("NAME"); String passWord = resultSet.getString("PASS_WORD"); user.setName(name); user.setPassword(passWord); list.add(user); } return list; } }
3.1.4 testNG测试类 jdbctest
JdbcTest中,实现了多个测试方法,userserice中的CURD的方法,全部有对应的测试function:通过运行测试方法,以及配合使用navicat实时查询数据库的user表的数据的实时变化,以便于验证JDBC对于mysql的数据库操作的正确性。
/** * */ package com.lilin.maven.service.jdbc; import java.util.List; import java.util.Scanner; import org.testng.annotations.Test; /** * @author lilin * */ public class JdbcTest { private UserService userService = new UserService(); @Test public void testGetUsers() throws Exception { List<User> users = userService.getUsers(); for (User user : users) { System.out.println(user); } } @Test public void testAddUser() throws Exception { User user = new User(); user.setName("李林"); user.setPassword("12345"); userService.addUser(user); } @Test public void testUpdateUser() throws Exception { User user = new User(); user.setId(1); user.setName("bb"); user.setPassword("12345"); userService.updateUser(user); } @Test public void testDeleteUser() throws Exception { userService.deleteUser(4); } @Test public void testgetUserByName() throws Exception { User user = userService.getUserByName("bb"); System.out.println(user); } }