zoukankan      html  css  js  c++  java
  • JAVA基础JDBC(一)


    一、JDBC的简介

      JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,由与各种数据
    库都有着一套自己的规范,JAVA对其操作的方法也各不相同,这对我们的开发造成了很大的困难。所以Sun公司提
    供了一种标准化的规范  -  JDBC,所有想要和JAVA进行连接的数据库都要遵守这个标准。它由一组用Java语言编写
    的类和接口来实现的。
      就像电脑的显卡驱动一样,想要使用显卡首先要安装显卡驱动。连接数据库也是一样,想要使用谁家的数据库
    ,先要导入数据库的驱动jar包。拿mySql举例,如果想要和mySql数据进行连接连接,第一步要做的就是导入mySQL
    的驱动包 - mysql-connector-java-5.1.39-bin.jar,然后设置连接路径,用户名和密码进行连接。JDBC是接口,
    而驱动是接口的实现,每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库。

    二、JDBC的使用

      其实数据库的连接和我们用QQ的步骤是一样的。首先你要有一个QQ的安装包进行安装(导入数据库的驱动包),
    然后找到你的QQ启动文件(设置连接路径),输入用户名和密码进行登录(设置数据库的登录名和密码)。双击好
    友头像打开聊天界面(获得语句执行平台),在聊天框里输入想要发送的数据(编写SQL语句),点击发送按钮发送
    消息(执行语句),关闭聊天框(释放资源)。总结起来可以分为7步:
      1、导入相关数据库的驱动包
      2、注册驱动.
      3、获得连接.
      4、获得语句执行平台.
      5、执行sql语句.
      6、处理结果.
      7、释放资源.

    (一)导入相关数据库的驱动包

      为了方便管理jar包,我们在项目路径下新建一个lib文件夹用来专门存放炸包。

      1、
      
    2、右键要添加的jar包,选择Add to BuildPath添加jar包。

    (二)数据库驱动的注册

      JDBC定义了一个标准的驱动接口Driver(java.sql包下的),每种数据库的驱动包都提供了该类的实现类。拿
    mySql举例:mySql驱动包提供了实现类:Driver类(com.mysql.jdbc包下的)。工具类DriverManager提供了注册驱
    动的方法 registerDriver()。但是不推荐使用这种方法注册驱动,因为:
      
    1、通过观察源码发现这样注册驱动会导致驱动被注册了2次。
      2、不易于后期的维护和修改。
      
    而通过查看Driver类(com.mysql.jdbc包下的)发现在这个类的静态代码块已经将自己给注册了,所以就可以
    通过反射的方法进行注册。
     
    举例:

    Class.forName("com.mysql.jdbc.Driver");

    (三)数据库连接的获取

      通过工具类DriverManager提供的getConnection(url,username,password)方法就可以获得数据库的连接。三个
    参数分别为:
      1、url:连接数据库的位置、他由三部分组成的,之间用 : 进行分割。
        * 第一部分是jdbc,表示连接数据库的标准,是固定的;
        * 第二部分是数据库名称,可以将前两部分理解为网址上的https: ,同网址一样他与第三部分的数据库路径
    也是由//分割的;
        * 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服
    务器的IP地址(localhost)、端口号(3306),以及你要连接的库的名称(DATABASE)组成;
      2、username:数据库的用户名,每个数据库在安装的时候都会让你设置用户名和密码。
      3、password:数据库连接的密码。
      举例:

    String url="jdbc:mysql://localhost:3306/mydb";
    String user="boom";
    String pwd="boom";
    //获取连接
    Connection connection = DriverManager.getConnection(url, user, pwd);

    (四)获取SQL语句的执行平台与执行SQL语句

      找到要打开的“软件”输入用户名和密码之后,就要获得“聊天窗口了”。JDBC中有2种方式获得SQL语句的执行平台,调
    用者都是连接类Connection。
      1、创建一个 Statement 对象来将 SQL 语句发送到数据库 :createStatement(),这种方法执行SQL语句的话,向
    数据库传入的参数要拼到sql里,有注入安全问题。
      2、创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库 :prepareStatement(String sql) ,
    这种方法执行SQL语句时会用占位符给参数占位,通过方法给占位符赋值,不会有注入问题。
    数据库的增删改查对应着2个方法,查询方法 - executeQuery,增删改方法 - executeUpdate() 。
      * Statement
      1、执行给定的 SQL 语句,该语句返回单个 ResultSet 对象 :executeQuery(String sql)
      2、执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句
    (如SQL,DDL语句) : executeUpdate(String sql) 返回值为int - 影响的行数。
      * PreparedStatement
      1、在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象 :executeQuery()
      2、在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)
    语句,比如 INSERT、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句 :executeUpdate()
      3、将指定参数设置为给定 Java String 值 : setString(int parameterIndex - 占位符位置从一开始, String x)
      set....后边的类型根据你要传入值得类型来定,如:setInt(int parameterIndex, int x),具体可传参数类型请看JDK。
      * ResultSet(结果集)
      1、以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值 :
          getString(int columnIndex - 从第一列开始) ,不推荐。
      2、以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值 :
          getTime(int columnIndex - 列名) ,列名一定要写对哦!!!推荐。


      栗子1(Statement的查询):

     1 //注册驱动
     2 Class.forName("com.mysql.jdbc.Driver");
     3 String url="jdbc:mysql://localhost:3306/mydb";
     4 String user="root";
     5 String pwd="root";
     6 //获取连接
     7 Connection connection = DriverManager.getConnection(url, user, pwd);
     8 //获取SQL语句的执行平台
     9 Statement statement = connection.createStatement();
    10 //编写SQL语句
    11 String sql="SELECT * FROM sort;";
    12 //执行SQL语句返回结果集
    13 ResultSet query = statement.executeQuery(sql);
    14 //打印列名(为了好看)
    15 System.out.println("sid\tsname\tsprice\tsdesc");
    16 System.out.println("-------------------------------");
    17 //循环处理结果集
    18 while(query.next()){
    19 System.out.println(query.getString("sid")+"\t"+query.getString("sname")+"\t"
    20 +query.getString("sprice")+"\t"+query.getString("sdesc"));
    21 }
    22 //关闭资源
    23 query.close();
    24 connection.close();
    25 statement.close();
    26 }


      栗子2(Statement的修改):

    //注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    String url="jdbc:mysql://localhost:3306/mydb";
    String user="root";
    String pwd="root";
    //获取连接
    Connection connection = DriverManager.getConnection(url, user, pwd);
    //获取SQL语句的执行平台
    Statement statement = connection.createStatement();
    //执行SQL语句
    int row = statement.executeUpdate("INSERT INTO sort(sname,sprice,sdesc) VALUES('充气娃娃',160,'羞羞的');");
    System.out.println(row);
    //关闭资源
    query.close();
    connection.close();
    statement.close();
    }


      栗子3(PreparedStatement的模拟登录的功能):

    public static void main(String[] args) throws Exception {
    //注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //获得连接
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入用户名");
    String user = sc.nextLine();
    System.out.println("请输入密码");
    String pwd = sc.nextLine();
    //根据输入的参数去库里查询,使用?占位符
    String s="SELECT * FROM users WHERE uuser=? AND upwd=?";
    //获取SQL语句的执行平台
    PreparedStatement statement = connection.prepareStatement(s);
    //为占位符赋值
    statement.setString(1, user);
    statement.setString(2, pwd);
    //执行SQL语句
    ResultSet query = statement.executeQuery();
    //如果不为空
    if (query.next()) {
    System.out.println("登陆成功");
    }else {
    System.out.println("登录失败");
    }
    //关闭资源
    query.close();
    statement.close();
    connection.close();
    }
    我们在键盘上留下的余温,也将随时代传递到更远的将来~
  • 相关阅读:
    Vimium -为键盘而生
    Sublime Text 3 修改配色主题【侧边框之...】
    MyBatis-Plus文档地址
    解决:电脑新建文件后需要刷新才显示
    技术书籍博客
    js获取浏览器当前窗口的高度长度
    DataGridView隐藏列用CSS实现
    判断windows操作系统平台
    iis7.5错误 配置错误
    vmware安装mac
  • 原文地址:https://www.cnblogs.com/0813lichenyu/p/7803603.html
Copyright © 2011-2022 走看看