MySQL JDBC

JDBC

  1  概念:Java DataBase Connectivitiy Java数据库连接,Java语言操作数据库

      本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动ar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

  2  快速入门

    步骤:

      1  导入驱动jar包  

        1 复制mysql-connector-java-5.1.20-bin.jar到项目的libs目录下

        2 右键   add as library

      2  注册驱动

      3  获取数据库连接对象 Connection

      4  定义sql

      5  获取执行sql语句的对象 Statement

      6  执行sql,接收返回结果

      7  处理结果

      8  释放资源

 

package itcast;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class jdbc_demo1 {
public static void main(String[] args) throws Exception
  {
    //1. 导入驱动jar包
    //2.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //3.获取数据库的连接对象,第二个参数是用户名,第三个参数是密码
    Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","001224");
    //4.定义sql语句
    String sql="update account set account=500 where id=1";
    //5.获取执行sql的对象 Statement
    Statement stmt=conn.createStatement();
    //6.执行sql
    int count=stmt.executeUpdate(sql);
    //7.处理结果
    System.out.println(count);
    //8.释放资源
    stmt.close();
    conn.close();

  }
}

 

  3  详解各个对象:

    1  DriverManager:驱动管理对象

      功能:

        1  注册驱动

        2  获取数据库连接

        static Connection getConnection(String url,String user,String password)

        参数:

          url:指定连接的路径

           语法: jdbc:mysql://ip地址(域名):端口号/数据库名称

               jdbc:mysql://localhost:3306/db3

           细节:如果连接的是本机mysql服务器,并且mysql服务器默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称

          user:用户名

          password:密码

    2  Connection:数据库连接对象

      功能

        1  获取执行sql的对象

          1  Statement createStatement()

            PreparedStatement prepareStatement(String sql)

           2  管理事务

          开启事务  setAutoCommit(boolean autocommit) 调用该方法设置参数 为false,即开启事务

          提交事务  Commit()

          回滚事务  rollback()

    3  Statement:执行sql的对象

      1  执行sql

        1  boolean execute(String sql):可以执行任意的sql

        2  int executeUpdate(String sql): 执行DML(insert,update,delete)语句

                          DDL(create,alter,drop)语句

              * 返回值:影响的行数,可以通过影响的行数判断DML语句是否执行成功,返回值>0执行成功,反之,则失败

        3  ResultSet executeQuery(String sql):执行DQL(select)语句

       2  练习

        1  account表添加一条记录

        2  account表修改一条记录

        3  account表删除一条记录

package itcast;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbc_demo2 {
public static void main(String[] args)
  {
    Statement stmt=null;
    Connection conn=null;
    //1. 注册驱动
    try {
      Class.forName("com.mysql.jdbc.Driver");
    //2.定义sql
    String sql="insert into account values(null,'wangwu',3000)";
    //3.获取Connection对象
      try {
       conn=DriverManager.getConnection("jdbc:mysql:///db3", "root", "001224");
    //4.获取执行sql的对象 Statement
    stmt=conn.createStatement();
    //5.执行sql
    int count=stmt.executeUpdate(sql);
    //6.处理结果
    System.out.println(count);

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally {
    //7.释放资源
    //stmt.close();
    //避免空指针异常
    if(stmt!=null)
    {
      try {
        stmt.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
      }
    }

    if(conn!=null)
    {
    try {
    conn.close();
      } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
        }
      }
    }

    }
  }

    4  Resultset:结果集对象,封装查询的结果

      boolean next()  游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是,则返回true

      getXxx()  获取数据

        Xxx: 代表数据类型  如:int getInt()  String getString()

        参数:

          1  int:列的编号从1开始  如:getString(1)

          2  String:列的名称  如:getDdouble("balance")

 

 

 

      注意:

       使用步骤:

        1  游标向下移动一行

        2  判断是否有数据

        3  获取数据

    5  PreparedStatement:执行sql的对象

      1.  SQL注入问题:在拼接sql时,由一些sql的特殊关键关键字参与字符串的拼接。会造成安全性问题

        1.  输入用户随便,输入密码:a' or 'a'='a'

        2.  sql:  select * from user where username='fdfdfs' and password=a'or a'a'='a'

       2.  解决sql注入问题:使用PreparedStatement对象来解决

       3.  预编译的SQL:参数使用?作为占位符

       4.  步骤:

        1.导入驱动jar包

        2.注册驱动

        3.获取数据库连接对象Connection  

        4.定义sql

          注意:sql的参数使用?作为占位符。

          如:select * from user where username=? and password=?;

        5.获取执行sql语句的对象PreparedStatement            Connection.prepareStatement(String sql)

        6.给?赋值:

          方法:setXxx(参数1,参数2)

             参数1:问号的位置编号,从1开始

                参数2: ?的值

        6.执行sql,接受返回结果,不需要传递sql语句

        7.处理结果

        8.释放资源

      5.注意:后期都会使用PreparedStatement来完成增删改查的所有操作

        1. 可以防止sql注入

        2. 效率更高

          

 抽取JDBC工具类:JDBCUtils

   目的:简化书写

   分析:

      1  抽取注册驱动

      2  抽取一个方法获取连接对象

        需求:不想传递参数,还要保证工具类的通用性

        解决:配置文件

            jdbc.properties

            url=

            user=

            password=

            

      3  抽取一个方法释放资源    

 

posted @ 2021-10-12 20:52  Cuora  阅读(66)  评论(0)    收藏  举报