Все еще нужно изучать JDBC? Если да, то сколько вы должны знать?

Java Java EE

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мою избранную статью на GitHub, Welcome Star.:GitHub.com/Zhongf UC очень…

Не знаю, писали ли вы JDBC в своей работе.Я ходил в небольшую компанию на стажировку на младших курсах.В ней используется JDBC, но он инкапсулирует несколько классов инструментов. При написании кода вы все еще можете чувствовать "Вот настоящий реальный код JDBC"

Сейчас разработка в основном Mybatis, а также есть Hibernate или Spring Data JPA, используемые компанией. Часто разные проекты разрабатываются разными программистами, и технология может быть не полностью унифицирована на уровне компании, вполне возможно использовать Mybatis для одного проекта и Hibernate для одного проекта.

не важно чтоORMВсе фреймворки инкапсулированы в JDBC, поэтому JDBC еще нужно изучить.

Что такое ОРМ?

Object_Relative DateBase-Mapping, между объектами Java и реляционными базами данныхСоздайте какое-то сопоставление для прямого доступа к объектам Java..

Многие студенты не знают уровень JDBC для изучения, здесь я расскажу о точках знаний JDBC и о том, какие из них следует освоить.

Основы JDBC

что такое JDBC? Полное название JDBC: Java Data Base Connectivity, который представляет собой Java API, который может выполнять операторы SQL.

Каждая база данных имеет свой собственный графический интерфейс, и я могу работать в ней и выполнять действия, связанные с базой данных.Почему мы используем JDBC?

  • Для кого данные в базе? для программы. Мы используем язык программирования Java, поэтому нам нужно использовать программу Java, чтобы связать базу данных для доступа к данным.
  • На рынке существует много баз данных.Изначально нам нужно изучать разные API в соответствии с разными базами данных.Чтобы упростить эту операцию, Sun определила JDBC API [интерфейс]. Нам,База данных работает на JDBC API [интерфейс], чтобы использовать другую базу данных, если можно использовать драйвер базы данных, предоставленный производителем базы данных.

На самом деле, вы можете хорошенько взглянуть на JDBC и определить интерфейс.В любом случае, вы можете реализовать его для меня.Как бы ни менялась база данных, используется один и тот же набор API.

Затем вкратце узнаем об этих интерфейсах: Connection, Statement, ResultSet. НаписатьСяобай должен учитьсяКод Java для подключения к базе данных:

  1. Импорт пакета драйверов MySQL или Oracle
  2. Загрузите драйвер базы данных
  3. Получить подключение к базе данных
  4. Получить объект, который может выполнять операторы SQL
  5. Выполнить оператор SQL
  6. закрыть соединение
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;

try {

    /*
    * 加载驱动有两种方式
    *
    * 1:会导致驱动会注册两次,过度依赖于mysql的api,脱离的mysql的开发包,程序则无法编译
    * 2:驱动只会加载一次,不需要依赖具体的驱动,灵活性高
    *
    * 我们一般都是使用第二种方式
    * */

    //1.
    //DriverManager.registerDriver(new com.mysql.jdbc.Driver());

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

    //获取与数据库连接的对象-Connetcion
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/zhongfucheng", "root", "root");

    //获取执行sql语句的statement对象
    statement = connection.createStatement();

    //执行sql语句,拿到结果集
    resultSet = statement.executeQuery("SELECT * FROM users");

    //遍历结果集,得到数据
    while (resultSet.next()) {

        System.out.println(resultSet.getString(1));

        System.out.println(resultSet.getString(2));
    }

} catch (SQLException e) {
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} finally {

    /*
    * 关闭资源,后调用的先关闭
    *
    * 关闭之前,要判断对象是否存在
    * */

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

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

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

    }

}

После того, как основной процесс завершен, мы должны сосредоточиться на обучении.PreparedStatementРазница между интерфейсом и интерфейсом Statement, зачем использовать PreparedStatement.

  1. Когда объект Statement компилирует инструкцию SQL, если в инструкции SQL есть переменные, их необходимо разделить разделителем.Если переменных слишком много, SQL станет очень сложным.PreparedStatement может использовать заполнители для упрощения написания SQL.
  2. Оператор будет часто компилировать SQL.PreparedStatement может выполнять предварительную компиляцию SQL для повышения эффективности. Предварительно скомпилированный SQL хранится в объекте PreparedStatement.
  3. PreparedStatement предотвращает внедрение SQL. (Утверждение разделителем'++', напишите постоянное уравнение, можно войти в базу без пароля)

пул соединений с базой данных

**Почему мы используем пул соединений с базой данных? ** Установление и закрытие соединений с базой данных очень ресурсоемки, а частое открытие и закрытие соединений приводит к низкой производительности системы.

Общие пулы соединений с базами данных включают C3P0, DBCP,Druid. Вы можете использовать его во время учебыDruid, я как-то написал демо с C3P0 и это был дисс (:

Druid — проект с открытым исходным кодом Alibaba, у него есть китайская документация, если вы научитесь подключаться к базе данных, я думаю, это не будет слишком сложно. Поиск на гитхабе "Druid" можно найти

нумерация страниц

Когда дело доходит до пейджинга, интервью и рабочие места очень распространены и должны быть освоены. Давайте кратко поговорим о том, как Oracle и MySQL реализуют пейджинг, и соответствующее объяснение:

Пейджинг оракула:

/*
	  Oracle分页语法:
	    @lineSize---每页显示数据行数
	    @currentPage----当前所在页
	
	*/
	SELECT *FROM (
	    SELECT 列名,列名,ROWNUM rn
	    FROM 表名
	    WHERE ROWNUM<=(currentPage*lineSize)) temp
	WHERE temp.rn>(currentPage-1)*lineSize;
	
/*
Oracle分页:
	    Oracle的分页依赖于ROWNUM这个伪列,ROWNUM主要作用就是产生行号。
	
	  分页原理:
	    1:子查询查出前n行数据,ROWNUM产生前N行的行号
	    2:使用子查询产生ROWNUM的行号,通过外部的筛选出想要的数据
	
	  例子:
	    我现在规定每页显示5行数据【lineSize=5】,我要查询第2页的数据【currentPage=2】
	    注:【对照着语法来看】
	
	  实现:
	    1:子查询查出前10条数据【ROWNUM<=10】
	    2:外部筛选出后面5条数据【ROWNUM>5】
		3:这样我们就取到了后面5条的数据
	*/	

Разбиение на страницы MySQL:

	/*
	  Mysql分页语法:
	  @start---偏移量,不设置就是从0开始【也就是(currentPage-1)*lineSize】
	  @length---长度,取多少行数据
	
	*/
	SELECT *
	FROM 表名
	LIMIT [START], length;
	
	/*
	  例子:
	    我现在规定每页显示5行数据,我要查询第2页的数据
	
	  分析:
	    1:第2页的数据其实就是从第6条数据开始,取5条
	
	  实现:
	    1:start为5【偏移量从0开始】
	    2:length为5

*/

Суммировать:

  • Mysql от(currentPage-1)*lineSizeначать получение данныхlineSizeДанные статьи
  • Oracle становится первымcurrentPage*lineSizeфрагменты данных, из(currentPage-1)*lineSizeначать получение данных

DBUtils

Я думаю, что DBUtils — очень полезный компонент.Прежде чем изучать ORM-фреймворки, такие как Hibernate и Mybatis, вы можете научиться его использовать. Он может значительно упростить наш JDBC-код и очень удобен в использовании.

Если вы спешите написать дипломную работу и у вас нет времени на изучение ORM-фреймворка, воспользуйтесь этим инструментом для написанияDAOУровень доступа к данным, я думаю, это хороший выбор.

Вы можете просто посмотреть на код:

/*
* 使用DbUtils框架对数据库的CRUD
* 批处理
*
* */
public class Test {

    @org.junit.Test
    public void add() throws SQLException {

        //创建出QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "INSERT INTO student (id,name) VALUES(?,?)";

        //我们发现query()方法有的需要传入Connection对象,有的不需要传入
        //区别:你传入Connection对象是需要你来销毁该Connection,你不传入,由程序帮你把Connection放回到连接池中
        queryRunner.update(sql, new Object[]{"100", "zhongfucheng"});

    }

    @org.junit.Test
    public void query()throws SQLException {

        QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "SELECT * FROM student";

        List list = (List) queryRunner.query(sql, new BeanListHandler(Student.class));
        System.out.println(list.size());

    }

    @org.junit.Test
    public void delete() throws SQLException {
        QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "DELETE FROM student WHERE id='100'";

        queryRunner.update(sql);
    }

    @org.junit.Test
    public void update() throws SQLException {
        QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "UPDATE student SET name=? WHERE id=?";

        queryRunner.update(sql, new Object[]{"zhongfuchengaaa", 1});
    }

    @org.junit.Test
    public void batch() throws SQLException {
        //创建出QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
        String sql = "INSERT INTO student (name,id) VALUES(?,?)";

        Object[][] objects = new Object[10][];
        for (int i = 0; i < 10; i++) {
            objects[i] = new Object[]{"aaa", i + 300};
        }
        queryRunner.batch(sql, objects);
    }
}

положить галантерейные товары

Это уже давно работает, почему ты все еще пишешь?JDBCНу по следующим причинам:

  • я паранабор текстаТе, у кого есть стремление, если вы обратите внимание на моих одноклассников рано, вы можете обнаружить, что мой GitHub, навигация по статьямread.meбудет часто заменяться. настоящее времяGitHubНавигация мне не понравилась (слишком длинная), а ранние статьи, честно говоря, были не очень хороши в верстке, поэтому решил сделать новую волну.
  • Моя статья будет распространяться на нескольких платформах, но после того, как статья будет опубликована, ее никто не сможет прочитать, а кровать с картинками, скорее всего, зависнет из-за противоугонной цепочки платформы. И потому многие читатели спрашивали меня: "Можете ли вы преобразовать свою статью в PDF?? "
  • Я написал много статей на уровне серии, которые почти никогда не меняются, поэтому они идеально подходят для их публикации».Упорство".

По вышеуказанным причинам я решил собрать свой цикл статей в одинPDF/HTML/WORDдокументация. Честно говоря, создание такого документаУ меня ушло много времени. предотвращатьпроституция, обратите внимание на мой публичный аккаунт, чтобы ответить "888" может быть получен.

содержание документавсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).

Проект с открытым исходным кодом, охватывающий все точки знаний о бэкэнде Java (уже 6 тысяч звезд):GitHub.com/Zhongf UC очень…

если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, поищите в WeChat.Java3y.

Содержимое PDF-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).