JDBC就是使用Java语言操作关系型数据库的一套API·全称: Java DataBase Connectivity
连接步骤(我的是MySQL8.0跟5的有些出入,记得导包)
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String url = "jdbc:mysql://localhost:3306/database?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
//3.定义sql
String sql = "";
//4.获取执行sql的对象
Statement stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);//受影响的行数
//6.关闭资源
stmt.close();
conn.close();
驱动管理类,有两个作用——注册驱动、获取数据库连接
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//查看Driver源码,发现静态代码块,上面那句代码执行时,这个静态代码块里的内容会执行
static {
try {
//调用DriverManager的注册方法
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
提示:
MySQL 5之后的驱动包,可以省略注册驱动的步骤
自动加载jar包中META-INF/services/java.sql.Driver文件中的驱动类
//2.获取连接
String url = "jdbc:mysql://localhost:3306/database1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, user, password);
作用:获取执行SQL的对象;管理事务
1.获取执行SQL的对象
·普通执行SQL对象
Statement createStatement()
·预编译$QL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement (sql)
·执行存储过程的对象
CallableStatement prepareCall (sql)
2.事务管理
MySQL事务管理
开启事务:BElGIN; /START TRANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
MySQL默认自动提交事务
JDBC 事务管理:Connection接口中定义了3个对应的方法
开启事务: setAutoCommit(boolean autoCommit): true为自动提交事务; false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务: rollback()
try {
//开启事务
conn .setAutocommit(false);
//5.执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//6.处理结果
system.out.println(count1);
//5.执行sql
int count2 = stmt.executeUpdate(sql2);//受影响的行数
//6.处理结果
system.out.println(count2);
//提交事务
conn.commit();
}catch (Exception throwables) {
//回滚事务
conn.rollback();
throwables.printStackTrace(;
}
statement就是用来执行sql语句的。
executeUpdate(sql):执行DML(对数据增删改)、DDL语句
返回值(int型):
(1)DML语句影响的行数
(2)DDL语句执行后,执行成功也可能返回0
executeQuery(sql):执行DQL语句
返回值(ResultSet): ResultSet结果集对象
结果集对象
1.封装DQL语句的查询结果
boolean next():
(1)从表头开始将光标从当前位置向下移动一行
(2)判断当前行是否为有效行返回值:
true:有效行,当前行有数据 false:无效行,当前行没有数据
//配合使用
while(rs.next()){
int a=rs.getInt(1);
...
...
...
...
}
xxx getXxx(参数):
获取数据
xXx:数据类型;如: int getInt(参数) ; String getString(参数)
参数: int:列的编号,从1开始 String:列的名称
一个接口,继承自statement。
作用:
1.预编译SQL语句并执行:预防SQL注入问题(SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法)
//获取PreparedStatement 对象
//SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password = ?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
//设置参数值
PreparedStatement对象:setXxx(参数1,参数2)//给﹖赋值>Xxx:数据类型;如setInt (参数1,参数2)
//参数:
//参数1:?的位置编号,从1开始 参数2:?的值
③执行SQL
executeUpdate(); // executeQuery();:不需要再传递sql
PreparedStatement预编译功能是关闭的,在url后的参数加上: useServerPrepStmts=true
剩下的比较乱直接放截图
简介
好处:资源重用;提升系统响应速度;僻免数据库连接溃漏
实现
标准接口:DataSource
官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口。
常见的数据库连接池:DBCP、C3P0、Druid
每一个数据库连接池都会提供一个继承于DataSource的getConnection()方法
连接步骤
1.导入jar包druid-1.1.12.jar
下载地址:Central Repository: com/alibaba/druid/1.2.9
我下载的最新的
2. 定义配置文件
3.加载配置文件
4.获取数据库连接池对象
5.获取连接
//3.加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("druid.properties"));
//4.获取连接池对象
DataSource ds= DruidDataSourceFactory.createDataSource(prop);
//5.获取数据库连接
Connection conn=ds.getConnection();