《java从入门到精通》——数据库操作 2020-01-23 java学习笔记

本文介绍了数据库的基本知识,包括数据库的定义、种类和功能。详细讲解了SQL语言,包括SELECT、INSERT、UPDATE和DELETE等语句。此外,还深入探讨了JDBC在Java中连接数据库的角色,如JDBC-ODBC桥、JDBC驱动程序类型以及常用类和接口如Connection、Statement和ResultSet。文中通过实际的Java代码示例展示了如何进行数据库连接、发送SQL语句以及处理查询结果。在遇到连接数据库的问题时,作者分享了解决方案和经验,强调了遇到问题时保持冷静和理解的重要性。

20数据库操作

20.1数据库基本知识

20.1.1什么是数据库

  • 数据库是一种存储结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据的时候重新输入他们。
  • 特点:
    • 实现数据共享
    • 减少数据的冗余度
    • 数据的独立性
    • 数据实现集中控制
    • 数据一致性和可维护性
    • 安全性控制、完整性控制、并发控制、故障的发现和恢复
  • 是数据管理的高级阶段,由文件管理系统发展起来
  • 基本结构分为三个层次:
    • 物理数据层
    • 概念数据层
    • 逻辑数据层

20.1.2数据库的种类及功能

  • 层次型:对数据的各项操作都很困难
  • 网状型:容易实现多对多的联系
  • 对象模型数据库:建立在面向对象模型基础上
  • 关系数据库:最流行,基于关系模型建立,关系模型由一系列表格组成

MySQL,DBMS

20.1.3SQL语言

  • Structure Query Language

  • 组成:

    • 数据定义语言DDL

    • 数据操纵语言DML

      1. SELECT语句

        • select name,age from tb_emp where sex ='女' order by age;
          
      2. INSERT语句

        • insert into tb_emp value2(2,'lili','女','销售部');
          
      3. UPDATE语句

        • update tb_emp set age = 24 where id = 2;
          
      4. DELETE语句

        • delete from tb_emp where id = 1024;
          
    • 数据控制语言DCL

    • 事务控制语言

20.2JDBC概述

  • 连接数据库和Java应用程序的一个纽带

20.2.1JDBC-ODBC桥

  • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conn=DriverManager.getConnection("jdbc.odbc:tom","","");
    Statement sql=conn.creatStatement();
    

20.2.2JDBC技术

  • Java DataBase Connectivity 面向对象的应用程序接口
  • JDBC技术主要完成以下几个任务
    • 与数据库建立一个连接
    • 向数据库发送SQL语句
    • 处理从数据库返回的结果
  • 并不能直接访问数据库,依赖于数据库厂商提供的JDBC驱动程序

20.2.3JDBC驱动程序的类型

  • JDBC总体结构:应用程序、驱动程序管理器、驱动程序和数据源
  • JDBC驱动分为:
    • JDBC-ODBC桥
    • 本地API一部分用Java编写的驱动程序
    • JDBC网络驱动
    • 本地协议驱动
  • JDBC网络驱动和本地协议驱动是JDBC访问数据库的首选

20.3JDBC中常用的类和接口

20.3.1Connection接口

  • Connection接口代表与特定的数据库的连接

20.3.2Statement接口

  • 在已经建立连接的基础上向数据库发送SQL语句
  • 三种Statement对象
    • Statement:执行不带参数的简单的SQL语句
    • PreparedStatement:继承Statament,执行动态的SQL语句
    • CallableStatement:继承了PreparedStatement,执行对数据库的存储过程的调用。

20.3.3PreparedStatemengt接口

20.3.4DriverManager类

  • 管理数据库中的所有驱动程序。
  • JDBC的管理层,作用域用户和驱动程序之间。

20.3.5ResultSet接口

  • 类似于一个临时表,暂时存放数据库查询操作所获得的结果集。
  • Result实例具有指向当前数据行的指针,指针开始的位置在一条记录的前面,通过next()方法可将指针向下移。

20.4数据库操作

20.4.1连接数据库

  1. 加载数据库的驱动程序(只需要在第一次访问数据库时加载一次)

  2. 每次访问创建一个Connection对象

  3. 之后执行操作数据库的SQL语句

  4. 最后完成数据库操作销毁前面创建的Connection对象,释放与数据库的连接

  5. package com.ShuJuKu;
    import java.sql.*;
    public class Conn {
        Connection con;
          public Connection getConnection(){
             try{
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    
             }catch (ClassNotFoundException e){
               e.printStackTrace();
           }
           try{
               con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName" +
                       "=test", "sa","123456");
               //con=DriverManager.getConnection("jdbc:mysql" +
                //        "://localhost:1433/XX","DESETOP-Q7ASRR7",
                  //     "XXXX");jdbc:sqlserver://localhost:1433; DatabaseName=test
    
               System.out.println("数据库连接成功");
               Statement sql=con.createStatement();
           }catch (SQLException e){
               e.printStackTrace();
           }
           return con;
        }
        public static void main(String[] args) {
            Conn c=new Conn();
            c.getConnection();
    
        }
    }
    
    
    • 连接数据库费了很大劲,昨天晚上11点半才连接成功,

      • 没有安装数据库;去CSDN找相应的安装教程

      • 没有安装相应的JDBC;去CSDN找相应的配置教程

      • 按照教程配置完后报错:No Suitable Driver Found For Jdbc

        • 这种情况的原因有四个:

          • /*1, 连接URL格式出现了问题,书上格式不对,正确格式为:con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test,"xxxx","xxxx");当然我的数据库的账号密码不能告诉你们。
            2, 驱动字符串出错,正确格式为:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            3, Classpath中没有加入合适的mysql_jdbc驱动。没看懂这点说的什么意思,其实做完第四点我的并不能用,又鼓捣了几下,不知道什么操作,后来改了一下URL格式成功解决。
            4, 尝试着将mysql-connector-java-5.1.34-bin.jar的jar包加入C:\Program Files\Java\jre1.6.0_02\lib\ext文件夹下(或者直接导入项目中),问题解决
            第四点描述没看懂,我是参考另一篇博文直接导入项目中,博文链接https://blog.csdn.net/qq_40740563/article/details/104737857?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522161132275916780264034019%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=161132275916780264034019&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-104737857.pc_search_result_no_baidu_js&utm_term=java%20IDEA%20%E8%BF%9E%E6%8E%A5SQL%20server2014*/
            
      • 无法打开登录所请求的数据库,登录失败;解决方法参考:https://blog.csdn.net/peach90/article/details/42874989?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522161133057416780271540844%252522%25252C%252522scm%252522%25253A%25252220140713.130102334…%252522%25257D&request_id=161133057416780271540844&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-42874989.pc_search_result_no_baidu_js&utm_term=IDEA%20%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E7%99%BB%E5%BD%95%E6%89%80%E8%AF%B7%E6%B1%82%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93。另外还要确保你的用户名和密码是对的,然后你确实创建了一个数据库,我就是没有创建数据库就要连接数据库,导致一直连接不上。
        昨晚配置数据库配置的我怀疑人生,我发现每次遇到故障,查遍CSDN也解决不了,认为自己的故障是独一无二的,是不可解决的,是老天的故意刁难,其实你没有那么特殊,CSDN上这么多人,你的故障不可能是第一次出现,一个编程小白,最大的可能就是你自己的水平不够。之所以解决不了是因为你没有完全理解完全看懂别人的博文,操作有瑕疵才导致的不好用。
        所以说遇到故障(bug)还是得保持一个平和的心态,冷静的大脑,耐耐心心地把别人地博文看懂,这样才能事半功倍,这样自己才能成长。

      • 到此,数据库就基本配置完成了,进入接下来的操作阶段。

20.4.2向数据库发送SQL语句

20.4.3处理查询结果集

20.4.4顺序查询

20.4.5模糊查询

20.4.6预处理语句

20.4.7添加、修改、删除记录

直接做了最后的案例

package com.ShuJuKu;


import java.sql.*;
public class Renewal {
    static Connection con;
    static PreparedStatement sql;
    static  ResultSet res;
    public Connection getConnection(){
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        try{
            con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName" +
                    "=test", "xxx","xxxx");
    

            System.out.println("数据库连接成功");
            Statement sql=con.createStatement();
        }catch (SQLException e){
            e.printStackTrace();
        }
        return con;
    }
    public static void main(String[] args) {
        Renewal c=new Renewal();
        con=c.getConnection();
        try{
            sql=con.prepareStatement("select*from table_1");
            res=sql.executeQuery();
            System.out.println("执行增加、修改、删除前数据:");
            /*while(res.next()){
                String id=res.getString(1);
                String name=res.getString("name");
                String sex=res.getString("sex");
                String birthday=res.getString("birthday");
                System.out.println("编号:"+id);
                System.out.println("姓名:"+name);
                System.out.println("性别:"+sex);
                System.out.println("生日:"+birthday);
            }*/
            sql=con.prepareStatement("insert into table_1 values(?," +
                    "?,?,?)");
            sql.setInt(1,10);
            sql.setString(2,"张宏");
            sql.setString(3,"女");
            sql.setString(4,"1993-10-20");
            sql.executeUpdate();


            sql=con.prepareStatement("insert into table_1 values(?," +
                    "?,?,?)");
            sql.setInt(1,10);
            sql.setString(2,"焦某");
            sql.setString(3,"男");
            sql.setString(4,"1998-08-24");
            sql.executeUpdate();


            sql=con.prepareStatement("update table_1 set birthday = " +
                    "? where id = ?");
            sql.setString(1,"1994-11-02");
            sql.setInt(2,2);
            sql.executeUpdate();
            /*sql=con.prepareStatement("delete from table_1 where
             " +

                    "id =" +
                    " ?");
            sql.setInt(1,1);
            sql.executeUpdate();*/
            sql=con.prepareStatement("select * from table_1");
            res=sql.executeQuery();
            System.out.println(" 执行增加、修改、删除后的数据:");
            while(res.next()){
                String id=res.getString(1);
                String name=res.getString("name");
                String sex=res.getString("sex");
                String birthday=res.getString("birthday");
                System.out.println("编号:"+id);
                System.out.println("姓名:"+name);
                System.out.println("性别:"+sex);
                System.out.println("生日:"+birthday);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

仅限于运行成功,由于对数据库的知识太过缺乏,玩不太转。

数据库入门到此为止,只是简单地了解了一下。

今天 休息了一天,明天开始刷leetcode和看数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值