JDBC
- Java DataBase Connectivity Java 数据库连接, Java语言操作数据库
- 本质是官方定义的一套操作关系型数据库的规则(接口),各个数据库厂商提供驱动jar包(真正执行的代码)来实现接口
- 步骤:
- 1.导入驱动jar包,xxx.jar放入项目libs目录下,右键Add as Library
- 2.注册驱动
- 3.获取数据库链接对象Connection
- 4.定义sql语句
- 5.获取执行sql语句的对象Statement
- 6.执行sql,并处理结果
- 7.释放资源
- 代码实现:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "root");
String sql = "update student set score = 100 where id = 1";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
System.out.println(count);
stmt.close();
conn.close();
- 对象:
- DriverManager:驱动管理对象
- 注册驱动:告诉程序使用的数据库驱动jar
- static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager(在com.mysql.jdbc.Driver中存在静态代码块调用了该方法)
- 写代码使用: Class.forName(“com.mysql.jdbc.Driver”);
- 注意:mysql5之后驱动jar包可以省略注册驱动的步骤
- 获取数据库链接:
- static Connection getConnection(String url, String user, String password)
- url:指定链接路径,语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称
(如果链接本机服务器,并且mysql服务器默认端口为3306,则可以简写为:jdbc:mysql:///数据库名称
) - user:用户名
- password:密码
- Connection:数据库链接对象
- 获取执行sql的对象:
- Statement createStatement()
- PreparedStatement prepareStatement(String sql)
- 管理事务:
- 开启事务:setAutoCommit(boolean autoCommit):false为开启事务
- 提交事务:commit()
- 回滚事务:rollback()
- Statement:执行sql的对象
- 执行sql
- boolean execute(String sql):可以执行任意的sql
- int executeUpdate(String sql):执行DML(insert,update,delete)语句,DDL(create,alter,drop)语句
- 返回值:影响的行数,可以判断DML是否执行成功,返回值>0则执行成功,反之,则失败。
- ResultSet executeQuery(String sql):执行DQL(select)语句
- ResultSet:结果集对象,封装查询结果
- boolean next():游标向下移动一行,判断当前行是否为最后一行末尾,是返回false,否则返回true
- getXxx(参数):获取数据
- 参数:
- 可以是int(列标号),如:getString(1);
- 可以是String(列名称),如:getDouble(“score”);
- PreparedStatement:执行sql的对象
- 解决SQL注入问题(拼接SQL时特殊关键字参与字符串拼接造成的安全性问题),效率更高
- 更改后的步骤:
- 预编译的sql:参数使用?来作为占位符
- 如:
String sql = “update student set score = 100 where id = ?”
- 获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)
- 给?赋值:方法: setXxx(参数1,参数2)
- 执行sql,接受返回结果,不需要传递sql语句
数据库连接池
- 一个存放数据库链接的容器,类似于线程池
- 当系统被初始化之后,容器被创建,容器中会申请一些链接对象,当用户来访问数据库时,从容器中获取链接对象,用户访问完之后,返回连接对象给容器
- 节约资源,用户访问高效
- 实现:
- 接口:DataSource javax.sql包下的
- 方法:
- 获取链接:getConnection()
- 归还链接:Connection.close()
- 实现:一般由数据库厂商来实现
- C3P0:数据库连接池技术
- 导入C3P0jar包和数据库驱动jar包
- 定义配置文件(放在src目录下):c3p0.properties或者c3p0-config.xml
- 创建核心对象:数据库连接池对象 ComboPooledDataSource
- 获取连接:getConnection
DataSource ds = new ComboPooledDataSource();
Connection conn = ds.getConnection
- Druid:数据库连接池技术,阿里巴巴提供
- 导入Druid jar包和数据库驱动jar包
- 定义配置文件:.properties文件,可以取任意名称,放在任意目录下
- 加载配置文件
- 获取数据库连接池对象:通过工厂 DuridDataSourceFactory
- 获取链接:getConnection
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
Connection conn = ds.getConnection();
Spring JDBC
- Spring框架对JDBC的简单封装,提供一个JDBCTemplate对象简化JDBC的开发
- 步骤:
- 导入jar包:
- 创建JdbcTemplate对象。依赖于数据源DataSource
- JdbcTemplate template = new JdbcTemplate(ds);
- 调用JdbcTemplate的方法来完成CRUD操作
- update():执行DML语句,增删改语句
- queryForMap():将查询结果封装为map集合,列名为key,值为value
- queryForList():将查询结果封装为List集合
- 每一条查询记录封装为Map集合,再将Map集合封装为List集合
- query():查询结果,将结果封装为JavaBean对象
- 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
- new BeanPropertyRowMapper<类型>(类型.class)
- queryForObject():查询结果,将结果封装为对象