JDBC学习

		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、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值