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;
  1. INSERT语句
insert into tb_emp value2(2,'lili','女','销售部');
  1. UPDATE语句
update tb_emp set age = 24 where id = 2;
  1. 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对象,释放与数据库的连接
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文件夹下(或者直接导入项目中),问题解决
  • 无法打开登录所请求的数据库,登录失败
%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和看数据结构。