JDBC技术

JDBC技术

一、JDBC的概念(Java DataBase Conection)

JDBC技术就是使用Java程序连接并操作数据库的一种技术(规范);

二、使用JDBC操作数据库的步骤

三个接口一个类
2.1、DriverManager 加载驱动程序(数据库厂商提供的jar文件)
2.2、Connection 获得连接
2.3、Statement 执行SQL语句
2.4、ResultSet 更新(可以接收操作所影响的行数),查询(得到的是一个ResultSet结果集)
2.5、关闭资源

三、JDBC案例入门

3.1、基础环境
数据库名: myschool
表名:users
用户名:root
密码:root
主机:本机
端口号:3306
3.2、代码实现

//1、加载驱动 
class.forName(com.mysql.jdbc.Driver)
//2、创建连接
Connection c=DriverManager.getConnection(url,user,password)
//3、执行SQL语句  
Statement s=c.CreateStatement();
String sql='' ''
//4、处理返回结果   
Resulset r=s.executeQuery(sql);
//5、释放资源  
c.close();  

JDBC技术中涉及到的 【五大接口】 和 【一个类】
DriverManager 类; ------ 加载驱动管理类
Connection接口; -------创建连接
Statement接口; -------执行静态SQL语句通道
PreparedStatement接口; -------占位符SQL通道
CallableStatement接口; --------执行存储过程通道
ResultSet接口; ------- 结果集

四、JDBC实现CRUD操作

4.1、实现数据新增
4.2、实现数据修改

```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JdbcUpdateTest {
	//修改模板
	public static void main(String[] args) throws Exception {
		//连接数据库的地址,数据库名等信息
		String url="jdbc:mysql://localhost:3306/myschool?character=utf8";
		//用户名
		String user="root";
		//密码
		String password="root";
		//1.加载驱动 Class.forName();
		Class.forName("com.mysql.jdbc.Driver");
		//2.使用驱动管理类DriverManager创建连接  Connection
		Connection conn=DriverManager.getConnection(url, user, password);
		//3.执行sql语句 Statement
		Statement st = conn.createStatement();
		int result=st.executeUpdate("update student set stuname='张三' where stuid=1");
		//4.处理返回结果 
		System.out.println(result);
		//5.释放资源  close
		conn.close();		
	}	
}

4.3、实现增加、删除、修改


```java
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbczsgTest {

	public static void main(String[] args) throws Exception {
		//String sql="insert into student values(null,'555555','郭靖2','男',1,'
                                                    15389071916','陕西省西安市',now(),default,default,26)";
		//String sql="delete from student where stuid=11";
		String sql="update student set stuname='abc' where stuid=5";
		int result=zsg(sql);
		System.out.println(result);
	}

	private static int zsg(String sql) throws ClassNotFoundException, SQLException {
		// 连接数据库的地址,数据库名等信息
		String url = "jdbc:mysql://localhost:3306/myschool?character=utf8";
		// 用户名
		String user = "root";
		// 密码
		String password = "root";
		// 1.加载驱动 Class.forName();
		Class.forName("com.mysql.jdbc.Driver");
		// 2.使用驱动管理类DriverManager创建连接 Connection
		Connection conn = DriverManager.getConnection(url, user, password);
		// 3.执行sql语句 Statement
		Statement st = conn.createStatement();
		int result = st.executeUpdate(sql);
		// 4.处理返回结果
		
		// 5.释放资源 close
		conn.close();
		return result;
	}

}

4.4、实现查询
//statement 是一个接口,用来发送执行SQL语句
//executeUpdate(); 做更新操作(delete insert update),返回值类型是一个int
//executeQuery(); 做查询,返回值类型是resultSet接口
//execute(); 判断是否有返回值结果,返回值类型是一个Boolean

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Query {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// 1.加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.创建连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool", "root", "root");
		// 3.执行sql语句
		Statement st = conn.createStatement();
		String sql = "select * from stu where sex='男'";
		// 4.处理返回结果
		ResultSet rs = st.executeQuery(sql);
		while(rs.next()){
			int id=rs.getInt(1);
			String name=rs.getString("studentName");
			String sex=rs.getString("sex");
			System.out.println("id:"+id+" name:"+name+"  sex:"+sex);		
		}	
	}
}

五、PreparedStatement接口

PreparedStatement接口是 Statement接口的子接口;
Statement接口的特点:只能支持静态的SQL语句(直接可以在数据库的查询分析器下执行的语句);
PreparedStatement接口的特点:可以支持静态的SQL,特有的是可以支持带有占位符(?)的SQL命令;
PreparedStatement接口的优势:
1、可以有效的防止非法SQL的注入;
2、是一个预编译的SQL命令执行接口,提高性能;
while( rs.next() ){

} //只要存在一行数据,就会返回一个true,如果检查不到数据,则返回false;

//增删改公共方法 sql 值
	public int update(String sql,Object ...obj) throws Exception {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool?character=utf8", "root", "root");
		PreparedStatement pstm = conn.prepareStatement(sql);
		for (int i = 0; i < obj.length; i++) {
			pstm.setObject(i+1, obj[i]);
		}
		int result = pstm.executeUpdate();
		return result;
	}

六、数据库连接池

package com.cn;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.junit.Test;
/**
 * @author Administrator
 *	数据库连接池
 *	使用每一次都加载驱动创建连接的方式插入两千条数据需要9秒钟
 */
public class Demo {
	
	Connection conn =null;
	static DataSource datasource=null;
	//java提供的配置文件类,以键值对方式存储数据
	static Properties p =new Properties();
	static {
		try {
			//从文件中读取数据存储流中
			InputStream is = Demo.class.getClassLoader().getResourceAsStream("config/dbcp.properties");
			//加载流中的数据到Properties
			p.load(is);
			//使用数据源工厂创建一个数据源(连接池)
			datasource= BasicDataSourceFactory.createDataSource(p);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test	
	public void demo01() throws Exception {
		 conn = datasource.getConnection();
		for (int i = 0; i < 5; i++) {
			update(i);
		}
		
	}
	public void update(int i) throws Exception {
		Statement st = conn.createStatement();
		int result = st.executeUpdate("insert into a values("+i+")");		
	}	
}

七、dbutils: 是一个开源框架,目的是封装了jdbc,减轻了开发者的工作量,提高的开发者代码的运行速度

package com.cn.dao.impl;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.cn.dao.StudentDao;
import com.cn.entity.Student;
import com.cn.utils.DataBase;

/**
 * @author Administrator
 *dbutils 是一个开源框架,目的是封装了jdbc,减轻了开发者的工作量,提高的开发者代码的运行速度
 *
 */
public class StudentDaoImpl extends DataBase implements StudentDao{
	@Override
	public Student login(String name, String pass) {
		Student stu =null;
		try {
                QueryRunner run=new QueryRunner(datasource);
                stu=run.query("select * from student where stuname=? and stupass=?" ,new BeanHandler<Student>(Student.class),name,pass);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stu;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值