• 数据库 MySQL Jdbc JDBC的六个固定步骤


    *0 案例:
       a)在JavaScript中使用正则表达式,在JS中正则表达式的定界符是://
        var regexp = /^[0-9]+$/;
        if(regexp.test(num));如果符合正则表达式的规则,返回true,否则返回false。

    1 什么是数据库
       1)SQL=Structure Query Language
       2)存数据的仓库/集合,并有一定的规则结构
       3)SQL是客户端操作数据库一种工具/命令,主要以存取为主

    2 各种常用数据库简介
       Oracle/Java
       SQLServler/Microsoft
       DB2/IBM
       ... ...
       MySQL->Linux+Apache+MySQL+PHP(最适合)

    3 SQL[通用/特定]与数据库的关系
       1)每种关系型数据库都支持的SQL命令,叫通用SQL
       2)每种关系型数据库都根据自身数据库的特点,量身定作的SQL,叫特定SQL

    *4 MySQL数据库的安装,设置,进入和退出
       mysql > mysql -u root -p回车  
               ****回车
       mysql > exit回车

    5 数据库服务器、数据库和表的关系
       1:N:M的关系
    *6 数据在数据库中的存储方式
       参见图所示

    *7 创建/使用/查看/删除数据库
       create database 数据库名;(以分号结束),SQL命令大小写无关  
       show databases;
       use 数据库名;
    *8 修改、备份、恢复数据库数据
       备份:
       c:> mysqldump -u root -p mydb2 > d:mydb2.sql回车(可以无分号结束)
            密码回车
            注意:该SQL命令是MySQL特有的,必须是MySQL环境外执行,即WindowXp环境中执行
       恢复:
       mysql:> source d:mydb2.sql;回车(需要分号结束)
            注意:该SQL命令是MySQL特有的,必须是MySQL环境中执行。

    9 MySQL支持数据类型简介
       (1)Date/Datetime/TimeStamp,定界符使用''或"",但部份数据库可能不支持"",优先推荐''作为定界符,对于日期类型,                                    MySQL数据库有一个的判段-功能
       (2)varchar(变长)/char(定长)
       (3)Text(大于65536字符的数据)/Blob(存储二进制多媒体数据,例如Mp3等),该二类型都有四个子类型,根据存储内容的大                                      小进行选择
       (4)INT型有带符号和无符号之分,int(5)表示int默认为5位,如果插入id值,小于5位,左补空格,如果插入id值,大于5位,按                                照插入值,但必须满足int类型的大小确定
       (5)FLOAT(M,D),D表示小数点后的D位,按四舍五入计算,M表示除小数点外的所有位数总和

    *10 创建/查看/修改/删除表
        create table 表名 
        show create table 表名
        desc 表名
        drop table 表名   
        MySQL(MyISAM数据库引擎和InnoDB(支持表间查询,事务安全,)

    11 MySQL解决插入中文乱码问题(WindowXP平台)
       二种解决方案:
       a)在当前MySQL客户端修改输入和输出的MySQL环境变量为GBK或GB2312,注意,该种方式只在当前窗口中有效
       b)修改MySQL目录下的my.ini文件,将客户端的缺省编码方式改为GBK或GB2312,注意,需要重新启动MySQL服务
    *12 表的 增删改 操作
       a)insert
       b)update
       3)delete from 或truncate table或drop table
         delete from:按行删除表中的所有记录,但会保留表,适合删除数据量不大的数据,可按条件删除
         truncate table:复制原表结构-〉一次性删除整表 -> 自动恢复原表结构,适合删除数据量较大的数据,不能按条件删除
         drop table:删除表本身
         删除记录时,一定要留意表间的关联关系
    *13 表的 查询   操作 
        (1)select distinct/*/列名 from 表名
        (2)select 表达式/对列名加别名 from 表名
           NULL+X=NULL
        (3)where子句,出现在from后面,where是按行筛选
        (4)逻辑运算和关系运算
        (5)排序:NULL值为最小,使用order by子句,默认升序,order by子句必须放置在最后
    14 复合函数
       (1)count()函数,统计之用,不统计NULL值
       (2)sum()函数,统计和之用,不要统计非数值,如果统计非数值,返回0 
    15 表的约束

    16 表的关联

    0 合计函数
      avg()
      max(),min(),当max()和min()函数位于日期类型时,分别取得最近日期和最早日期

    1 表的完整性
      (1)实体完整性:每条记录有一个唯一标识符,通常用无任何业务含义的字段表示
      (2)参照完整性:一张表的某个字段必须引用另一张表的某个字段值
      (3)域完整性:域即单元数据,域中的数值必须符合一定的规则

    2 键的概念
      (1)主键:只有唯一字段
      (2)组合主键:由多个字段组合起来,形成唯一字段
      (3)外键:针对多张表之间的关联

    3 主键的特点
      (1)主键不能重复
      (2)主键不能为NULL
      (3)auto_increment是MySQL特有的,默认从1开始,该ID值与表同生亡
      (4)多人项目中,通常使用UUID来生成唯一的主键值,便于多个合并数据时依然保持实体完整性

    4 唯一约束的特点
      (1)非NULL值不能重复
      (2)可以插入多个NULL值
      (3)'NULL'空串和NULL是不同的概念

    5 非空约束特点
      (1)不能插入NULL值
      (2)主键约束=非NULL约束+唯一约束

    6 外健特点
      (1)外键值必须来源于所引用别一个表主键值,或NULL
    *7 关联关系
      (1)一对一(外健根业务有关) 
      (2)一对多或多对一(外键放置在多方)
      (3)多对多(外健放置在关联表中,即将一个多对多拆分成二个一对多关系)
    8 什么是JDBC?为什么使用JDBC
      1)SUN公司为使Java程序灵活的访问各种不同的关系型数据库提供的规则。
      2)为什么使用JDBC?
        a)降低Java程序操作数据库的成本
        b)使Java程序灵活移植

    *9 祥解JDBC连接数据库的各个步骤
      1)注册驱动:DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        java.sql.Driver(接口)-com.mysql.jdbc.Driver(实现类)
         (首先返回true)boolean acceptsURL(String url)
                  查询驱动程序是否认为它可以打开到给定 URL 的连接。
         (然后)Connection connect(String url, Properties info)
                  试图创建一个到给定 URL 的数据库连接。

        注意:上述代码会向DriverManager注册二次相同的MySQL驱动,其中一次在Driver实现类中
        项目中推荐使用以下代码间接注册数据库驱动:
        Class.forName("com.mysql.jdbc.Driver");

        优点:
            a)只注册一次
            b)无需导入与具体数据库驱动相关的包
      2)获取数据库连接对象:
        Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://127.0.0.1:3306/mydb2","root","root");

    image

        常用数据库URL地址的写法:

            •Oracle—jdbc:oracle:thin:@localhost:1521:sid

            •SqlServer—jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid

            •MySql—jdbc:mysql://localhost:3306/sid

        Mysql的url地址的简写形式: jdbc:mysql:///sid

        Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:

            •createStatement():创建向数据库发送sql的statement对象。

            •prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。

            •prepareCall(sql):创建执行存储过程的callableStatement对象。

            •setAutoCommit(boolean autoCommit):设置事务是否自动提交。

            •commit() :在链接上提交事务。

            •rollback() :在此链接上回滚事务。

        Statement详解

        Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:

            •execute(String sql):用于向数据库发送任意sql语句

            •executeQuery(String sql) :只能向数据发送select语句。

            •executeUpdate(String sql):只能向数据库发送insert、update或delete语句

            •addBatch(String sql) :把多条sql语句放到一个批处理中。

            •executeBatch():向数据库发送一批sql语句执行。

            •clearBatch():清空缓冲

        ResultSet详解

        Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

        ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

            •获取任意类型的数据

            •getObject(int index)

            •getObject(string columnName)

            •获取指定类型的数据,例如:

            •getString(int index)

            •getString(String columnName)

            •提问:数据库中列的类型是varchar,获取该列的数据调用什么方法?Int类型呢?bigInt类型呢?Boolean类型?

        ResultSet还提供了对结果集进行滚动的方法:

            •next():移动到下一行

            •previous():移动到前一行

            •absolute(int row):移动到指定行

            •beforeFirst():移动resultSet的最前面。

            •afterLast() :移动到resultSet的最后面。

      3)关闭流
        a)依次按resul->statement->connection顺序关闭
        b)在能完成业务的情况下,尽早关闭

           Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。

           特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统死机。Connection的使用原则是尽量晚创建,尽量早的释放。

            为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

    package cn.itcast.web.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    //体验JDBC开发的过程
    public class Demo1 {
        public static void main(String[] args) throws Exception {
            
            //注册数据库的驱动
            //DriverManager.registerDriver(new Driver());
            
            //利用反射机制间接加载数据库驱劝
            Class.forName("com.mysql.jdbc.Driver");
            
            //取得与MySQL数据库连接的桥梁
            Connection conn = DriverManager.getConnection(
                    "jdbc:mysql://127.0.0.1:3306/mydb2","root","root");
            
            //创建封装SQL命令的对象
            String sql = "select * from user";
            Statement stmt = conn.createStatement();
            
            //执行SQL命令,并返回符合条件的记录集合
            ResultSet rs = stmt.executeQuery(sql);
            
            //处理结果集合
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                float salary = rs.getFloat("salary");
                System.out.println(id+":"+name+":"+gender+":"+salary);
            }   
            //依次关闭所用过的连接对象
            rs.close();
            stmt.close();
            conn.close();
        }
    }

    *10 JDBC的六个固定步骤
       1,注册数据库驱动[利用反射]
       2,取得数据库连接对象Connection
       3,创建SQL对象
       4,执行SQL命令,并返回结果集
       5,处理结果集
       6,依次关闭结果集    

    package cn.itcast.web.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    //重构JDBC开发的过程
    public class Demo2 {
        public static void main(String[] args) {
            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://127.0.0.1:3306/mydb2";
            String user = "root";
            String password = "root";
            String sql = "select * from user";
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, user, password);
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String gender = rs.getString("gender");
                    float salary = rs.getFloat("salary");
                    System.out.println(id + ":" + name + ":" + gender + ":"+ salary);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(rs!=null){//轻量级,创建和销毁rs所需要的时间和资源较小
                    try {
                        rs.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if(stmt!=null){//轻量级,创建和销毁rs所需要的时间和资源较小
                    try {
                        stmt.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if(conn!=null){//重量级,创建和销毁rs所需要的时间和资源较小
                    try {
                        conn.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                //JVM
            }
        }
    }

    完善的版本:

    package cn.itcast.web.jdbc;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    //重构JDBC开发的过程
    public class Demo3 {
        public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "select * from user";
            try {
                 conn= JdbcUtil.getMySqlConnection();
                 stmt = conn.createStatement();
                 rs = stmt.executeQuery(sql);
                 while(rs.next()){
                     String name = rs.getString("name");
                     System.out.println(name);
                 }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
    }
    package cn.itcast.web.jdbc;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Properties;
    
    //JDBC工具类:关闭流和取得连接
    public final class JdbcUtil {
        
        private static String driver;
        private static String url;
        private static String user;
        private static String password;
        
        //静态块:加载文件
        static{
            Properties props = new Properties();
            InputStream is = Demo3.class.getClassLoader().getResourceAsStream("cn/itcast/web/jdbc/db.properties");
            try {
                props.load(is);
            } catch (Exception e) {
                e.printStackTrace();
            }
            driver = props.getProperty("driver");
            url = props.getProperty("url");
            user = props.getProperty("user");
            password = props.getProperty("password");
        }
        
        //静态块:注册驱动
        static{
            try {
                Class.forName(driver);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //取得连接
        public static Connection getMySqlConnection(){
            Connection conn = null;
            try {
                conn = DriverManager.getConnection(url,user,password);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
        //关闭连接    
        public static void close(ResultSet rs){
            if(rs!=null){
                try {
                    rs.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        public static void close(Statement stmt){
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        public static void close(Connection conn){
            if(conn!=null){
                try {
                    conn.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    db.properties:

    driver = com.mysql.jdbc.Driver
    url = 
    jdbc:mysql://127.0.0.1:3306/mydb2
    user = root
    password =root

    *11 使用JDBC完成CURD操作
       insert/update/delete----Statement.executeUpdate(sql):返回值表示影响记录的行数
       select------------------Statement.exeucteQuery():返回值表示符合条件的记录   
       create------------------ ?
       drop-------------------- ?

    package cn.itcast.web.jdbc;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import org.junit.Test;
    
    //基于JDBC的CURD操作
    public class Crud {
        @Test
        public void create(){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "insert into user(name,gender,salary) values('西西','女',3000)";
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                boolean flag = stmt.execute(sql);
                System.out.println("flag="+flag);
                //int i = stmt.executeUpdate(sql);
                //System.out.println(i>0?"成功":"失败");
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        @Test
        public void read(){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "select * from user where gender='male'";
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                boolean flag = stmt.execute(sql);
                System.out.println("flag="+flag);
                /*
                rs = stmt.executeQuery(sql);
                while(rs.next()){
                    String name = rs.getString("name");
                    String gender = rs.getString("gender");
                    System.out.println(name+":"+gender);
                }
                */
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        @Test
        public void update(){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "update user set gender='female' where id = 8";
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                int i = stmt.executeUpdate(sql);
                System.out.println(i>0?"成功":"失败");
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        @Test
        public void delete(){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "delete from user where salary IS NULL";
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                int i = stmt.executeUpdate(sql);
                System.out.println(i>0?"成功":"失败");
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        @Test
        public void read(String name){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "select * from user where name='"+name+"'";
            System.out.println("sql="+sql);
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);
                while(rs.next()){
                    //while(rs!=null)
                    name = rs.getString("name");
                    String gender = rs.getString("gender");
                    System.out.println(name+":"+gender);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        public void createTable(String tableName){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "create table if not exists "+tableName+"(id varchar(40) primary key)";
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                boolean flag = stmt.execute(sql);
                System.out.println("flag="+flag);
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        public void dropTable(String tableName){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String sql = "drop table if exists " + tableName;
            try {
                conn = JdbcUtil.getMySqlConnection();
                stmt = conn.createStatement();
                boolean flag = stmt.execute(sql);
                System.out.println("flag="+flag);
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcUtil.close(rs);
                JdbcUtil.close(stmt);
                JdbcUtil.close(conn);
            }
        }
        public static void main(String[] args) {
            Crud crud = new Crud();
            //crud.read();
            //crud.create();false
            crud.read(" 'or true or' ");
            //crud.createTable("system");
            //crud.dropTable("system");
        }
    }
  • 相关阅读:
    POJ 2991(线段树)
    UVa_1592
    紫书 -- 大整数类
    在结构体中添加成员函数/C++
    双向队列
    用埃氏筛法生成质数表
    poj 3687(拓扑排序)
    它们其实都是“图”-- 最小生成树
    最小生成树(MST, Minimum Spanning Tree)
    他们其实都是“图”--最短路
  • 原文地址:https://www.cnblogs.com/sunhan/p/3542140.html
Copyright © 2020-2023  润新知