JDBC概念
·使用java语言操作关系型数据库的一套API
·Java DataBase Connectivity Java数据库连接
同一套Java代码,操作不同的关系型数据库
- JDBC的第一个简单例子
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "root";
Connection conn= DriverManager.getConnection(url,username,password);
//定义SQL语句
String sql=" UPDATE account set money = 2000 WHERE id =1";
//获取执行SQL的对象 Statement
Statement stmt = conn.createStatement();
//执行SQL
int count = stmt.executeUpdate(sql);//受影响的行
//处理结果
System.out.println(count);
//释放资源
stmt.close();
conn.close();
JDBC API详解
DriverManager
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
DriverManager.getConnection(url,username,password);
参数
URL连接路径:
语法:jdbc:mysql://IP地址:端口号/数据库名称?参数键值对1&参数键值对2...
·如果连接的是本机MySQL服务器并且服务默认端口号是3306,则可以简写成jdbc:mysql:///数据库名称?参数键值对1&参数键值对2...
String url = "jdbc:mysql://127.0.0.1:3306/db1";
Connection
1.获取执行SQL的对象
·普通执行SQL对象
Statement createStatement();
·预编译SQL的执行SQL对象:防止SQL注入
PrepareStatement prepareStatement(sql); Statement stmt = conn.createStatement();
2.事务管理
Connection接口定义了3个对应的方法
开启事务:setAutoCommit(false);
提交事务:commit();
回滚事务:rollback();
Java中使用异常处理机制,在catch中进行事务的回滚 快捷键:ctrl+alt+t
try { //开启事务 conn.setAutoCommit(false); int count1 = stmt.executeUpdate(sql1);//受影响的行 //处理结果 System.out.println(count1); int count2 = stmt.executeUpdate(sql2);//受影响的行 //处理结果 System.out.println(count2); //提交事务 conn.commit(); } catch (Exception e) { //回滚事务 conn.rollback(); e.printStackTrace(); } //释放资源 stmt.close(); conn.close();
Statement
执行SQL语句
1.int executeUpdate(sql):执行DML,DDL语句
返回值:(1)DML查询语句返回影响的行
(2)DDL语句执行成功后,执行成功也有可能返回0,如删除语句
int count = stmt.executeUpdate(sql);
2.ResultSet executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
ResultSet
封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql);执行DQL语句,返回ResultSet对象
使用步骤:
- 光标向下移到一行,并判断该行是否有数据:next()
- 获取数据:getXxx(参数)
ResultSet rs = stmt.executeQuery(sql); //处理数据,遍历rs中的所有数据 //光标向下移到一行,判断当前行是否有数据 while(rs.next()){ //获取数据 getXxx() int id =rs.getInt(1); String name = rs.getString(2); double money = rs.getDouble(3); System.out.println(id); System.out.println(name); System.out.println(money); System.out.println("--------------"); } rs.close(); conn.close(); stmt.close(); } }
PreparedStatement
预编译SQL语句并执行;预防SQL注入问题(将敏感字符进行转义)
使用步骤:
①获取对象
SQL语句中的参数值,使用?占位符替代
②设置参数值
③执行SQL
String sql = "select * from user where username = ? and passward = ?"; //获取pstmt对象 PreparedStatement pstm = conn.prepareStatement(sql); //设置?值 pstm.setString(1,name); pstm.setString(2,pwd); //执行SQL ResultSet rs = pstm.executeQuery();
数据库连接池
一个容器(集合),存放数据库连接的容器
数据库连接池实现
标准接口:DataSource
Connection getConnection()
常见的数据库连接池:
DBCP
C3P0
Druid
Druid使用步骤:
//1.导入jar包 //2.定义配置文件 //3.加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("jdbc-demo/src/druid.properties")); //4.获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5.获取数据库连接 Connection connection =dataSource.getConnection();