JDBC以及Mysql简介

JDBC(Java Date Base Connectivity)

      Java数据库连接。是一种用于执行SQL语句的Java API。简单来说就是通过Java去操作数据库,向数据库发送SQL语句,执行增删改查等操作。

      Java对数据的连接定了一定的规则,java.sql.Driver接口,只要数据库实现这个接口,就可以和java程序进行连接; 每一个数据库的驱动JDBC Driver,都实现了java.sql.Driver接口,所以都可以和java建立连接 ;mySql的数据库驱动com.mysql.jdbc.Driver 实现了 java.aql.Driver接口

核心类:

     核心类1、java.sql.DriverManager

            - 用来管理数据库驱动和获取数据库连接

            - 方法:

                static Connection getConnection(String url, String user, String password)   并返回一个Connection(连接)对象

                - 用来根据数据库的用户名、密码、地址获取数据库连接

     核心类2、java.sql.Connection       

            - 代表的是数据库连接

            - 方法:

                  Statement createStatement()   返回一个SQL执行器,由它来完成对数据库的操作(存在sql注入的问题

                  PreparedStatement  PreparedStatement ()    返回一个SQL执行器,由它来完成对数据库的操作

                - 用来创建一个SQL的执行器。

                  void close() 

                -关闭当前的数据库连接,释放它所创建的JDBC资源

              【以后千万不能用】java.sql.Statement(以后使用JDBC时绝对不能使用此类,因为它存在着sql语句注入的问题,不安全,以后采用PreparedStatement)  

     核心类3、java.sql.PreparedStatement   

        - 预编译的SQL语句

        - 使用PreparedStatement执行SQL语句,它会先对SQL的语法进行检查,并且确定SQL的语义。

        - 优点:

            1.防止SQL注入,预编译的SQL会将SQL语句预编译为一个类似于方法的东西,

                而那些变量会以参数的形式传递进去,这样的好处就是不会因为特殊的参数,而影响到SQL语句的语义

            2.SQL语句使用占位符来替换变量,不用再进行复杂拼串操作,简化操作。

                同时增加我们的SQL语句的可读性。

            3.使用PreparedStatement执行SQL语句,它会预先对SQL语句进行编译,

                执行时不再需要重复编译,当SQL语句需要多次执行时,会提升SQL的运行的速度。

       核心类4、java.sql.ResultSet       

                 - 结果集,执行SQL语句以后得到的查询结果,在ResultSet中封装

                 - 方法:

                     boolean next() 

                     - 这个方法可以控制光标向下移动一行

                     - 返回值是一个布尔值,如果读到了after last则返回false,否则返回true

           void close()

           -关闭当前的结果集       

标准代码

//设置四个参数
String username = "root";
String password = "root";
String driverClass = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";      
//加载驱动
Class.forName(driverClass);      
//分别声明Connection Statement ResultSet三个变量
Connection conn = null;
Statement stat = null;
PreparedResultSet rs = null;     
try {
    //获取Connection对象
    conn = DriverManager.getConnection(url, username, password);
    String sql = "SELECt * FROM tb_user WHERE username=? AND password=?";
    //获取PreparedStatement对象
    prestat = conn.createStatement(sql);
    pstmt.setString(1, "admin");
pstmt.setString(2, "123456");
    //执行sql获取ResultSet对象
    rs = prestat .executeQuery();
//创建一个while循环用于读取ResultSet中的数据
while(rs.next()){
    //获取第一列的数据
    int id = rs.getInt(1);
    //获取第二列的数据
    String um = rs.getString(2);
    //输出数据
    System.out.println(id+"--"+um);
}
    
} catch (SQLException e) {
    e.printStackTrace();
} finally{
    //关闭rs
    if(rs!=null){
      try {
          rs.close();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
}
           
    //关闭stat
    if(prestat != null){
       try {
           prestat .close();
       } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
    }
    
    //关闭conn
    if(conn != null){
       try {
           conn.close();
       } catch (SQLException e) {
           e.printStackTrace();
       }
    }
}

JDBC批处理

//获取connection
conn = JDBCUtils.getConnection();
//设置sql语句
String sql = "INSERT INTO customer (name,age,gender) VALUES(?,?,?)";
//获取PreparedStatement对象
pstmt = conn.prepareStatement(sql);
//使用for循环批量设置参数
for (int i = 0; i < 10000; i++) {
    pstmt.setString(1, NameUtils.getName());
    pstmt.setInt(2, NameUtils.getAge());
    pstmt.setString(3, NameUtils.getGender());
    //每设置完一组参数,将参数添加到批量操作中
    pstmt.addBatch();
}
//执行批量操作
pstmt.executeBatch();
  • 注意MySQL默认是不支持批量处理的,需要在jdbc.properties文件中的URL地址中加上如下参数:
    • rewriteBatchedStatements=true
    • 低版本的mysql的驱动不支持批处理,所以使用时注意使用最新版的驱动mysql-connector-java-5.1.37-bin.jar
    • 使用value关键字同样也不支持批处理,所以在mysql中不要使用value,一律使用values

数据库简介

        - DataBase(数据库)
        - 存储数据的仓库
        - 关系型数据库
        - 关系型数据库中保存全都是表格(Table)
        - 数据库的优点:
               1.可以保存大量的信息
               2.有较好的查询性能
        - 常见数据库:
            - MySQL --> 甲骨文
            - DB2 --> IBM
            - Oracle --> 甲骨文
            - SQL Server --> 微软

SQL语句分为以下三种类型:

 DDL: DATA Definition LANGUAGE 数据定义语言  
 DML: DATA Manipulation LANGUAGE 数据操纵语言:增、删、改、查等
 DCL: DATA Control LANGUAGE 数据控制语言
①DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
    CREATE TABLE:创建数据库表
    ALTER TABLE:更改表结构、添加、删除、修改列长度
    DROP TABLE:删除表
    CREATE INDEX:在表上建立索引
    DROP INDEX:删除索引
②DML用于查询与修改数据记录,包括如下SQL语句:
    INSERT:添加数据到数据库中
    DELETE:删除数据库中的数据
    UPDATE:修改数据库中的数据
    SELECT:选择(查询)数据
    SELECT是SQL语言的基础,最为重要。
③DCL用来控制数据库的访问,包括如下SQL语句:
    GRANT:授予访问权限
    REVOKE:撤销访问权限
    COMMIT:提交事务处理
    ROLLBACK:事务处理回退
    SAVEPOINT:设置保存点
    LOCK:对数据库的特定部分进行锁定

常用数据类型

    - 字符串
           CHAR
                    - 定长字符串,char的长度是固定的
                        比如:CHAR(10),长度永远为10
                            如果内容的长度不够10,则自动在字符串后边补空格
                        char型数据在保存时会自动去掉后边的空格
                    - 一般我们使用char型来保存一些长度固定的数据,身份证号
                    - CHAR的最大长度是255   
           VARCHAR
                    - 可变长度的字符串,必须指定长度
                    - 最大长度65535
   - 数值
           INT
                    - 整型
                    - 创建int类型也可以指定长度
                    - int(11),默认长度也是11,所以在创建int型的时候不用指定长度
           DOUBLE(M,D)
                    - 浮点型
                    - 表示浮点数
                    - 声明double可以指定一个长度
                       double(5,2) --> 表示数字长度是5位,其中有两位小数
           DECIMAL(M,D)
                    - 浮点类型
                    - 十进制精确计算的浮点类型
                    - DECIMAL使用方式和DOUBLE类似,也是可以声明一个长度 DECIMAL(6,2)
                    - 一般涉及到钱的数据时我们需要使用
    - 时间
           DATE
                    - 只保存日期
                    - 2016-1-9
           TIME
                    - 只保存时间
                    - 11:21:00
           DATETIME
                    - 同时保存时间和日期
                    2016-1-9 11:21:00
           TIMESTAMP
                    - 保存时间戳
                    - 时间戳值:1970-1-1 0:0:0 到当前时间的一个毫秒数
                    - 时间戳默认在数据被修改后自动更新

猜你喜欢

转载自blog.csdn.net/wxd_1024/article/details/84841552