java --JDBC

本文详细介绍了Java使用JDBC进行数据库操作的步骤,包括注册驱动、获取连接、创建Statement对象、执行SQL(DML与查询)、处理结果集以及释放资源。还提到了PreparedStatement用于防止SQL注入,并简单讨论了事务管理和行级锁的概念。
摘要由CSDN通过智能技术生成

java–JDBC

JDBC编程六步:
1、注册驱动
2、获取连接
3、获取数据库操作对象
4、执行sql
5、处理查询结果集(如果第四步执行了select语句才会有第五步)
6、释放资源

package mysql;
import java.sql.*;
public class connetion {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Connection c=null;
		Statement s=null;
		ResultSet rs=null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");//调用静态代码块的Driver方法
			c=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","2386313490");//获取连接
			s=c.createStatement();//获取数据库处理对象
			String s2="update t_student set num=1 where num=0";
			String str="insert into t_student(num,name,sex,class) value(1,'wwu',1,2)";
			String s1="select * from t_student";
			s.executeUpdate(s2);//调用函数进行DML
			s.executeUpdate(str);
			rs=s.executeQuery(s1);//获取查询表信息
			while(rs.next()) {   //输出信息
				int num=rs.getInt("num");//getInt()方法可以为下标是从1开始的,如果是列名的话,要对应前面的查询语句里的列名(因为别名)
				String name=rs.getString("name");
				int sex=rs.getInt("sex");
				int cnum=rs.getInt("class");
				System.out.println("num:"+num+" "+"name:"+name+" "+"sex:"+" "+sex+" "+"calss:"+cnum);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			
			if(s!=null) {
				try {
				s.close();
				}
				catch(SQLException e) {
					e.printStackTrace();
				}
			}
			if(c!=null) {
				try {
					c.close();
					}
					catch(SQLException e) {
						e.printStackTrace();
					}
			}
		}
	}

}

JDBC编程六部函数:
Class.forName();//调用静态代码块实现初始化
Connection c=DriverManager.getConnection(url,user,password);//连接数据库
Statement s=c.createsStatement(()//获取数据库处理对象
ResultSet//用来存放executeQuery()函数的返回值(也就是查询结果)
executeQuery()//用来进行查询
executeUpdate()//用来进行DML操作

操作select的ResultSet的函数
getxxx(),用来得到一个表中的数据,里面可以是下标(从1开始)和列字段名;
next()用来判断是否有下一行数据

preparedStatement(预编译的数据库操作对象,编译一次执行多次,会在编译之前进行类型检查)
可用于解决SQL语句注入的问题(也就是用户提供的信息不参与SQL语句的编译过程)

Statement(编译一次执行一次)
支持SQL语句注入,如果需要进行SQL语句拼接的,必须使用Statement

String str="select * from t_user where loginName=? and loginpwd=?";//SQL语句的框架
//?表示占位符,一个占位符只接收一个值,占位符不能使用单引号括起来
perparedStatement ps=c.perpareStatement(str);//获取操作对象
ps.executeQuery();//进行查询
//setxxx()后面的XXX是类型;
ps.setString(1,loginName);//1(第几个?),loginName(要传的值,也就是要代替?的值)
//loginName如果是字符串传到SQL语句的时候会自动加上''
//如果是int就不会,直接是原值
ps.setString(2,loginpwd);

事务机制
setAutoCommit(boolean );设置自动提交,false不自动提交 true 自动提交
c.commit();提交
c.roollback();回滚;

行级锁 (悲观锁)
select * from t_studen where class=1 for update;
添加for update就可以了

行级锁:事务必须排队,数据锁住了,不允许并发。
乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值