JDBC入门
JDBC的概述
- JDBC全程为: java DataBase Connectivity(java数据库连接)
JDBC使用步骤
- 搭建开发环境
- 编写程序,在程序中加载数据库驱动
- 建立连接
- 创建用于向数据库发送SQL的Statement对象
- 从代表结果集的ResultSet中取出数据
- 断开与数据库的连接,并释放相关资源
public void demo2(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1.加载驱动
// DriverManager.registerDriver(new Driver());// 会导致驱动注册两次。
Class.forName("com.mysql.jdbc.Driver");
// 2.获得连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "abc");
// 3.创建执行SQL语句的对象,并且执行SQL
// 3.1创建执行sql的对象
String sql = "select * from user";
stmt = conn.createStatement();
// 3.2执行sql
rs = stmt.executeQuery(sql);
while(rs.next()){
int uid = rs.getInt("uid");
String username = rs.getString("username");
String password = rs.getString("password");
String name = rs.getString("name");
System.out.println(uid+" "+username+" "+password+" "+name);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
// 4.释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException sqlEx) { // ignore
}
rs = null;
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;// 垃圾回收机制更早回收对象。
}
}
}
DriverManager :驱动管理类
主要作用:
一、注册驱动
实际开发中注册驱动会使用如下的方式:
Class.forName("com.mysq.jdbc.Driver");
因为之前的方式会导致驱动注册两次。
二、获得连接
Connection getConnection(String url,String username,String password);
url写法: jdbc:mysq://localhost:3306/databasename
jdbc :协议
mysql :子协议
localhost:主机名
3306 :端口号
url简写: jdbc:mys:/://jdbc
Connection :连接对象
主要作用:
一、创建执行SQL语句的对象
Statement createStatement() : 执行SQL语句,有SQL注入的漏洞存在。
PreparedStatement prepareStatement(String sq) : 预编译SQL语询,解决SQL注入的漏洞。
CallableStatement prepareCall(String sql) : 执行SQL中存储过程
二、进行事务的管理
setAutoCommit(boolean autoCommit) :设置事务是否自动提交。
commit() :事务提交
rollback() :事务回滚
===========================
Statement : 执行SQL
主要作用:
一、执行SQL语询
boolean execute(String sql) :执行SQL,执行select语句返回true,否则返回false
ResultSet executeQuery(String sql) :执行SQL中的select语句
int executeUpdate(String sql) :执行SQL中的insert/update/delete语句
二、执行批处理操作
addBatch(String sql) :添加到批处理
executeBatch) :执行批处理
clearBatch) :清空批处理
ResultSet :结果集
结果集:其实就是查询语句( select )语句查询的结果的封装。
主要作用:
结果集获取查询到的结果的。
next() :针对不同的类型的数据可以使用getXXX()获取数据,通用的获取数据的方法:getObject();
JDBC的资源释放
- Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
- 特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
JDBC的CRUD操作
- 向数据库中保存记录
- 修改数据库中的记录
- 删除数据库中的记录
- 查询数据库中的记录
JDBC的SQL注入漏洞的解决
PreparedStatement是Statement的子接口,它的实例对象可以通过调用Connection.preparedStatement(sq)方法获得,相对于Statement对象而言:
-- PreperedStatement可以避免SQL注 入的问题。
-- Statement会使数据库频繁编译SQL ,可能造成数据库缓冲区溢出。
PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。
-- 并且PreperedStatement对于sq|中的参数,允许使用占位符的形式进行替换,简化sq|语句的编写。PreparedStatement的使用
- 保存数据
- 修改数据
- 删除数据
- 查询数据
数据库连接池
共有 0 条评论