详述JDBC(Java DataBase Connectivity) 执行过程(下)——查询

在数据库中插入30条数据如下

数据库部分截图

Java中使用JDBC连接数据库进行查询的代码实现

public class JDBCDemo {
    public static void main(String[] args) {

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
//            1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
//            2.建立连接
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
//            3.创建执行SQL语句对象
            statement = connection.createStatement();
//            4.书写SQL语句
            String sql = "select * from user_infor";
//            5.执行SQL语句,这里是executeQuery(sql)和修改操作有区别
            resultSet = statement.executeQuery(sql);
//            6.查询数据库中的内容,查询出数据库中的所有的信息并打印到控制台上
            while (resultSet.next()){
                String id = resultSet.getString("id");
                String userName = resultSet.getString("user_name");
                String password = resultSet.getString("password");
                System.out.println("id="+id + ", userName=" + userName + ", password="+ password);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//            7.释放资源,注意顺序
             try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

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

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

resultSet调用getString()方法时需要传入表的列名,也可以传入表中列的索引(索引从1开始 其他代码不改变

// 		6.查询数据库中的内容,这种方法同样可以得到表中的数据
 while (resultSet.next()){
        String id = resultSet.getString(1);
        String userName = resultSet.getString(2);
        String password = resultSet.getString(3);
        System.out.println("id="+id + ", userName=" + userName + ", password="+ password);
         }

这里的resultSet调用getString()方法还是getInt()方法是由数据库中的列的数据类型决定的
两种方法的结果相同

id=f86e22a0-060d-4c04-8abf-597399e0b43a, userName=0, password=0
id=4e99cc5e-79f0-4c93-893f-f759054bf6bb, userName=1, password=1
id=a912924e-1cc3-4fc5-8865-7e5e5b06a777, userName=2, password=2
id=b0a52470-ab40-4f34-8811-01775d0ab388, userName=3, password=3
id=05ff4316-f984-4b96-8ea5-1b5549424273, userName=4, password=4
id=05707eaf-88bb-4845-9385-018442f62bb1, userName=5, password=5
id=33d70bf9-b5cf-49a1-871b-5375002bdcc2, userName=6, password=6
id=b3ca64ac-d9e6-4a61-b869-617345341423, userName=7, password=7
id=4fb5e75a-de78-4139-bf24-9843c91446df, userName=8, password=8
id=2409b92e-be0b-4129-b4d2-063e3d194ca8, userName=9, password=9
id=e314cb70-7b98-4833-97bb-08353f06c2b4, userName=10, password=10
id=9027dfc6-b931-4f28-85e6-11ba28f67278, userName=11, password=11
id=2fe7596a-7fd2-4635-9fe5-b95a6e374ad4, userName=12, password=12
id=1264b0d5-d2da-428f-8541-0a5af34070f3, userName=13, password=13
id=ddc75015-b164-4cf6-882d-604fdaddfed8, userName=14, password=14
id=e74b7345-e3b5-4616-82d6-08b5be7e66d0, userName=15, password=15
id=2ede2846-7abd-4070-87ba-d31beda226b9, userName=16, password=16
id=946186af-1b01-4b72-9e89-7481070cd2d0, userName=17, password=17
id=615c0c32-5f70-4626-9ffb-8369fd47ef3d, userName=18, password=18
id=fb6de586-048c-4cc1-80e8-8ca8c12425e0, userName=19, password=19
id=80c9c707-a4a3-4591-9d5f-96a9e090bb36, userName=20, password=20
id=1d063956-3bd7-41ef-bc14-da34431c1c8b, userName=21, password=21
id=45b6551b-dbbe-4280-b298-6b766c878c93, userName=22, password=22
id=a79595fe-1d32-4e05-8ea1-0f41a7b58280, userName=23, password=23
id=322623d7-0e78-45b0-bac0-c4907f1b24ab, userName=24, password=24
id=6e0438ce-7768-4993-a0c6-9f41ab0c8bd3, userName=25, password=25
id=11271355-872e-4820-8820-97444e9bf155, userName=26, password=26
id=4a988078-de55-4550-950c-eeb75d1256d0, userName=27, password=27
id=817413cf-aaf7-4868-b6da-f4d219eab1bf, userName=28, password=28
id=26ddb288-b0e0-4cdc-a654-6e2588e92735, userName=29, password=29

Process finished with exit code 0

对于查询数据,如果查询的数据可能有多条符合条件,需要使用while(resultSet.next())像上例一样,把所有符合条件的结果查询出来。如果查询的是单条数据可以使用if语句(也可以继续使用while)。
比如如果只查找userName='20’的数据,确定只有一条数据符合条件则可以使用if语句
这里需要改写SQL语句并把while变为if,其他代码不改变

//				4.书写SQL语句
            String sql = "select * from user_infor where user_name = '20'";
//            5.执行SQL语句,这里是executeQuery(sql)和修改操作有区别
            resultSet = statement.executeQuery(sql);
//            6.查询数据库中的内容
            if (resultSet.next()) {
                String id = resultSet.getString(1);
                String userName = resultSet.getString(2);
                String password = resultSet.getString(3);
                System.out.println("id=" + id + ", userName=" + userName + ", password=" + password);
            }

在Java中使用JDBC实现查询操作一共是七步,比修改操作多一步

  1. 加载驱动,找到mysql-connector-java-5.1.9.jar包中的Driver类。
  2. 建立连接, 使用DriverManager的getConnection方法。
  3. 创建执行SQL语句对象,使用Connection的createStatement方法。
  4. 书写SQL语句,需要保证SQL语句的正确性,如果有SQL语句语法错误则会报SQL 语法错误异常。
  5. 执行SQL语句,查找,调用Statement的executeQuery(sql)方法(不是executeUpdate(sql)注意区别),该方法会返回一个ResultSet对象。
  6. 调用ResultSet对象的next()方法就可以指向符合条件的下一个数据,如果下一条数据存在返回true,否则返回false。
  7. 释放资源,需要先调用ResultSet的close()方法,再调用Connection的close()方法,最后Statement的close()方法。
    关闭的顺序同样需要遵守后开先关的原则(否则有可能出现异常)类似于栈的思想(先进后出)

其中1,2,3,4,7步骤和使用JDBC修改数据库的步骤相同
释放资源前需要判断对象是否为空否则有可能报空指针异常


释放资源可以使用多个try…catch也可以使用try…catch…fanlly嵌套,但是代码结构不清晰(当释放资源部分有其他代码的时候可能需要用到这种方法)

		//7.释放资源
		try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {

                try {
                    if (statement != null) {
                        statement.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {

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

猜你喜欢

转载自blog.csdn.net/qq_35302939/article/details/89672951