- jdbc概念
- java database connect
- java访问数据库平台的统一接口,但是jdbc有缺陷,就是不同数据库的sql语句并没有统一
- jdbc需要在程序中写不同的sql语句,hibernate就完全屏蔽了这种区别
- 在开发端,有统一的JDBC接口,在数据库端,不同的数据库有不同的JDBC接口(类库)
- 核心类介绍
- JDBC中的核心类
- DriverManager
- DriverManger(驱动管理器)的作用有两个:
- 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
- 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
- Connection
- Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:
- Connection最为重要的一个方法就是用来获取Statement对象;
- Statement
- Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句
- int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;
- ResultSet executeQuery(String sql):执行查询操作,执行查询操作会返回ResultSet,即结果集。
- boolean execute():Statement还有一个boolean execute()方法,这个方法可以用来执行增、删、改、查所有SQL语句。该方法返回的是boolean类型,表示SQL语句是否执行成功。
- 如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。
- 如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。
- ResultSet
- ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;
- ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。
- 结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:
- boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;
- XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。
- DriverManager
- JDBC中的核心类
- 第一个程序
- 导入mysql的驱动jar包mysql-connector-java-5.1.39-bin.jar;
- 写第一个测试程序,连接mysql并查询
package com.qiaolei; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; public class ConDb { @Test public void test() throws ClassNotFoundException, SQLException { // 注册驱动,只用加载这个类,在static代码块中会自动注册驱动 // 出现异常ClassNotFoundException只有两个原因: // 1.你没有给出mysql的jar包; // 2.你把类名称打错了,查看类名是不是com.mysql.jdbc.Driver Class.forName("com.mysql.jdbc.Driver"); // 获得连接 // 参数格式第一部分是jdbc,这是固定的; // 第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了; // 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求, // mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb1)组成。 // ?后面跟连接参数 // 出现SQLException有可能是连接的三个参数写错了 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/ecshop?useUnicode=true&characterEncoding=UTF8", "root", "123456"); // Statement是用来向数据库发送要执行的SQL语句的! Statement stmt = con.createStatement(); // 发送sql查询语句 String sql = "select * from ecs_article"; ResultSet rs = stmt.executeQuery(sql); // ResultSet对象是一个二维数组,next()方法用于将光标移到下一行,并返回是否有下一行 // getXX(列数或列名)返回当前行某列的值 while (rs.next()) { int id = rs.getInt(1); String title = rs.getString(3); System.out.println(id + ", " + title); } // 释放资源,顺序和创建的顺序相反 rs.close(); stmt.close(); con.close(); } }