java对数据库的基础知识

 什么是数据库

数据库是一种储存结构,它允许使用各种格式输入,处理和检索数据,不必在每次是需要的数据时重新输入。

数据库的特点

  1. 可以实现数据的共享,用户可以同时存取数据库中的数据。
  2. 减少大量重复的数据,减少数据的冗余,维护数据的一致性。
  3. 数据的独立性,使数据库中逻辑结构和应用程序相互独立
  4. 数据实现集中控制,我们用文件管理方式,和数据库管理方式进行对比
    1. 文件管理方式:数据处于一总比较分散的状态,不同用户或同一用户在不同的处理操作中,其文件之间毫无关系
    2. 数据库管理方式:利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。
  5. 数据的一致性(保证多个用户同一时间对数据的增删查改,保证数据的正确性)和可维护性,确保数据的安全性(如:数据的丢失,越权使用)和可靠性。

数据库的推荐

现在市面上的数据库多种多样详细,个人推荐使用MySQL。

SQL语法

具体介绍SQL语法介绍https://blog.csdn.net/PILIpilipala/article/details/113798383?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164881896616782184673299%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164881896616782184673299&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-113798383.142%5Ev5%5Epc_search_insert_es_download,157%5Ev4%5Econtrol&utm_term=sql%E8%AF%AD%E8%A8%80&spm=1018.2226.3001.4187

SQL使用具体使用(均为最简单的操作)

  1. 创建数据库
  2. 删除数据库

 JDBC概述

JDBC是一种可用于执行SQL语句的Java API(Application Programming Interface,应用程序设计接口),使链接数据库和Java应用程序的纽带。

JDBC技术的用处

  1. 与数据库建立一个链接
  2. 向数据库发送SQL语句
  3. 处理从数据库返回的结果

JDBC常用类和接口

1.DriverManager类

方法 功能描述
getConnection(String url,String user,String password) 指定3个入口参数(依次是链接数据库的URL,用户名,密码)来获取与数据库的链接
setLoginTimeout() 获取驱动程序试图登录到某一数据时可以等待的最长时间,以秒为单位
println(String message) 将一条消息打印到当前JDBC日志流中

2.Connection接口

Connection接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果

方法 功能描述
createStatement() 创建Statement对象
createStatement(int resultSetType,int resultSetConcurrency) 创建一个Statement对象,该对象将生成具有给定类型,并发性和可保存性的ResultSet对象
preparedStatement() 创建预处理preparedStatement
isReadOnly() 查看当前Connection对象的读取模式是否为只读形式
setReadOnly() 设置当前Connection对象的读写模式,默认是非只读模式
commit() 使所有上一次提交/回滚后进行的更改成为持久更改,并释放此Connection对象当前持有的所有数据库锁
roolback() 取消在当前事务中进行的所有更改,并释放此Connection对象当前持有的所有数据库锁
close() 立即释放此Connection对象的数据库和JDBC资源,而不是等待它们被自动释放

3.Statement接口

Statement接口用于用于在已经建立连接的基础上向数据库发送SQL语句。在JDBC中有3种Statement对象,分别Statement,PreparedStatement和CallableStatement.。Statement对象用于执行不带参数的简单SQL语句;PreparedStatement,用于执行对数据库的存储过程的调用

方法 功能描述
execute(String sql) 执行静态的SELECT语句,该语句可能返回多个结果集
executeQuery(String sql) 执行给定的SQL语句,该语句返回单个ResultSet对象
clearBatch() 清空此Statement对象的当前SQL命令列表
executeBatch() 将一批命令提交给数据库来执行,如果全部命令成功,则返回更新计数组成的数组。数组元素的排序与SQL语句的添加顺序对应
addBatch(String sql) 将给定的SQL命令添加到此Statement对象的当前命令中。如果驱动程序不支持批量处理,将抛出异常
close() 释放Statement实力占用的数据库和JDBC资源

4.PreparedStatement接口

PreparedStatement接口用来动态地执行SQL语句,通过PreparedStatement实例执行的动态SQL语句,将被预编译并保存到PreparedStatement实力中,从而可以反复的执行该SQL语句。

方法 功能描述
setInt(int index,int k) 将指定位置的参数设置为int值
setFloat(int index,float f) 将指定位置的参数设置为float值
setLong(int index,long f) 将指定位置的参数设置为long值
setDoble(int index,doble f) 将指定位置的参数设置为double值
setBoolean(int index,boolean f) 将指定位置的参数设置为boolean值
setDate(int index,date date) 将指定位置的参数设置为对应的data值
executeQuery() 在此PreparedSeatement对象
setString(int index String s) 将指定位置的参数设置为对应的String值
setNull(int index,intsqlType) 将指定参数设置为SQL NULL
executeUpdate() 执行前面包含的参数的动态INSERT,UPDATE或DELETE语句
claeatParameters() 清除当前所有参数的值

5.ResultSet接口

ResultSet接口类似于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录前面,通过next()方法可将指针下移。在JDBC2.0(JDK1.2)之后,该接口添加了一组更新方法updateXXX(),该方法有两个重载方法,可根据列的索引号和列的名称来更新指定列。但该方法并没有将对数据进行的操作同步到数据库中,需要执行updateRow()方法或insertRow()方法更新数据库。

方法 功能描述
getInt() 以int形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL,则返回值时0
getFloat() 以float形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL,则返回值是0
getDate() 以date形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL,则返回值是null
getBoolean() 以boolean形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL,则返回null
getString() 以String形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL,则返回null
getObject() 以Object形式获取此ResultSet对象的当前行的指定列值。如果列值是NULL,则返回null
first() 将指针移到当前记录的第一行
last() 将指针移到当前记录的最后一行
next() 将指针向下移一行
beforeFirst() 将指针移到集合的开头(第一行)
afterLast() 将指针移到集合的尾部(最后一行位置)
absolute(int index) 将指针移到ResultSet给定编号的行
isFrist() 判断指针是否位于当前ResultSet集合的第一行。如果是返回true,否则返回false
islast() 判断指针是否位于单圈ResultSet集合的最后一行。如果是返回true,否则返回false用int值更新指定列
updateFloat() 用float值更新指定列
updateLong() 用指定的long值更新指定列
updateString() 用只当的String值更新指定列
updateObject() 用Object值更新指定列
updateNull() 将指定的列修改为null
updateDate() 用指定的date值跟新指定列
updateDouble() 用指定的double值更新指定列
getrow() 查看当前行的索引号
insertRow() 将插入行的内容插入数据库
updateRow() 将当前行的内容同步到数据表
daleteRow() 删除当前行,但并不同步到数据库中,而是执行close()方法后同步到数据库

数据库操作

  1. 准备事项
    1. 安装MySQL(本人用的MySQL8.0)
      java对数据库的基础知识_第1张图片
    2. 在lib包里面导入jar包
    3. 软件用的idea
      java对数据库的基础知识_第2张图片
  2. 连接数据库
    1. 要访问数据库,首先要加载数据库的驱动程序(只需要再第一次访问数据库时加载一次),然后每次访问时创建一个Connection对象,接着执行操作数据库的SQL语句,最后在完成数据库操作后销毁钱买你创建的Connection对象,释放于数据库的连接。
    2. 连接本地的MySQL8.0数据库(创建test类)
      package JDBC.sql;
      
      import java.sql.*;
      import java.util.logging.Level;
      import java.util.logging.Logger;
      public class test {
          public static void main(String[] args) {
              //一下代码为链接数据库的
              Connection con = null;
              try {
                  Class.forName("com.mysql.cj.jdbc.Driver");
                  //mydb1在数据库中必须有,如果没有就在Mysql中创建不然就找不到指定位置
                  String url = "jdbc:mysql://127.0.01:3306/mydb1";
                  String username = "root";
                  //数据库密码
                  String passord = "123456";
                  con = DriverManager.getConnection(url,username,passord);
                  System.out.println(con);
                  con.close();
                    } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
              if (con!=null){
                  System.out.println("成功连接数据库连接数据库");
                  System.out.println(con);
              }
          }
      }
      

      成功连接显示
      java对数据库的基础知识_第3张图片

    3. MySQL的数据创建  java对数据库的使用
      1. 创建数据表
        java对数据库的基础知识_第4张图片
      2. 录入数据java对数据库的基础知识_第5张图片

java对数据库的操作

  1. 顺序查询

    1. resultSet类的next()方法的返回值是boolean类型的数据,当游标移动到最后一行之后会返回false。下面是tb_stu中的全部信息显示在控制台上。
    2. 创建JDBCDemo类,在主方法中连接MySQL8.0数据库,将tb_stu表中的所有数据都输出在控制台中创建JDBCDeom类)
      package JDBC.sql;
      
      import java.sql.*;
      
      public class JDBCDemo {
          public static void main(String[] args) {
              //一下代码为链接数据库的
              Connection con = null;
              try {
                  Class.forName("com.mysql.cj.jdbc.Driver");
                  //mydb1在数据库中必须有,如果没有就在Mysql中创建不然就找不到指定位置
                  String url = "jdbc:mysql://127.0.01:3306/test";
                  String username = "root";
                  //数据库密码
                  String passord = "123456";
                  con = DriverManager.getConnection(url,username,passord);
                  Statement stmt = con.createStatement();
                  ResultSet res = stmt.executeQuery("select * from tb_stu");
                  while (res.next()){
                      String id = res.getString("id");
                      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);
                      System.out.println("=================================================");
                  }
      
      
                  con.close();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
              if (con!=null){
                  System.out.println("成功连接数据库连接数据库");
                  System.out.println(con);
              }
          }
      }
      
    3. 输出结果
      java对数据库的基础知识_第6张图片
  2. 模糊查询
    1. SQL语句中提供了LIKE操作符用于模糊查询,可使用”%“来代替0个或多个字符,使用下划线”_“来代替一个字符。列入,在查询张同学时,可使用一下SQL语句:
    2. 在顺序查询上修改(创建JDBCDeom3类)
      package JDBC.sql;
      
      import java.sql.*;
      
      public class JDBCDome2 {
          public static void main(String[] args) {
              //一下代码为链接数据库的
              Connection con = null;
              try {
                  Class.forName("com.mysql.cj.jdbc.Driver");
                  //mydb1在数据库中必须有,如果没有就在Mysql中创建不然就找不到指定位置
                  String url = "jdbc:mysql://127.0.01:3306/test";
                  String username = "root";
                  //数据库密码
                  String passord = "123456";
                  con = DriverManager.getConnection(url,username,passord);
                  Statement stmt = con.createStatement();
                  ResultSet res = stmt.executeQuery("select * from tb_stu where name like '张%'");
                  while (res.next()){
                      String id = res.getString("id");
                      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);
                      System.out.println("=================================================");
                  }
      
      
                  con.close();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
              if (con!=null){
                  System.out.println("成功连接数据库连接数据库");
                  System.out.println(con);
              }
          }
      }
      
      

      其实也就只修改了一个地方,关于sql的查询的语句进行了修改

    3. 输出结果
      java对数据库的基础知识_第7张图片

  3. 预处理语句

    1. 对JDBC,可以通过Connection对象的preparedStatement(String sql)方法对SQL语句进行处理,生成数据库底层的内部文件命令,并将该命令封装在PreparedStatement对象中。通过调用该对象的相应方法,可执行底层数据库命令。也就是说,应用程序能针对连接的数据库,将SQL语句解释为数据库底层的命令,然后让数据库执行这个命令。这样可以减轻数据库的负担,提高数据库的速度。

    2. 在顺序查询上修改创建JDBCDeom3类)

      package JDBC.sql;
      
      import java.sql.*;
      
      public class JDBCDemo3 {
          public static void main(String[] args) {
              //一下代码为链接数据库的
              Connection con = null;
              try {
                  Class.forName("com.mysql.cj.jdbc.Driver");
                  //mydb1在数据库中必须有,如果没有就在Mysql中创建不然就找不到指定位置
                  String url = "jdbc:mysql://127.0.01:3306/test";
                  String username = "root";
                  //数据库密码
                  String passord = "123456";
                  con = DriverManager.getConnection(url,username,passord);
                  Statement stmt = con.createStatement();
                  PreparedStatement ps = con.prepareStatement("select * from tb_stu where id = ?");
                  ps.setInt(1,3);
                  ResultSet rs = ps.executeQuery();
                  while (rs.next()){
                      String id = rs.getString(1);
                      String name = rs.getString("name");
                      String sex = rs.getString("sex");
                      String birthday = rs.getString("birthday");
                      System.out.println("编号:"+id);
                      System.out.println("姓名:"+name);
                      System.out.println("性别:"+sex);
                      System.out.println("生日:"+birthday);
                      System.out.println("=================================================");
                  }
                  con.close();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
              if (con!=null){
                  System.out.println("成功连接数据库连接数据库");
                  System.out.println(con);
              }
          }
      }
      
    3. 输出结果
      java对数据库的基础知识_第8张图片

  4. 添加,修改,删除记录

    1. 通过SQL语句可以对数执行添加,修改和删除操作。可通过PrepaedStatement类的指定参数,动态地对数据表中原有数据进行修改操作,并通过executeUpdate()方法执行跟新语句操作。

    2. 对学生表进行添加,修改和删除操作(创建JDBCDeom4类)
      (id没有设置主键)

      package JDBC.sql;
      import java.sql.*;
      
      public class JDBCDemo4 {
          Connection con;
          public void initConnection(){
              try {
                  Class.forName("com.mysql.cj.jdbc.Driver");
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              }
              try {
                  //通过访问数据库的URL,获取数据库连接对象
                  String url = "jdbc:mysql://127.0.01:3306/test";
                  String username = "root";
                  String passord = "123456";                           //数据库密码
                  con = DriverManager.getConnection(url,username,passord);
                  System.out.println("成功连接数据库");
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
          public void closeConnection() {
              if (con != null) {
                  try {
                      con.close();
                      System.out.println("成功销毁数据库线程");
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
          }
      
          //显示所有学生数据
          public void showAllData(){
              try {
                  Statement stmt = con.createStatement();
                  ResultSet rs = stmt.executeQuery("select * from tb_stu");
      //            ResultSet rs = stmt.executeQuery("select * from tb_stu");
                  while (rs.next()){//如果但钱语句不是最后一条,则进入循环
                      //将列值输出
                      //两种方式都可以
                      String id = rs.getString("id");
                      String name = rs.getString("name");
                      String sex = rs.getString("sex");
                      String birthday = rs.getString("birthday");
                      System.out.println("编号:"+id);
                      System.out.println("姓名:"+name);
                      System.out.println("性别:"+sex);
                      System.out.println("生日:"+birthday);
      //                System.out.print("编号:"+rs.getString("id"));
      //                System.out.print("姓名:"+rs.getString("name"));
      //                System.out.print("性别:"+rs.getString("sex"));
      //                System.out.print("生日:"+rs.getString("birthday"));
                      System.out.println("============================================");
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      
          //添加新学生
          public void add(int id,String name,String sex,String birthday){
              try {
                  String sql = "insert into tb_stu values(?,?,?,?)";
                  PreparedStatement ps =con.prepareStatement(sql);
                  ps.setInt(1,id);                                          //设置编号
                  ps.setString(2,name);                                     //设置名字
                  ps.setString(3,sex);                                      //设置性别
                  ps.setString(4,birthday);                                 //设置出生日期
                  ps.executeUpdate();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      
          //删除指定ID的学生姓名
          public void delete(int id){
              try {
                  Statement stmt = con.createStatement();
                  stmt.executeUpdate("delete from tb_stu where id="+id);
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      
          //修改指定ID的学生姓名
          public void update(int id,String newName){
              try {
                  String sql = "update tb_stu set name =? where id =?";
                  PreparedStatement ps = con.prepareStatement(sql);
                  ps.setString(1,newName);
                  ps.setInt(2,id);
                  ps.executeUpdate();
              } catch (SQLException e) {
                  e.printStackTrace();
              }
          }
      
          public static void main(String[] args) {
              JDBCDemo4 demo = new JDBCDemo4();
              demo.initConnection();
              demo.showAllData();
              System.out.println("--添加新同学--");
              demo.add(5,"法外狂徒张三","男","1990—12—30");
              demo.showAllData();
              System.out.println("———修改编号为2的同学学生姓名———");
              demo.update(2,"李美丽");
              demo.showAllData();
              System.out.println("———删除编号为3的学生———");
              demo.delete(3);
              demo.showAllData();
              demo.closeConnection();
      
          }
      }
      

    3. 输出结果(id没有设置主键说以有多个编号为5)
      java对数据库的基础知识_第9张图片

注意事项

  1. 注意数据库不要导错了(不要问为什么,问就是血的经历 /(ㄒoㄒ)/~~ )
  2. 严格遵守sql语法
  3. 数据库需要自己创建上面有创建过程以及代码(记住添加主键)

你可能感兴趣的:(java,eclipse,mysql,intellij-idea)