image.pngimage.png

    1. package com.itheima.jdbc;
    2. import org.junit.Test;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.ResultSet;
    6. import java.sql.Statement;
    7. /**
    8. * JDBC API 详情:Result
    9. */
    10. public class JDBCDemo5_ResultSet {
    11. // 定义一个测试方法
    12. /**
    13. * 执行DQL 查询语句
    14. * @throws Exception
    15. */
    16. @Test
    17. public void testResultSet() throws Exception{
    18. // 1. 注册驱动
    19. // Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
    20. // 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
    21. // 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
    22. // useSSL=false (Java的键值对是 键=值 这里不能有空格
    23. String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
    24. String userName = "root";
    25. String passWord = "123456";
    26. Connection connection = DriverManager.getConnection(url, userName, passWord);
    27. // 定义sql
    28. String sql = "select * from account";
    29. // 4. 获取statement对象 执行sql的对象
    30. Statement stmt = connection.createStatement();
    31. // 5. 执行sql
    32. ResultSet rs = stmt.executeQuery(sql);
    33. // 6. 处理结果,遍历rs中的所有数据 (将他查询到的数据都遍历出来)
    34. // // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
    35. // // 有数据返回true, 没数据返回false
    36. // while (rs.next()){ // 有数据执行
    37. // // 6.2 获取数据,getXXX()
    38. // int id = rs.getInt(1);// 获取第1列的的int类型的值
    39. // String name = rs.getString(2); // 获取第二列的String类型
    40. // double money = rs.getDouble(3); // 获取第三列的Double类型的数据
    41. // // 每次读一行,然后将该行每列的数据打印出来
    42. // System.out.println(id);
    43. // System.out.println(name);
    44. // System.out.println(money);
    45. // System.out.println("=====================");
    46. // }
    47. // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
    48. // 有数据返回true, 没数据返回false
    49. while (rs.next()){ // 有数据执行
    50. // 6.2 获取数据,getXXX()
    51. int id = rs.getInt("id");// 获取第一行第一列为id字段的的int类型的值
    52. String name = rs.getString("name"); // 获取第二列的String类型
    53. double money = rs.getDouble("money"); // 获取第三列的Double类型的数据
    54. // 每次读一行,然后将该行每列的数据打印出来
    55. System.out.println(id);
    56. System.out.println(name);
    57. System.out.println(money);
    58. System.out.println("=====================");
    59. }
    60. // 释放资源
    61. rs.close();
    62. connection.close();
    63. }
    64. }

    案例:
    image.png
    包名pojo一般是用来存储Java实体类的(User,account)
    image.png

    1. package com.itheima.jdbc;
    2. import com.itheima.pojo.Account;
    3. import org.junit.Test;
    4. import java.sql.Connection;
    5. import java.sql.DriverManager;
    6. import java.sql.ResultSet;
    7. import java.sql.Statement;
    8. import java.util.ArrayList;
    9. import java.util.List;
    10. /**
    11. * JDBC API 详情:Result
    12. */
    13. public class JDBCDemo5_ResultSet {
    14. // 定义一个测试方法
    15. /**
    16. * 执行DQL 查询语句
    17. * @throws Exception
    18. */
    19. @Test
    20. public void testResultSet() throws Exception{
    21. // 1. 注册驱动
    22. // Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
    23. // 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
    24. // 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
    25. // useSSL=false (Java的键值对是 键=值 这里不能有空格
    26. String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
    27. String userName = "root";
    28. String passWord = "123456";
    29. Connection connection = DriverManager.getConnection(url, userName, passWord);
    30. // 定义sql
    31. String sql = "select * from account";
    32. // 4. 获取statement对象 执行sql的对象
    33. Statement stmt = connection.createStatement();
    34. // 5. 执行sql
    35. ResultSet rs = stmt.executeQuery(sql);
    36. // 6. 处理结果,遍历rs中的所有数据 (将他查询到的数据都遍历出来)
    37. // // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
    38. // // 有数据返回true, 没数据返回false
    39. // while (rs.next()){ // 有数据执行
    40. // // 6.2 获取数据,getXXX()
    41. // int id = rs.getInt(1);// 获取第1列的的int类型的值
    42. // String name = rs.getString(2); // 获取第二列的String类型
    43. // double money = rs.getDouble(3); // 获取第三列的Double类型的数据
    44. // // 每次读一行,然后将该行每列的数据打印出来
    45. // System.out.println(id);
    46. // System.out.println(name);
    47. // System.out.println(money);
    48. // System.out.println("=====================");
    49. // }
    50. // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
    51. // 有数据返回true, 没数据返回false
    52. while (rs.next()){ // 有数据执行
    53. // 6.2 获取数据,getXXX()
    54. int id = rs.getInt("id");// 获取第一行第一列为id字段的的int类型的值
    55. String name = rs.getString("name"); // 获取第二列的String类型
    56. double money = rs.getDouble("money"); // 获取第三列的Double类型的数据
    57. // 每次读一行,然后将该行每列的数据打印出来
    58. System.out.println(id);
    59. System.out.println(name);
    60. System.out.println(money);
    61. System.out.println("=====================");
    62. }
    63. // 释放资源
    64. rs.close();
    65. connection.close();
    66. }
    67. // 定义一个测试方法
    68. /**
    69. * 查询account账户表数据,封装成Account对象中,并且存储到ArrayList集合中去
    70. * 1. 定义实体类Account
    71. * 2. 查询数据,封装到Account对象中去
    72. * 3. 将Account对象存入到ArrayList集合中去
    73. *
    74. *
    75. * @throws Exception
    76. */
    77. @Test
    78. public void testResultSet2() throws Exception{
    79. // 1. 注册驱动
    80. // Class.forName("com.mysql.jdbc.Driver"); // mysql5之后的驱动jar包,的注册驱动,可以不写了
    81. // 2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化,(简化,就是端口号和ip不写)
    82. // 这里的127.0.0.1 可以写成localhost 不想要红色警告可以设置参数后面的键值对(前面加问号)
    83. // useSSL=false (Java的键值对是 键=值 这里不能有空格
    84. String url = "jdbc:mysql:///db1?useSSL=false"; // db1 是数据库名
    85. String userName = "root";
    86. String passWord = "123456";
    87. Connection connection = DriverManager.getConnection(url, userName, passWord);
    88. // 定义sql
    89. String sql = "select * from account";
    90. // 4. 获取statement对象 执行sql的对象
    91. Statement stmt = connection.createStatement();
    92. // 5. 执行sql
    93. ResultSet rs = stmt.executeQuery(sql);
    94. // 创建集合(集合的泛型是Account类)因为要存储Account类创建的对象
    95. List<Account> list = new ArrayList<>();
    96. // 6.1 next() 方法 光标向下移动一行,并且判断当前行是否为有效行(判断当前行是否有数据)
    97. // 有数据返回true, 没数据返回false
    98. while (rs.next()){ // 有数据执行
    99. Account account = new Account();
    100. // 6.2 获取数据,getXXX()
    101. int id = rs.getInt("id");// 获取第一行第一列为id字段的的int类型的值
    102. String name = rs.getString("name"); // 获取第二列的String类型
    103. double money = rs.getDouble("money"); // 获取第三列的字段为money的Double类型的数据
    104. // 将每次遍历得到的值,赋值给account类中的成员中去(使用set方法)
    105. account.setId(id);
    106. account.setName(name);
    107. account.setMoney(money);
    108. // 将每次赋值后,将该对象存入到集合中去
    109. list.add(account);
    110. }
    111. // 查看集合里面有没有数据
    112. System.out.println(list);
    113. // 释放资源
    114. rs.close();
    115. connection.close();
    116. }
    117. }

    定义一个账户类

    1. package com.itheima.pojo;
    2. public class Account {
    3. private int id;
    4. private String name;
    5. private double money;
    6. public Account() {
    7. }
    8. public Account(int id, String name, double money) {
    9. this.id = id;
    10. this.name = name;
    11. this.money = money;
    12. }
    13. public int getId() {
    14. return id;
    15. }
    16. public void setId(int id) {
    17. this.id = id;
    18. }
    19. public String getName() {
    20. return name;
    21. }
    22. public void setName(String name) {
    23. this.name = name;
    24. }
    25. public double getMoney() {
    26. return money;
    27. }
    28. public void setMoney(double money) {
    29. this.money = money;
    30. }
    31. @Override
    32. public String toString() {
    33. return "Account{" +
    34. "id=" + id +
    35. ", name='" + name + '\'' +
    36. ", money=" + money +
    37. '}';
    38. }
    39. }