14JDBC
一.JDBC简介
全名:java database connection
java代码与数据库相连的工具,java>JDBC>(oracle mysql sql server)
二.四大件
- DriverManager:根据不同数据库,调用正确的Driver
- Connection:由Driver产生,负责数据库的连接
- Statement:由connection产生,负责传送SQL指令
- ResultSet:负责接收Statement(sql语句)执行结果
三.JDBC具体步骤
- 安装驱动,驱动为一个jar包,mysql的驱动和oracle的驱动不同
- 复制到src目录下,build path>addto
- 加载驱动-------Class.forName("com.mysql.jdbc.Driver");
- 与数据库相连----------Connection con=DriverManager.getConnection(url,user,psw);(此处会发生异常)
- 写sql语句---------Statement st=con.createStatement();(异常)
- 执行sql语句-----------int rows=st.executeUpdate(sql);//更新操作:此处返回受影响的行数
- 关闭四大件-------st.close();con.close();
以上为更新数据,下面的例子为插入数据,具体代码如下
public class StudentDao{
private Connection con;
private Statement st;
private ResultSet rs;
public void insert(Student s)throws SQLExp{
String sql="insert****";
con=DbUtils.getConnection();
st=con.createStatement();
int rows=st.executeUpdate(sql);
DbUtils.close(con,st,rs);
return rows;
}
public static void close(Connection con,Statement st,ResultSet rs){
try{
if(con!=null) con.close();
if(st!=null) st.close();
if(rs!=null) rs.close();
}catch(SQLExp e){
syso(连接失败);
e.printStackTrace();
}
}
}
另有优化的方法PreparedStatement:预编译:可有效防止sql注入
public class StudentDao{
private Connection con;
private PreparedStatement ps;//
private ResultSet rs;
public void insert(Student s)throws SQLExp{
String sql="insert into Student values(?,?,?,?)";
con=DbUtils.getConnection();
ps=con.prepareStatement();
ps.setInt(1,s.getId());
ps.setString(2,s.getName());
ps.setInt(3,s.getAge());
ps.setDouble(4,s.getScore());
int rows=st.executeUpdate(sql);
DbUtils.close(con,st,rs);
return rows;
}
}
关于JDBC的批处理,一般用到较少
//传入参数非一个学生,二是一个学生的List数组
for(Student s:l){
String sql="insertXXXX";
st.addBatch(sql);
}
int arr[]=st.executeBatch(); //预编译:
String sql="insert into student values(?,?,?,?)";
ps=con.preparedStatement(sql);
for(Student s:l){
ps.setInt(1,s.getId());
ps.setString(2,s.getName());
ps.addBatch(sql); //批处理
}
test类
StudentDao sd=new StudentDao();
List<Student>l=new ArrayList<Student>();
Student s=new Student(1015,"zhangwenfang",54.2,"sdad");
Student s1=new Student(1004,"zhangwefsng",54.2,"sfdsad");
Student s2=new Student(1003,"zhsfdang",54.2,"gasad");
l.add(s);
l.add(s2);
l.add(s1);
try {
sd.inserts(l);
System.out.print("插入成功");
} catch (SQLException e) {
System.out.println("插入失败");
e.printStackTrace();
}
四.关于事务
理解银行转账的过程,要么全成功,要么全失败。你给人转账,你银行得-钱,别人得+钱
三要素:
- 保证Connection 是同一个
- 关闭自动提交
- 不要忘了手动提交
14JDBC的更多相关文章
- 5.14JDBC
一.##JDBC 1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库. JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数 ...
随机推荐
- kali ssh远程连接过程
准备工具: kali系统,secureCRT, 首先在kali系统中配置ssh文件,我们知道linux总是把所有的配置管理信息当作文件处理,所以对ssh的配置也是相当于对文件的编辑. vi /etc/ ...
- K8S配置安装全过程
V1.11.1https://github.com/kubernetes/kubernetes/releases/tag/v1.11.1环境准备:系统:centos7.2.1511[root@mast ...
- mybatis-spring和spring版本搭配问题
所报错误:org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer 匹配的版本(my ...
- python全栈开发笔记---------函数
一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...
- Unable to determine the device handle for GPU 0000:01:00.0: GPU is lost.问题排坑
在运行maskrcnn时,会碰到训练不动的问题,就卡在这儿 UserWarning: Converting sparse IndexedSlices to a dense Tensor of unkn ...
- @Autowired注解与@Qualifier注解搭配使用
问题:当一个接口实现由两个实现类时,只使用@Autowired注解,会报错,如下图所示 实现类1 实现类2 controller中注入 然后启动服务报错,如下所示: Exception encount ...
- redis应用-分布式锁
一个操作要修改用户的状态,修改状态需要先读出用户的状态,在内存里进行修改,改完了再存回去.如果这样的操作同时进行了,就会出现并发问题,因为读取和保存状态这两个操作不是原子的. set lock:cod ...
- Excel汉字转换拼音首字母缩写的函数
打开Excel->工具->宏->Viaual Basic编辑器在弹出来的窗口中对着VBAproject点右键->插入->模块下面会出现一个名为"模块1" ...
- LoadLibrary 失败的解决
工作中遇到调用Loadlibrary 偶发失败的问题,不是必现,而且这种错误只是在程序初始化的时候出现,初始化成功后当然不会调用,而初始化也不是经常做的动作,所以查找原因起来比较麻烦,调试过程中发现有 ...
- js之 单例模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...