JDBC(二)完成CRUD

2017-08-12  本文已影响79人  贾里

1.获取数据库连接

(1)使用JDBC的准备环境:

驱动包.png

(2)DBC操作第一步:获取JDBC连接对象/Connection对象.

操作步骤(贾琏):

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

为什么说上述代码,在完成加载注册驱动?
上述代码的作用:
1):把com.mysql.jdbc.Driver这一份字节码加载进JVM.
2):当一份字节码被加载进JVM,就会执行其静态代码块。而其底层的静态代码块在完成注册驱动工作.

加载注册驱动.png

通过DriverManager的getConnection方法创建Connection对象.

Connection  conn = DriverManager.getConnection(url,username,password);
url=jdbc:mysql://localhost:3306/jdbcdemo
//如果连接的是本机的MySQL,并且端口是默认的3306,则可以简写:url=jdbc:mysql:///jdbcdemo
username=root
password=admin

可以通过 show processlist命令来查看有几个MySQL进程.

(3)备注

注册驱动规范.png

2.JDBC常用的API

(1)操作JDBC的步骤口诀:

贾琏欲执事:
1:载注册驱动.
2:获取接对象.
3:创建/获取句对象.
4:行SQL语句.
5:放资源.

(2)重要接口

Statement createStatement()          //:创建一个静态的语句对象.
PreparedStatement prepareStatement(String sql)  //:创建一个预编译语句对象. 此时参数sql:表示带有占位符(?)的SQL语句的模板.
close()://释放资源
int executeUpdate(String sql)://执行DDL/DML语句.
      //若当前SQL是DDL语句,则返回0.
      //若当前SQL是DML语句,则返回受影响的行数.
ResultSet executeQuery(String sql)//:执行DQL语句,返回结果集.
close()//:释放资源

常用方法:

void setXxx(int parameterIndex,Xxx value)//:设置第几个占位符的真正参数值.
int executeUpdate()://执行DDL/DML语句. 注意:没有参数
      若当前SQL是DDL语句,则返回0.
      若当前SQL是DML语句,则返回受影响的行数.
ResultSet executeQuery()//:执行DQL语句,返回结果集.
//close():释放资源
//Xxx表示数据类型,比如String,int,long,Date等.

常用方法:

boolean next()://判断当前光标是否能向下移动,如果能向下移动返回true,并同时将光标移动到下一行.
Xxx getXxx(int columnIndex)://取出当前光标所在行的第columnIndex列的数据(columnIndex从1开始算).
Xxx getXxx(String columnName)://取出当前光标所在行的列名为columnName列的数据,columnName可以是别名.
//Xxx表示数据类型,比如String,int,long,Date等. 推荐使用列名来取数据.
close()://释放资源

3.SQL语言的分类

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL*。

如:

  1. GRANT:授权。
  2. ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。 回滚---ROLLBACK 回滚命令使数据库状态回到上次最后提交的状态。其格式为: SQL>ROLLBACK;
  3. COMMIT [WORK]:提交。

4.JDBC的DDL(创建表和异常处理)

需求:
创建一张t_student表:id/name/age:

CREATE TABLE `t_student` (`id` bigint(20) PRIMARY KEY AUTO_INCREMENT,`name` varchar(20),`age` int(11));
public void createTable() throws Exception{
        String sql="CREATE TABLE `t_student` (`id` BIGINT (20) PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR (20),`age` INT (11))";
        //1.加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql:///jarry","root","123456");
        //3.创建/获取语句对象
        Statement st=conn.createStatement();
        //4.执行SQL语句
        st.executeUpdate(sql);
        st.close();
        conn.close();
    }

    public void createTableException(){
        String sql="CREATE TABLE `t_student` (`id1` BIGINT (20) PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR (20),`age` INT (11))";
        //声明资源
        Connection conn = null;
        Statement st = null;
        try{
            //可能出现异常
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection("jdbc:mysql:///jarry","root","123456");
            st=conn.createStatement();
            st.executeUpdate(sql);
            
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //释放资源
            try {
                if(st!=null){
                    st.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }finally {
                try {
                    if(conn!=null){
                        conn.close();
                    }
                } catch (Exception e3) {
                    e3.printStackTrace();
                }
            }
        }
    }
    public void createEXceptionByJava7(){
        String sql="CREATE TABLE `t_student` (`id2` BIGINT (20) PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR (20),`age` INT (11))";
        try {
            //1.获取连接对象
            Connection conn=DriverManager.getConnection("jdbc:mysql:///jarry","root","123456");
            //2.创建/获取语句对象
            Statement st=conn.createStatement();
            //3.执行SQL语句,可能会出现异常
            st.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

5.JDBC的DML操作(增、删、改)

    public void insert() throws Exception{
        String sql="INSERT INTO t_student(name,age) VALUES('jarry',20)";
        //1.加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql:///jarry","root","123456");
        //3.创建/获取语句对象
        Statement st=conn.createStatement();
        //4.执行SQL
        st.execute(sql);
        //5.释放资源
        st.close();
        conn.close();
    }
public void update()throws Exception{
        String sql="UPDATE t_student SET name='jihang' ,age=18 WHERE name='jarry'";
        //1.加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql:///jarry","root","123456");
        //3.创建/获取语句对象
        Statement st=conn.createStatement();
        //4.执行SQL
        st.execute(sql);
        //5.释放资源
        st.close();
        conn.close();
    }
public void delete()throws Exception{
        String sql="DELETE FROM t_student WHERE name ='jihang'";
        //1.加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接对象
        Connection conn=DriverManager.getConnection("jdbc:mysql:///jarry","root","123456");
        //3.创建/获取语句对象
        Statement st=conn.createStatement();
        //4.执行SQL
        st.execute(sql);
        //5.释放资源
        st.close();
        conn.close();
    }

发现:执行DDL和DML的语句的操作模板是一模一样的,仅仅是SQL语句不一样.

6.JDBC的DQL操作(查询)

// 查询数量
    public void queryCount() throws Exception {
        String sql = "SELECT COUNT(id) count FROM t_product";
        // 加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 获取连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///jarry",
                "root", "123456");
        // 创建/获取语句对象
        Statement st = conn.createStatement();
        // 执行
        ResultSet rs = st.executeQuery(sql);
        if (rs.next()) {
            long rows = rs.getLong("count");
            //long rows = rs.getLong(1);
            System.out.println(rows);
        }
        rs.close();
        st.close();
        conn.close();
    }
//查询单个细节
    public void querySingle() throws Exception {
        String sql = "SELECT * FROM t_product WHERE id =1";
        // 加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 获取连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///jarry",
                "root", "123456");
        // 创建/获取语句对象
        Statement st = conn.createStatement();
        // 执行
        ResultSet rs = st.executeQuery(sql);
        if (rs.next()) {
            long rows = rs.getLong("id");
            String name = rs.getString("name");
            String salePrice = rs.getString("sale_price");
            long type = rs.getInt("type");
            System.out.println(rows+"--"+name+"--"+salePrice+"--"+type);
        }
        rs.close();
        st.close();
        conn.close();
    }
//查询全部细节
    public void queryAll() throws Exception {
        String sql = "SELECT * FROM t_product";
        // 加载注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 获取连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///jarry",
                "root", "123456");
        // 创建/获取语句对象
        Statement st = conn.createStatement();
        // 执行
        ResultSet rs = st.executeQuery(sql);
        while (rs.next()) {
            long rows = rs.getLong("id");
            String name = rs.getString("name");
            String salePrice = rs.getString("sale_price");
            long type = rs.getInt("type");
            System.out.println(rows+"--"+name+"--"+salePrice+"--"+type);
        }
        rs.close();
        st.close();
        conn.close();
    }

7.SQL和Java的对应类型

java.util.Date和java.sql.Date有什么关系:
java.sql.Date是java.util.Date的子类.

Date的数据关系.png 数据库和java的数据类型.png 数据库的对应类型.png

JavaWeb-目录

上一篇 下一篇

猜你喜欢

热点阅读