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就可以了
行级锁:事务必须排队,数据锁住了,不允许并发。
乐观锁:支持并发,事务也不需要排队,只不过需要一个版本号。