JDBC-第1篇-基础

话不多说,直接开撸代码。

1.首先自己的环境使用的是maven项目+idea工具+mysql8.0.18 (使用maven项目的好处就是方便,不用手动导入相关的驱动包,在pom.xml配置即可)

2.第一步:在pom中导入mysql的驱动包(这里注意跟mysql的版本,导入驱动包的版本也不一样,我是用的是8.0.18版本,需要导入5.1.48版本

1 <!--jdbc驱动包-->
2 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
3 <dependency>
4    <groupId>mysql</groupId>
5    <artifactId>mysql-connector-java</artifactId>
6    <version>5.1.48</version>
7 </dependency>

3.第二步:建立一个TestDriver.java来写测试用例(结论写在代码里面)

  3.1 通过Diriver实现类对象获取连接

 1   /**
 2      * 注意:我这里是maven项目。通过Diriver实现类对象获取连接。
 3      * 1.首先引入jdbc的驱动jar包,我本地用的是mysql8版本。导入mysql-connector-java,版本为5.1.48+
 4      * 2.然后创建一个Diriver实现类的对象
 5      * 3.准备连接数据基本信息
 6      * 4.调用Driver接口的connect方法,连接数据库
 7      *
 8      * @throws SQLException
 9      */
10     @Test
11     public void testDriver1() throws SQLException {
12         //1.创建一个Diriver实现类的对象
13         Driver driver = new Driver();
14 
15         //2.准备连接数据基本信息
16         String url = "jdbc:mysql://localhost:3306/test";
17         Properties properties = new Properties();
18         properties.put("user", "root");
19         properties.put("password", "root");
20 
21         //3.调用Driver接口的connect连接数据库
22         Connection connect = driver.connect(url, properties);
23         System.out.println(connect);
24     }

    3.2 在前面的基础上,将数据库基本信息写成jdbc.properties配置文件,进行读取(配置文件需要放在根目录下进行读取

/**
     *
     * 1.首先引入jdbc的驱动jar包,我本地用的是mysql8版本。导入mysql-connector-java为5.1.48
     * 2.创建一个jdbc.properties文件
     * 3.定义一个方法读取jdbc.properties文件,并在该方法创建连接
     * 4.调用方法,返回Driver接口的connect连接数据库
     *
     * @throws Exception
     */
    @Test
    public void testDriver2() throws Exception {
        Connection connection = getConnection();
        System.out.println(connection);
    }

    /**
     * 1.把配置连接放入到一个jdbc.properties文件中,然后统一读取。解耦合
     * 2.读取properties文件中的连接信息
     * 3.创建连接
     *
     * @return
     */
    public Connection getConnection() throws Exception, ClassNotFoundException, IllegalAccessException, InstantiationException {
        //1.首先定义本地变量
        String driverClass = null;
        String jdbcUrl1 = null;
        String user = null;
        String password = null;

        //2.读取类路径下的jdbc.properties,此配置文件需要放置到resources文件夹下。
        InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(resourceAsStream);

        //3.分别获取配置对象的值
        driverClass = properties.getProperty("driver");
        jdbcUrl1 = properties.getProperty("jdbcUrl");
        user = properties.getProperty("user");
        password = properties.getProperty("password");

        //4.通过反射拿到Driver连接对象
        Driver driver = (Driver) Class.forName(driverClass).newInstance();

        Properties info = new Properties();
        info.put("user", user);
        info.put("password", password);

        //获取连接
        Connection connect = driver.connect(jdbcUrl1, info);
        return connect;
    }

   3.3  通过DriverManager驱动的管理类来获取Connection对象,从而实现连接数据库

 1 /**
 2      * DriverManager是驱动的而管理类
 3      * 好处:
 4      * 1.通过 DriverManager,可以重载getConnection()方法获取数据库连接,较为方便
 5      * 2.可以同时管理多个驱动程序:若注册了多个数据库连接,则调用getConnection()方法时,传入的参数不同,即返回的连接不同。
 6      * <p>
 7      * 可以通过单独封装成一个方法,从jdbc.properties中进行读取
 8      */
 9     @Test
10     public void testDriverManager3() throws Exception {
11 
12         //1.准备连接数据库的4个连接信息(mysql配置信息)
13         String driverClass = "com.mysql.jdbc.Driver";
14         String jdbcUrl1 = "jdbc:mysql://localhost:3306";
15         String user = "root";
16         String password = "root";
17 
18         //1.准备连接数据库的4个连接信息(假设是oracle的配置信息,模拟用,其实还是mysql的。)
19         String driverClass2 = "com.mysql.jdbc.Driver";
20         String jdbcUrl2 = "jdbc:mysql://localhost:3306";
21         String user2 = "root";
22         String password2 = "root";
23 
24         //加载数据库驱动
25         //这里使用Class.forName方法直接注册驱动,因为对应的Driver中有注册驱动的静态代码快
26         //DriverManager.registerDriver((java.sql.Driver) Class.forName(driverClass).newInstance());
27         //注册mysql的驱动
28         Class.forName(driverClass);
29         //注册oracle的驱动
30         Class.forName(driverClass2);
31 
32         //得到mysql的连接
33         Connection connection = DriverManager.getConnection(jdbcUrl1, user, password);
34 
35         //得到oracle的连接
36         Connection connection2 = DriverManager.getConnection(jdbcUrl2, user2, password2);
37 
38         System.out.println(connection);
39         System.out.println(connection2);
40     }

  3.4 在上面创建了连接后,下面就是,通过jdbc想指定数据表中插入一条记录:

 1 /**
 2      * 在上面创建了连接后,下面就是:
 3      * 通过jdbc想指定数据表中插入一条记录
 4      * 1.Connection和Statement都是应用程序和数据库服务器的连接资源,使用后需要关闭
 5      * 2.需要注意在出现异常的情况下,来进行try catch来进行关闭
 6      * 3.executeUpdate中可以为insert,update,delete。但是不能为select
 7      * 4.关闭的顺序是,先获取的后关闭,先关闭Statement,后关闭Connection
 8      */
 9     @Test
10     public void testStatement4() throws Exception {
11         //1.获取数据库连接
12         Connection connection = null;
13 
14         Statement statement = null;
15 
16         connection = getConnection();
17 
18         try {
19             //2.准备插入的sql预计
20             //插入插座
21             //String sql = " insert into customers (name,email,brith) values (11,222,'2019-10-23')";
22             //删除操作
23             //String sql = " delete from customers where id =3";
24             //更新操作
25             String sql = " update customers set name ='罗杰', email='117@qq/com' ,brith='1995-05-21' where id=6";
26 
27             //3.执行插入,添加,删除
28             //3.1获取操作sql语句的Statement对象,调用Connection的createStatement()方法来获取
29             statement = connection.createStatement();
30             //3.2调用Statement对象的executeUpdate(sql)执行sql语句进行插入
31             int i = statement.executeUpdate(sql);
32             System.out.println("执行结果返回值:"+i);
33         } catch (SQLException e) {
34             e.printStackTrace();
35         } finally {
36             //4.关闭Statement对象
37             if (statement != null) {
38                 try {
39                     statement.close();
40                 } catch (SQLException e) {
41                     e.printStackTrace();
42                 }
43             }
44             //5.关闭连接
45             if (connection != null) {
46                 try {
47                     connection.close();
48                 } catch (SQLException e) {
49                     e.printStackTrace();
50                 }
51             }
52         }
53     }

  3.5 在上一个基础上,封装了一个JdbcTools方法,通过工具类来进行获取链接和关闭来链接

 1 /**
 2      * 在上一个基础上,封装了一个JdbcTools方法,通过工具类来进行获取链接和关闭来链接
 3      * @throws Exception
 4      */
 5     @Test
 6     public void testStatementUseTools5() throws Exception{
 7         //1.通过工具类获取jdbc连接
 8         Connection connection = JdbcTools.getConnection();
 9         //2.创建Statement对象
10         Statement statement = connection.createStatement();
11         try {
12             //2.准备插入的sql预计
13             //插入插座
14             //String sql = " insert into customers (name,email,brith) values (11,222,'2019-10-23')";
15             //删除操作
16             //String sql = " delete from customers where id =3";
17             //更新操作
18             String sql = " update customers set name ='小黑', email='117@qq/com' ,brith='1995-05-21' where id=6";
19 
20             //3.执行插入,添加,删除
21             //3.1获取操作sql语句的Statement对象,调用Connection的createStatement()方法来获取
22             //3.2调用Statement对象的executeUpdate(sql)执行sql语句进行插入
23             int i = statement.executeUpdate(sql);
24             System.out.println(i);
25         } catch (SQLException e) {
26             e.printStackTrace();
27         } finally {
28            JdbcTools.release(connection,statement);
29         }
30 
31     }

工具类代码如下:

  1 package testhutool.jdbc;
  2 
  3 import com.mysql.jdbc.Driver;
  4 
  5 import java.io.InputStream;
  6 import java.sql.Connection;
  7 import java.sql.ResultSet;
  8 import java.sql.SQLException;
  9 import java.sql.Statement;
 10 import java.util.Properties;
 11 
 12 /**
 13  * jdbc的工具方法
 14  */
 15 public class JdbcTools {
 16     /**
 17      * 1.获取连接的公共方法
 18      * 通过读取配置文件,获取连接
 19      *
 20      * @return
 21      * @throws Exception
 22      * @throws ClassNotFoundException
 23      * @throws IllegalAccessException
 24      * @throws InstantiationException
 25      */
 26     public static Connection getConnection() throws Exception, ClassNotFoundException, IllegalAccessException, InstantiationException {
 27         //首先定义本地变量
 28         String driverClass = null;
 29         String jdbcUrl1 = null;
 30         String user = null;
 31         String password = null;
 32 
 33         //读取类路径下的jdbc.properties,此配置文件需要放置到resources文件夹下。
 34         InputStream resourceAsStream = Class.forName("testhutool.jdbc.JdbcTools").getClassLoader().getResourceAsStream("jdbc.properties");
 35         Properties properties = new Properties();
 36         properties.load(resourceAsStream);
 37 
 38         //分别获取配置对象的值
 39         driverClass = properties.getProperty("driver");
 40         jdbcUrl1 = properties.getProperty("jdbcUrl");
 41         user = properties.getProperty("user");
 42         password = properties.getProperty("password");
 43 
 44         //通过反射拿到Driver连接对象
 45         Driver driver = (Driver) Class.forName(driverClass).newInstance();
 46 
 47         Properties info = new Properties();
 48         info.put("user", user);
 49         info.put("password", password);
 50 
 51         //获取连接
 52         Connection connect = driver.connect(jdbcUrl1, info);
 53 
 54         return connect;
 55 
 56     }
 57 
 58 
 59     /**
 60      * 关闭连接资源
 61      * @param connection
 62      * @param statement
 63      */
 64     public static void release(Connection connection, Statement statement) {
 65         release(null,connection,statement);
 66     }
 67 
 68 
 69     /**
 70      * 关闭连接资源
 71      * @param resultSet 结果集
 72      * @param connection 数据库连接对象
 73      * @param statement
 74      */
 75     public static void release(ResultSet resultSet,Connection connection, Statement statement) {
 76 
 77         //3.关闭resultSet对象
 78         if (resultSet != null) {
 79             try {
 80                 statement.close();
 81             } catch (SQLException e) {
 82                 e.printStackTrace();
 83             }
 84         }
 85 
 86         //4.关闭Statement对象
 87         if (statement != null) {
 88             try {
 89                 statement.close();
 90             } catch (SQLException e) {
 91                 e.printStackTrace();
 92             }
 93         }
 94         //5.关闭连接
 95         if (connection != null) {
 96             try {
 97                 connection.close();
 98             } catch (SQLException e) {
 99                 e.printStackTrace();
100             }
101         }
102 
103 
104     }
105 }

3.6 最后就是通过RecordSet获取结果集,分别遍历获取结果:

 1 /**
 2      * ResultSet来获取结果集,封装了使用jdnc进行查询的结果
 3      * 1.调用了Statement对象的executeQuery(sql),可以得到结果集
 4      * 2.ResultSet返回的实际上是一张数据表,有一个指针指向数据表的第一行的前面
 5      * 可以调用next()方法。来检测下一行是否有效,如果该方法有效,且指针下移,相当于Iterator对象的hasNext和next的结合体
 6      * 3.当指针到下一行的时候,可以通过gteXxx(index)或者getXxx(columnName)获取每一列的值。
 7      * 4.ResultSet当然也需要进行关闭
 8      */
 9     @Test
10     public void  testResultSet6() throws Exception{
11 
12         //获取id=6的customers的数据表数据,并打印
13         Connection connection = null;
14         Statement statement = null;
15         ResultSet resultSet = null;
16 
17         //1.获取连接Connection
18         connection = JdbcTools.getConnection();
19         //2.获取Statement
20         statement = connection.createStatement();
21         //3.准备SQL
22         String sql = "select * from customers";
23         //4.执行查询。得到ResultSet结果集
24         resultSet = statement.executeQuery(sql);
25         //5.处理ResultSet
26         while(resultSet.next()){
27 
28             int id = resultSet.getInt(1);
29             String name = resultSet.getString("name");
30             String email = resultSet.getString("email");
31             Date brith = resultSet.getDate("brith");
32             String brith1 = resultSet.getString("brith");
33             System.out.println("id:"+id+",name:"+name+",email:"+email+",brith:"+brith+",brith1:"+brith1);
34 
35         }
36 
37         //6.关闭数据库资源
38         JdbcTools.release(resultSet,connection,statement);
39     }

总结:通过上面的基础的获取Connection连接,获取Statement对象,ResultSet对象。简单封装了工具类方法,完成的java到数据库的增删改查。

猜你喜欢

转载自www.cnblogs.com/Roger2Lj/p/11718024.html