JDBC入门
搭建开发环境
编写程序,在程序中加载数据库驱动
建立连接
创建用户向数据库发送SQL的Statement对象
从代表结果集的Result中取出数据
断开与数据库的连接,并释放相关资源
简单的JDBC程序
@Test
public void demo1(){
try {
// 1、加载驱动
// DriverManager.deregisterDriver(new Driver());
Class.forNmae(“com.mysql.Driver”);
// 2、获得连接
Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/jdbctest”,“root”,“1234”);
// 3、创建执行SQL语句的对象,并且执行SQL
String sql = “SELECT * FROM user”;
Statement stmt = connection.createStatement();
// 执行SQL语句
ResultSet resultSet = stmt.executeQuery(sql);
// 遍历
while(resultSet.next()) {
int uid = resultSet.getInt(“uid”);
String username = resultSet.getString(“username”);
String password = resultSet.getString(“password”);
String name = resultSet.getString(“name”);
System.out.println(uid + “\t”+username+"\t"+password+"\t"+name);
}
// 4、释放资源
resultSet.close();
stmt.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
JDBC的API
<> DriverManager 驱动管理类
主要作用:
一 、 注册驱动
Class.forName(“com.mysql.Driver”);
因为如果按照如下的语句创建驱动,则驱动会创建两次
DriverManager.deregisterDriver(new Driver());
二 、 获得连接
Connection DriverManager.getConnection(String url,String username, String password)
url写法:jdbc:mysql://localhost:3306/jdbc
*jdbc : 协议
mysql : 子协议
localhost : 主机名
3306 : 端口号
url简写: jdbc:mysql:///jdbc (如果是本机,中间部分可以简写)
<> Connection 是JDBC与数据库的连接对象
* 主要作用:
一、创建执行SQL语句的对象
Statement createStatement(); //执行SQL语句。由SQL注入漏洞存在。
创建一个 Statement对象,用于将SQL语句发送到数据库。
PrepareStatement prepareStatement(String sql); // 预编译SQL语句。解决SQL注入漏洞
创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
CallableStatement prepareCall(String sql); #执行SQL中的存储过程。
二、进行事务的管理
* setAutoCommit ( boolean autoCommit ) #设置事务是否自动提交。
* commit() #事务提交
* rollback() #事务回滚
<> Statement 对象:
主要作用:
一 、 执行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注入漏洞(原因是用户在输入的时候输入了SQL的关键字)
解决SQL注入漏洞的方法
PreparedStatement是Statement的子接口,它的示例对象可以通过调用
Connection.preparedStatement(sql)方法获得,相对于Statement对象而言
- PreperedStatement可以避免SQL注入的问题(对相同的SQL只编译一次)
-Statement会使数据库频繁的编译SQL,可能造成数据库缓冲区溢出
PreperedStatement可对SQL进行预编译,从而提高数据库的执行效率
并且PreperedStatement对于sql中的参数,允许使用占位符的实行进行
替换,简化sql语句的编写。
conn = JDBCUtils.getConnection();
String sql = "SELECT * FROM user WHERE username =? AND password = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
PrepareStatement的使用
保存操作
//获得连接
conn = JDBCUtils.getConnection();
//编写SQL语句
String sql = "INSERT user(uid,username,password,name) VALUES(null,?,?,?)";
//预处理SQL
pstmt = conn.prepareStatement(sql);
// 设置参数的值
pstmt.setString(1,"hostness");
pstmt.setString(2,"456");
pstmt.setString(3,"ZW");
//执行SQL语句
int i = pstmt.executeUpdate();
数据库连接池
1、什么是数据库连接池?
答:连接池是创建和管理一个连接的缓冲的技术,这些连接准备好被任何需要他们的线程使用
2 、C3P0连接池
C3P0连接池的使用
3、