JDBC
目录
JDBC
简介
JDBC结构步骤
API接口
DriverManager
Conection
Statement
ResultSet
PreparedStatement
简介
JDBC是使用Java语言操作关系数据库的一套ADI。全称Java DataBase Connectivity,Java数据库连接。一套标准接口操作其他所有关系数据库。数据库接口实现驱动jar包由数据库厂商提供。
JDBC结构步骤
1、注册驱动
2、获取连接
3、定义SQL语句
4、获取执行SQL对象
5、执行SQL语句
6、返回处理结果
7、释放资源
//注册驱动
//Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
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);
//释放资源c
stmt.close();
conn.close();
API接口
DriverManager
功能:注册驱动、获取数据库连接。
注册驱动本质上是使用了DriverManager类的方法,MySQL5之后驱动的版本可以不用写注册驱动的代码,原因是它自己帮你注册好了。
获取数据库连接DriverManager.getConnection(url, username, password)
//获取连接
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
Conection
功能:获取执行对象、事务管理、
事务管理:
开启事务 setAutoCommit(boolean autocommit) true自动提交false手动提交;
提交事务 commit()
回滚事务 rollback()
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
String sql1 = "update account set money = 3000 where id = 1;";
String sql2 = "update account set money = 4000 where id = 2;";
Statement stmt = conn.createStatement();
try {
//开启事务
conn.setAutoCommit(false);
//执行事务
int count1 = stmt.executeUpdate(sql1);
System.out.println(count1);
int i = 3/0;//异常
int count2 = stmt.executeUpdate(sql2);
System.out.println(count2);
//提交事务
conn.commit();
} catch (Exception throwables) {
//回滚事务
conn.rollback();
}
stmt.close();
conn.close();
Statement
执行SQL语句
excuteUpdate(sql) 执行DML、DDL语句 返回影响的行数;需注意建表、删表、建数据库、删数据库的返回是0;
excuteQuery(sql) 执行DQL语句 返回ResultSet 一个结果集对象。
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "update account set money = 4000 where id = 1;";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
if(count > 0){
System.out.println("修改成功");
}else{
System.out.println("修改失败");
}
stmt.close();
conn.close();
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "CREATE TABLE demo(\n" +
"\tid int,\n" +
"\tname VARCHAR(10)\n" +
");";
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql);
//建表删表建数据库删数据库的返回是0
System.out.println(count);
stmt.close();
conn.close();
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "CREATE TABLE demo(\n" +
"\tid int,\n" +
"\tname VARCHAR(10)\n" +
");";
Statement stmt = conn.createStatement();
stmt.executeQuery(sql);//返回一个ResultSet结果集
stmt.close();
conn.close();
ResultSet
1、ResultSet封装了DQL查询语句的结果
2、ResultSet能通过next()来获取查询结果,next()判断当前行是否为有效行,true有效说明有数据,false无效说明当前行没有数据。getXXX(参数)获取参数。参数获取可通过列的编号也可通过列名,要注意列的编号是从1开始的。
String url = "jdbc:mysql://127.0.0.1:3306/练习jdbc";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "SELECT * FROM account;";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);//返回一个ResultSet结果集
while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
int money = rs.getInt(3);
System.out.println(id);
System.out.println(name);
System.out.println(money);
System.out.println("---------------------");
System.out.println(rs.getInt("id"));
System.out.println(rs.getString("name"));
System.out.println(rs.getInt("money"));
System.out.println("---------------------");
}
rs.close();
stmt.close();
conn.close();
PreparedStatement
继承自Statement,用于预防sql注入。
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/练习jdbc", "root", "123456");
String sql = "select * from account where id = ?";
int id = 1;
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
System.out.println("查到");
System.out.println(rs.getInt("money"));
}
rs.close();
pstmt.close();
conn.close();
数据库连接池
一个负责分配、管理数据库连接的容器。
它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏;
好处:
资源重用;
提升系统响应速度;
避免数据库连接遗漏。
常见数据库连接池:DBCP、C3P0、Druid。
Driud使用步骤:
1.导入jar包 druid-1.1.12jar
2.定义配置文件
3.加载配置文件
4.获取数据库连接池对象
5.获取连接
Properties prop = new Properties();
prop.load(new FileInputStream("src/com/yozi/druid.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
Connection conn = dataSource.getConnection();
System.out.println(conn);