JDBC

JDBC

Java Database Connectivity java 数据库连接

  • 为什么会出现JDBC

SUN公司提供的一种数据库访问规则、规范,由于数据库种类较多,并且Java语言使用比较广泛,sun公司就提供了一种规范,让其他的数据库提供商去实现底层的访问规则。我们的Java程序只要使用sun公司提供的jdbc驱动即可。

使用JCBC的基本步骤

1.注册驱动

//1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());

2.建立连接

// DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=monty&password=greatsqldb");
//2.建立连接 参数一:协议 + 访问的数据库,参数二:用户名,参数三:密码。
conn = DriverManager.getConnection("jdbc:mysql://localhost/school", "root", "");

3.创建statement

//3.创建statement,跟数据库打交道,一定需要这个对象。
st = conn.createStatement();

4.执行sql,得到ResultSet

//4.执行查询,得到结果集
String sql = "select * from student";
rs = st.executeQuery(sql);

5.遍历结果集

//5.遍历查询每一条记录
while(rs.next()) {
	int id = rs.getInt("student_no");
	String name = rs.getString("student_name");
	String sex = rs.getString("sex");
	
	System.out.println("id=" + id + "name=" + name + "sex=" + sex);
}

6.释放资源

if (rs != null) {
    try {
        rs.close();
    } catch (SQLException sqlEx) { } // ignore 
    rs = null;
}

...

###JDBC 工具类构建

1.资源释放工作的整合

2.驱动防二次注册

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

Driver 这个类里面有静态代码块,一上来就执行了,所以等同于我们执行了两次驱动,其实没有这个必要的。
//静态代码块 ---> 类加载了,就执行。java.sql.DriverManager.registerDriver(new Driver());

最后形成以下代码即可
Class.forName("com.mysql.jdbc.Driver");

3.使用properties配置文件

1.在src底下声明一个文件 xxx.properties,里面的内容如下

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/school
name=root
password=

2.在工具类里面,使用静态代码块,读取属性

static {
	
	try {
		//1.创建一个属性配置对象
		Properties properties = new Properties();
		//对应文件位于工程根目录
		//InputStream is = new FileInputStream("jdbc.properties");
		//使用类加载器,去读取src底下的资源文件,后面在servlet
		//对应文件位于src目录底下
		InputStream is = JDBCUtil.class.getResourceAsStream("jdbc.properties");
		//导入输入流
		properties.load(is);
		
		//读取属性
		driverClass = properties.getProperty("driverClass");
		url = properties.getProperty("url");
		name = properties.getProperty("name");
		password = properties.getProperty("password");
		
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	
}

###数据库的CRUD sql

  • insert

      insert into student(student_no,student_name,sex) values('1000000','吃吃','女');
    
      //1.获得连接对象
      conn = JDBCUtil.getConn();
      //2.根据连接对象,得到statement
      st = conn.createStatement();
      //3.执行添加
      String sql = "insert into student(student_no,login_pwd,student_name,sex,grade_id,phone,address,born_date,email,identity_card) values\r\n" + 
      		"(121212,default,'吃吃','女',1,'13645667783','成都市婧将区','1990-09-08 00:00:00','chichi@163.com','511121200001021234')";
      //影响的行数,如果大于0表明操作成功,否则失败
      int result = st.executeUpdate(sql);
      
      if(result > 0) {
      	System.out.println("添加成功");
      }else {
      	System.out.println("添加失败");
      }
    
  • delete

      delete from student where student_name = '张三';
    
      //删除
      Connection conn = null;
      Statement st = null;
      
      try {
      	//1.获得连接对象
      	conn = JDBCUtil.getConn();
      	//2.根据连接对象,得到statement
      	st = conn.createStatement();
      	//3.执行添加
      	String sql = "delete from student where student_name = '吃吃'";
      	//影响的行数,如果大于0表明操作成功,否则失败
      	int result = st.executeUpdate(sql);
      	
      	if(result > 0) {
      		System.out.println("删除成功");
      	}else {
      		System.out.println("删除失败");
      	}
      	
      } catch (SQLException e) {
      	e.printStackTrace();
      }finally {
      	JDBCUtil.release(conn, st);
      }
    
  • query

      select * from student;
    
      //查询
      Connection conn = null;
      Statement st = null;
      ResultSet rs = null;
      
      try {
      	//1.获得连接对象
      	conn = JDBCUtil.getConn();
      	//2.根据连接对象,得到statement
      	st = conn.createStatement();
      	//3.执行sql语句,返回ResultSet
      	String sql = "select * from student";
      	rs = st.executeQuery(sql);
      	
      	//4.遍历结果集
      	while(rs.next()) {
      		int id = rs.getInt("student_no");
      		String name = rs.getString("student_name");
      		System.out.println("学号:" + id + "姓名:" + name);
      	}
      	
      } catch (SQLException e) {
      	e.printStackTrace();
      }finally {
      	JDBCUtil.release(conn, st, rs);
      }
    
  • update

      update student set sex = '女' where student_name = '呵呵'; 
    
      //修改
      Connection conn = null;
      Statement st = null;
      
      try {
      	//1.获得连接对象
      	conn = JDBCUtil.getConn();
      	//2.根据连接对象,得到statement
      	st = conn.createStatement();
      	//3.执行添加
      	String sql = "update student set sex = '神' where student_no = 20010";
      	//影响的行数,如果大于0表明操作成功,否则失败
      	int result = st.executeUpdate(sql);
      	
      	if(result > 0) {
      		System.out.println("修改成功");
      	}else {
      		System.out.println("修改失败");
      	}
      	
      } catch (SQLException e) {
      	e.printStackTrace();
      }finally {
      	JDBCUtil.release(conn, st);
      }
    

注:使用update,delete更新删除,如果列被外键绑定,那么需要先进行外键约束检查关闭,然后执行更新删除操作,然后再次开启外键约束检查

SET foreign_key_checks = 0;  // 先设置外键约束检查关闭

XXXX;  // 操作数据,表或者视图
 
SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性

###使用单元测试,测试代码

1.定义一个类,TestXXX,里面定义方法 testXXX

2.添加junit的支持。

右键工程 --- add Library --- Junit --- Junit4(最新即可)

3.在方法的上面加上注释,其实就是一个标记

@Test
public void testQuery(){
	...
}

4.光标选中方法名字,然后右键执行单元测试。或者是打开outline视图,然后选中方法右键执行。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值