JDBC学习篇(二)

JDBC学习篇(二)

JDBC的一种普通版本思路

1 内容

就是直接调用一些类的方法去实现,修改账户密码不方便

且换了一个数据库,就也得重写数据库的业务逻辑

更改性质不好,安全性能也不好,因为使用的是Statement对象

容易出现sql注入问题

2 核心思路

2.1 导入jar包

之前写过的导入jar包的流程

2.2 注册驱动
DriverManager.registerDriver(new Driver());
//注意这个new Drive()对象是com.mysql.jdbc下的一个类,因此需要导入com.mysql.jdbc.Driver
2.3 建立连接
String url="jdbc:mysql://localhost:3306/库名?characterEncoding=utf-8";
//连接你要操作的数据库是那个主机上面的,3306的MySQL这个软件对应的端口号
//zking0618是你要操作的数据表所在的数据库(类似于在dos界面输入use zking0618这条指令)
//characterEncoding=utf-8是保证更新的数据(新增、修改)为中文时,不会出现乱码问题(idea默认是utf8编码格式)
String user="root";
String pwd="root对应的密码";
Connection conn=DriverManager.getConnection(url,user,pwd);
/*因为要处理异常,因此将定义一般在try块的上方*/
2.4 创建数据库操作对象
Statement st=conn.createStatement();
2.5 处理查询结果
String sql="DQL语句/DML语句";
//若sql是DQL语句,需要用ResultSet来接收,通过next()方法和getString方法获取值
ResultSet rs=st.executeQuery(sql);
while(rs.next){
    String 变量名=rs.getString("字段名");
    /*通过字段名获取字段名对应的值,一般java的类的取名会和数据库的字段名保持一致
    即变量名和字段名看起来是一样的内容
    */
    ......
}
/*若sql语句是DML语句,需要用int类型接收,因为返回的是受影响的行数
如果受影响行数不为0,则DML操作成功,否则失败
*/
int count=st.executeUpdate(sql);
2.6.释放资源
/*释放资源的代码一般写在finally代码块中
因为无论你的程序是抛出异常还是没有异常,它都进行finally代码块去进行资源的关闭
关闭资源是调用的.close()方法,但是得要这个对象不为空才能去点方法
因为在释放资源前,需要进行非空判断
先关闭里面的资源,即st.close再去执行conn.close()
原理其实很简单,就是联系生活,外面的门和里面的门都要关,你先把外面的门关掉了,此时就没有办法去关闭里面的那条门了,因次就需要先关闭里面的资源,再去关闭外面的资源
*/
if (st != null) {
       try {
           st.close();
       } catch (SQLException throwables) {
           throwables.printStackTrace();
       } finally {
       }
}
if (conn != null) {
        try {
             conn.close();
        } catch (SQLException throwables) {
             throwables.printStackTrace();
        } finally {
        }
}
/*如果是sql语句是DQL语句的话,在st.close()之前需要rs.close()*/

3 实现

3.1 DQL语句
3.1.1 示例代码
import com.mysql.jdbc.Driver;

import java.sql.*;
import java.util.Date;

public class JDBCTest02 {
    public static void main(String[] args) {
        Connection conn=null;
        Statement st=null;
        String url=null,user=null,pwd=null;
        ResultSet rs=null;
        try {
            //1.注册驱动
            DriverManager.registerDriver(new Driver());
            //2.建立连接
            url="jdbc:mysql://localhost:3306/zlz_temp?characterEncoding=utf-8";
            user="root";
            pwd="123456";
            conn=DriverManager.getConnection(url,user,pwd);
            //3.创建数据库操作对象
            st=conn.createStatement();
            //4.执行sql语句,sql语句里面的末尾不要写分号,查询用executeQuery()方法
            String sql="SELECT * FROM copy_emp WHERE ename='SMITH'";
            rs=st.executeQuery(sql);
            System.out.println("SMITH的信息如下所示:");
            //5.对结果进行处理
            while(rs.next()){
                System.out.println("工号为"+rs.getString("empno"));
                System.out.println("名字为"+rs.getString("ename"));
                System.out.println("职位为"+rs.getString("job"));
                System.out.println("上级领导工号为"+rs.getString("mgr"));
                System.out.println("入职日期"+rs.getString("hiredate"));
                System.out.println("薪水"+rs.getString("sal"));
                System.out.println("津贴"+rs.getString("comm"));
                System.out.println("部门编号为"+rs.getString("deptno"));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //6。关闭资源,从内往外关(后面使用的先关闭)
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                }
            }
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                }
            }
        }
    }
}

3.1.2 示例代码运行截图

在这里插入图片描述

3.3 DML语句
3.1.1 示例代码
/*修改名字为SMITH的员工的津贴为300元*/
import com.mysql.jdbc.Driver;

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

public class JDBCTest01 {
    public static void main(String[] args) {
       Connection conn=null;
       Statement st=null;
       String url=null,user=null,pwd=null;
        try {
            //1.加载驱动
            DriverManager.registerDriver(new Driver());
            //2。建立连接
            url="jdbc:mysql:///zlz_temp?characterEncoding=utf-8";
            user="root";
            pwd="123456";
            conn=DriverManager.getConnection(url,user,pwd);
            //3.创建数据库操作对象
            st=conn.createStatement();
            //4.执行sql语句
            String sql="UPDATE copy_emp SET comm=300 WHERE ename='SMITH'";
            int count=st.executeUpdate(sql);
            //5.对结果集进行处理
            System.out.println(count>0?"更新成功":"更新失败");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //6.释放资源
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                }
            }
        }
    }
}

3.1.2 示例代码运行截图

在这里插入图片描述

3.1.3 数据表原来的数据截图

在这里插入图片描述

3.1.4 数据表更新后的数据截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值