MySQL:JDBC

9.JDBC

9.1数据库驱动

在这里插入图片描述

9.2JDBC

在这里插入图片描述

java.sql

javax.sql

还要导入一个数据库驱动包 mysql-connector-java-5.1.47.jar

9.3第一个jdbc程序

程序代码

public class JdbcTest {
    public static void main(String[] args) throws SQLException {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try{
            //注册驱动
            //方式一
            Class.forName("com.mysql.jdbc.Driver");
            //方式二:DriverManager.registerDriver(new Driver());
            //设置连接参数
            String url = "jdbc:mysql://localhost:3306/school?		useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC";
            String username = "root";
            String password = "Li980914";
            //连接数据库
            connection = DriverManager.getConnection(url, username, password);
            //获得statement对象
            statement = connection.createStatement();
            //编写sql语句
            String sql = "select * from subject";
            //执行sql
            resultSet = statement.executeQuery(sql);
            //遍历结果集
            while(resultSet.next()){
                int subjectNo = resultSet.getInt("subjectNo");
                String subjectName = resultSet.getString("subjectName");
                int classHour = resultSet.getInt("classHour");
                int gradeId = resultSet.getInt("gradeId");
                System.out.println(subjectNo);
                System.out.println(subjectName);
                System.out.println(classHour);
                System.out.println(gradeId);
                System.out.println("==================");
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
        	//释放资源
            resultSet.close();
            statement.close();
            connection.close();
        }
    }
}

步骤:

  1. 注册驱动
  2. 设置连接参数
  3. 连接数据库
  4. 获得statement对象
  5. 编写sql
  6. 执行sql
  7. 获得结果集
  8. 遍历结果集
  9. 释放资源

9.4相关对象解释

DriverManager

该类是数据库管理驱动的。

不同的数据库,都有不同的驱动,这些驱动由数据库厂商开发。

该类通过注册不同的驱动,去连接数据库。

//注册驱动
//方式一
Class.forName("com.mysql.jdbc.Driver");
//方式二:DriverManager.registerDriver(new Driver());

Connection

该类是数据库连接类,我们可以通过DriverManager获得连接对象,这个对象相当于数据库连接对象。

相当于你已经进入了数据库。

Statement

Statement类是一个执行sql语句的类。该类有执行增删改查sql的方法。并返回一些对象。

这些方法中我们我们经常用到的是:

executeUpdate()更新方法:返回影响的行数

executeQuery()查询方法:返回结果集

ResultSet

该类是一个结果集类。里面存放了查询的结果。

我们可以通过遍历该结果集获得查询到的结果。

//遍历结果集
while(resultSet.next()){
    int subjectNo = resultSet.getInt("subjectNo");
    String subjectName = resultSet.getString("subjectName");
    int classHour = resultSet.getInt("classHour");
    int gradeId = resultSet.getInt("gradeId");
    System.out.println(subjectNo);
    System.out.println(subjectName);
    System.out.println(classHour);
    System.out.println(gradeId);
    System.out.println("==================");
}

9.5sql注入问题

//输入无sql注入,subjectNo1为用户输入的参数
String password = "1";
String sql = "select * from user where password ='" +subjectNo1 +"'";  
//此时通过该sql语句只能查到对应的password的数据,成功登录。只有密码输入正确才能成功登录。

//sql注入,subjectNo1为用户输入的参数。
String subjectNo1 = "1' or '1=1";
String sql = "select * from user where subjectNo ='" +subjectNo1 +"'";  
//存在sql注入,尽管不知道密码也可以登录,存在安全问题

9.6prepareStatement(解决失去了注入)

public class JdbcTest3 {
    public static void main(String[] args) throws SQLException, IOException {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try{
            //获得连接
            connection = JdbcUtil.getConnection();

            //编写sql
            String sql ="select * from subject where subjectNo = ?";

            //获得statement对象
            preparedStatement = connection.prepareStatement(sql);

            //注入参数
            preparedStatement.setInt(1,2);
            //执行sql
            resultSet = preparedStatement.executeQuery();
            //遍历数据
            while(resultSet.next()){
                int subjectNo = resultSet.getInt("subjectNo");
                String subjectName = resultSet.getString("subjectName");
                int classHour = resultSet.getInt("classHour");
                int gradeId = resultSet.getInt("gradeId");
                System.out.println(subjectNo);
                System.out.println(subjectName);
                System.out.println(classHour);
                System.out.println(gradeId);
                System.out.println("==================");
            }


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.release(connection,preparedStatement,resultSet);
        }
    }
}
//工具类
public class JdbcUtil {
    private static String driver = null;
    private static String url = null;
    private static String username = null;
    private static String password = null;
    static {
        try {
            //读取数据库配置文件
            InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in);
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            //注册驱动
            Class.forName("com.mysql.jdbc.Driver");

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

    //获得连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,username,password);
    }

    //关闭资源
    public static void release(Connection conn, Statement st, ResultSet rs) throws SQLException {
        if(rs != null){
            st.close();
        }
        if(st != null){
            st.close();
        }
        if(conn != null){
            conn.close();
        }

    }

}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页