• JAVA12_05学习总结(JDBC!)


    今日内容

    1. JDBC操作

    JDBC操作DDL语句
        1)导包/创建驱动
        2)准备sql语句
        3)获取连接对象
        4)获取执行对象
        5)执行sql语句
        6)释放资源
    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.Statement;
    4. //创建学生表,id,姓名,年龄,性别,住址
    5. public class jdbcTest {
    6. public static void main(String[] args) throws Exception {
    7. //导包/创建驱动
    8. Class.forName("com.mysql.jdbc.Driver");
    9. //获取链接数据库对象
    10. Connection conn = DriverManager.getConnection(
    11. "jdbc:mysql://localhost:3306/szr",
    12. "root",
    13. "123456"
    14. );
    15. //准备sql语句,注意拼接
    16. String sql = "create table student(" +
    17. "id int primary key auto_increment,"+
    18. "name varchar(10),"+
    19. "age int,"+
    20. "gender varchar(3),"+
    21. "address varchar(20)"+") ;";
    22. //获取执行对象 -- 获取要执行的数据库对象
    23. Statement stat = conn.createStatement();
    24. //执行sql语句
    25. stat.executeUpdate(sql); // 创建,删除,添加为Update -- 查询为Query
    26. //释放资源
    27. stat.close();
    28. conn.close();
    29. }
    30. }

    2.优化JDBC代码

    优化代码
        每次进行操作时都要连接数据库,重复书写七大步骤
            七大步骤中除了准备sql语句之外基本都一样,过于冗余,所以优化代码结构!
                -注册驱动的路径固定
                -连接数据库的路径,用户,密码在个人使用时不变
            所以
                将这些都写入配置文件!
                直接从配置文件调用,不同的数据库直接更改配置文件即可,不用更改代码结构!--符合开闭原则!
        优化
            将重复步骤单独写入方法中,需要的时候直接调用,避免重复书写!
            将需要的内容写入配置文件,直接读取配置文件,不用破坏代码结构!
    1. import java.io.IOException;
    2. import java.io.InputStream;
    3. import java.sql.*;
    4. import java.util.Properties;
    5. //将对于步骤写入对应的工具类,直接调用方法
    6. public class JdbcUtils {
    7. //将需要从配置文件获取的值先声明出来
    8. private static String driverclass = null ;//创建驱动:com.mysql.jdbc.Driver
    9. private static String url = null ;//获取数据库链接对象路径:jdbc:mysql://localhost:3306/数据库名
    10. private static String user = null ;//用户名
    11. private static String password = null ;//密码
    12. //创建静态代码块,当前类初始化的时候就读取配置文件,获取内容,创建驱动!
    13. static {
    14. //读取配置文件--利用输入流读取配置文件
    15. InputStream input = JdbcUtils.class.getClassLoader() //通过class字节码文件获取类加载器
    16. .getResourceAsStream("jdbc.properties");
    17. //通过properties方法通过键获取值
    18. Properties prop = new Properties();
    19. try {
    20. prop.load(input); //加载InputStream输入对象
    21. } catch (IOException e) {
    22. e.printStackTrace();
    23. }
    24. driverclass = prop.getProperty("driverclass");//获取之后赋给对应的内容
    25. url = prop.getProperty("url");
    26. user = prop.getProperty("user");
    27. password = prop.getProperty("password");
    28. //创建驱动
    29. try {
    30. Class.forName(driverclass);
    31. } catch (ClassNotFoundException e) {
    32. e.printStackTrace();
    33. }
    34. }
    35. //获取数据库链接对象
    36. public static Connection getConnection() throws SQLException {
    37. Connection conn = DriverManager.getConnection(url,user,password);//参数值从上面获取
    38. return conn;//返回获取的数据库连接对象
    39. }
    40. //释放资源 -- 不需要返回值的添加,删除,修改
    41. public static void close(Statement stat , Connection conn){
    42. try {
    43. stat.close();
    44. conn.close();
    45. } catch (SQLException throwables) {
    46. throwables.printStackTrace();
    47. }
    48. //书写方式二
    49. //close(stat,conn); //调用下面的方法,传值的时候ResultSet传空值!
    50. }
    51. public static void close(ResultSet result , Statement stat, Connection conn){
    52. try {
    53. result.close();
    54. stat.close();
    55. conn.close();
    56. } catch (SQLException throwables) {
    57. throwables.printStackTrace();
    58. }
    59. }
    60. }
    61. import java.sql.*;
    62. //测试
    63. public class JdbcUtilsTest {
    64. public static void main(String[] args) throws SQLException {
    65. //删除,添加,修改---修改
    66. //连接数据库,获取对象--直接调用方法
    67. Connection conn = JdbcUtils.getConnection();//省去前面的步骤,直接调用
    68. //准备sql语句--不添加id,id自增长!
    69. String sql = "insert into student(name,age,gender,address) values" +
    70. "('钟离','30','男','往生堂') , " +
    71. "('胡桃','18','女','往生堂') , " +
    72. "('申鹤','25','女','璃月') , " +
    73. "('优菈','19','女','蒙德') "+";"; //注意拼接!!!
    74. //获取执行对象
    75. Statement stat = conn.createStatement();
    76. stat.executeUpdate(sql);
    77. //释放资源--调用方法
    78. JdbcUtils.close(stat,conn);
    79. //查询
    80. //连接数据库,获取对象
    81. Connection conn1 = JdbcUtils.getConnection();
    82. //准备sql语句
    83. String sql1 = "select * from student ;";
    84. //获取执行对象
    85. Statement stat1 = conn1.createStatement();
    86. ResultSet result = stat1.executeQuery(sql1);//查询返回结果集,有返回值
    87. //查询成功--后面说怎么遍历值
    88. System.out.println(result);//com.mysql.jdbc.JDBC4ResultSet@46fbb2c1
    89. }
    90. }

    3. JDBC查询遍历

    JDBC查询遍历
        当查询返回到结果集之后
            ResultSet中有方法
            判断
                boolean next()
                    --判断结果集中是否有下一条数据
            获取
                getInt(int index)
                    --获取输入角标值列的内容
                getString(String str)
                    --获取输入列名称的内容
    1. import JDBC.JDBCTest_02.JdbcUtils;
    2. import java.sql.Connection;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.sql.Statement;
    6. public class JDBCTest {
    7. public static void main(String[] args) throws SQLException {
    8. //获取数据库连接对象
    9. Connection conn = JdbcUtils.getConnection();
    10. //准备sql语句
    11. String sql = "select * from student ;";
    12. //获取执行对象
    13. Statement stat = conn.createStatement();
    14. //执行语句并返回结果集
    15. ResultSet result = stat.executeQuery(sql);
    16. //while循环
    17. while (result.next()){ //next()为判断条件
    18. //获取输入角标值的内容
    19. int id = result.getInt(1);
    20. String name = result.getString(2);
    21. int age = result.getInt(3);
    22. String gender = result.getString(4);
    23. String address = result.getString("address");
    24. System.out.println(id+" "+name+" "+age+" "+gender+" "+address);
    25. /*
    26. 1 钟离 30 男 往生堂
    27. 2 胡桃 18 女 往生堂
    28. 3 申鹤 25 女 璃月
    29. 4 优菈 19 女 蒙德
    30. */
    31. }
    32. }
    33. }

    4.单元测试

    单元测试
        main方法是全局测试,只要有一个地方不对,都运行不了
            所以
                单元测试,只测试我们想要测试的地方!
            1)导包junit的核心包以及依赖包
            2)提供单元测试方法
                定义一个功能,没有返回值,没有参数,在方法上定义
                    @Test标记,它是一个单元测试方法
            3)@Before
                标记的方法是在单元测试方法之前先执行
                    比如说
                        初始化的操作
            4)@After
                标记的方法是在用单元测试执行之后执行
                    比如说
                        释放资源
  • 相关阅读:
    Word查找红色文字 Word查找颜色字体 Word查找突出格式文本
    剑指 Offer 68 - 二叉树的最近公共祖先
    未来之路:互联网技术驱动汽车行业的创新浪潮
    Kamiya丨Kamiya艾美捷抗冷休克结构域蛋白E1说明书
    Oracle常用对象精解(2)
    Visual Studio 代码显示空格等空白符
    3.20 关于怎样做好小红书直播的一些技巧【玩赚小红书】
    DIV布局个人介绍网页模板代码 家乡海阳个人简介网页制作 简单个人静态HTML网页设计作品 DW个人网站制作成品 web网页制作与实现
    利用EXCEL中的VBA对同一文件夹下的多个数据文件进行特定提取
    快鲸智慧楼宇系统:助力商办楼宇快速实现智慧化、数字化运营
  • 原文地址:https://blog.csdn.net/weixin_53118395/article/details/128192831