JDBC基础学习笔记

  • JDBC的理解:

JDBC是允许便捷式访问底层数据库的应用程序接口,JDO、Hibernate、MyBatis等只是更好的封装了JDBC。

 

  • JDBC的连接步骤:

1、注册驱动:

//反射机制
Class.forName("com.mysql.jdbc.Driver");

2、获取连接:

//可使用.properties配置文件来声明URL, USERNAME, PASSWORD
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);

3、获取预编译数据库操作对象:

// Statement ps = con.createStatement();
String sql = "sql语句";
PreparedStatement ps =  con.prepareStatement(sql);

4、执行SQL:

ResultSet rs = ps.executeUpdate();

5、处理结果集

6、释放资源:(顺序执行)

rs.close();
ps.close();
con.close();

 

  • PreparedStatement与Statement的区别:

1、PreparedStatement对象所代表的SQL语句中的参数用问号(?)来表示,执行效率高,能够避免sql注入,更安全。

2、Statement对象所代表的SQL语句中的参数不使用占位符表示,执行效率低,有sql注入的风险,缺乏安全性。

 

  • SQL注入的现象与解决方案:

1、SQL注入现象:

用户输入信息含有SQL语句的关键字,并且参与了sql的编译过程,导致sql语句原意扭曲。

2、解决办法:

采用PrepareStatement对sql语句框架进行预编译,再传值。

 

  • JDBC使用:

相关资料 密码:007j

1、调用工具类:

//JDBC工具库

import java.sql.*;
// JdbcUtil obj = new JdbcUtil();  obj.getCon()
// JdbcUtil obj = new JdbcUtil();  obj.createStatement();
// JdbcUtil.getCon();
public class JdbcUtil {
    //final String URL="jdbc:mysql://localhost:3306/数据库名";
    final String URL="jdbc:mysql://localhost:3306/student";
    final String USERNAME="root";
    //final String PASSWORD="密码";
    final String PASSWORD="123456";
    PreparedStatement ps= null;
    Connection con = null;

    //注册驱动:将jar包中driver实现类加载到JVM中
    static{
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //获取连接:封装连接通道创建细节
    public  Connection   getCon(){

        try {
            con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }

    //获取预编译数据库操作对象:封装交通工具创建细节(预编译)
    public  PreparedStatement createStatement(String sql){

        try {
            ps =  getCon().prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return ps;
    }
    //释放资源:ps与con销毁细节 insert,update,delete
    public  void close(){
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(con!=null){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

    //select: ps,con,rs
    public  void close(ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        close();
    }
}

2、业务逻辑层:

   //JDBC封装库
    private JdbcUtil util = new JdbcUtil();

    @Override
    //用户注册(SqlName:实体类)
    public int add(SqlName sqlName) {
        String sql = "insert into users(userName,pword)" + " values(?,?)";
        //预编译
        PreparedStatement ps = util.createStatement(sql);
        int result = 0;
        try {
            //获取参数
            ps.setString(1, sqlName.getUserName());
            ps.setString(2, sqlName.getPword());
            result = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            util.close();
        }
        return result;
    }

 

 

 

posted on 2021-12-29 17:19  爱文(Iven)  阅读(56)  评论(0编辑  收藏  举报

导航