web开发学习笔记五:Jdbc

JDBC:使用java代码来对数据库进行数据操作


jdbc是一套能通用操作于不同数据库的接口,各个数据库厂商都要提供相应的java驱动程序


使用jdbc的前提
数据库地址的url:url =  jdbc:mysql://localhost:3306/demo
 jdbc协议:数据库子协议:主机:端口/连接的数据库名
用户 user = root
密码 password = root


一.jdbc连接数据库

连接jdbc步骤
1.创建所要连接的数据库的驱动程序类对象(需要导入相应的数据库驱动包)
2.该对象提供了连接数据库的方法


jdbc接口,类

Driver接口: 表示java驱动程序接口,所有数据库厂商要来实现此接口提供java驱动程序类

Connection接口:表示java程序和数据库的连接对象,该接口提供了获取操作数据库对象的方法

(sun推荐使用)DriverManager类: 该类可以管理注册jdbc的驱动程序,使用该类也可以获取数据库连接对象
通过该类提供的注册方法,注册将要连接的驱动对象,再通过该类获取相应的连接对象
连接数据库示例:
1.注册驱动程序对象,
//通过反射注册驱动程序对象(需要导入相应的驱动程序包),以mysql为例
Class.forName("com.mysql.jdbc.Driver");
2.获取连接
Connection conn DriverManager.getConnection(url,user,password);//参数都为字符串,


3.接着便可以通过 conn 对象的方法 来获取可以操作数据库的对象

Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象
executeUpdate(String sql); 执行参数sql语句,可以执行 增,删,改 语句
executeQuery(String sql); 执行查询的sql语句,返回一个ResultSet 对象。

ResultSet接口:对应于数据库结果集的数据表
使用查询语句,返回的有一个或多个内容。ResultSet以类似表结构的方式接收了内容

ResultSet 提供了相应的方法。
ResultSet  rs =  executeQuery(sql);


api描述:ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前

rs.next(); //将光标从当前位置向前移一行


根据索引取出列值
rs.getInt(int); //获取当前指定列的值(光标代表行,这个方法得到的是列 id,name,age,对应列值1,2,3)
根据列名取出列值
rs.getString("name"); //获取指定列的值


ResultSet的get方法都是重载方法,返回值跟数据库的字段类型有关,自己注意。


PreparedStatement接口:该接口是Statement接口的子类,表示预编译的 SQL 语句的对象
推荐使用该接口的方法来对数据库进行操作,

PreparedStatement执行的是预编译的sql语句,比较安全
使用区别如下例:

Statement
1.使用Connection接口的createStatement() 来创建一个Statement对象,
Connection conn
Statement stat = conn.createStatement();
2.准备执行的SQL语句
String sql = "NSERT INTO student(NAME,gender) VALUES("小明","男")"; 


stat.executeUpdate(sql); // 执行sql语句


.. 关闭相应的连接



PreparedStatement
1.准备预编译的sql语句
String sql = "INSERT INTO student(NAME,gender) VALUES(?,?)"
2.使用Connection接口的来执行预编译sql语句语句并返回一个PreparedStatement对象
PreparedStatement stmt = conn.prepareStatement(sql);
3.设置参数,参数就是sql语句中的?,注意类型
stmt.setString(1,"小红"); //设置第一个参数,第一个?
stmt.setString(2,"女"); //设置第2个参数,第2个?


stmt.executeUpdate(); // 使用此方法才开始执行 sql语句

..关闭相应的连接


conn执行预编译sql时,会检查语法,stmt设置参数,在调用executeUpdate时会把参数直接传递过去,然后执行
这样可以防止sql注入。详情请另行查阅相关资料

批处理:有时候需要批量执行SQL语句,PreparedStatement有相关的方法
相关方法: PreparedStatement = pstmt

pstmt.addBatch();将一组参数添加到此 PreparedStatement 对象的批处理命令列表中
pstmt.executeBatch();将一批命令提交给数据库来执行,该方法来自Statement
pstmt.clearBatch();清空批处理列表,该方法来自Statement

详情查阅api,批处理方法都来自 Statement, PreparedStatement重写了addBatch而已。


CallableStatement接口:用于执行 SQL 存储过程的接口
该接口继承了PreparedStatement接口,所以也可以预编译sql语句。

使用示例:
1.准备sql(有关存储过程的sql语句) 
String sql= "CALL pro_findById(?)"; // 这是带有输入参数的存储过程
2.Connection接口的来执行预编译sql语句语句并返回一个CallableStatement对象
CallableStatement call = conn.prepareCall(sql); 
3.设置参数
call.setInt(1, 6);
4.发送参数
call.executeQuery();//注意所有调用存储过程的sql语句都是使用executeQuery方法执行,返回ResultSet

..后续相关操作,



元数据:
在jdbc中可以使用的有数据库元数据,参数元数据,结果集元数据

DatabaseMetaData 数据库元数据:有关于数据库的整体综合信息;
获取方法,通过Connection接口的 getMetaData()方法获得;


DatabaseMetaData常用方法:
getUserName(); 获取连接数据库管理系统的用户名
getURL(); 获取连接数据库的URL
... 等等有关数据库信息方法,详情查阅api


ParameterMetaData 参数元数据:用于获取 PreparedStatement 对象属性参数
获取方法,通过  PreparedStatement 对象的 getParameterMetaData()方法获得


ParameterMetaData常用方法:
getParameterCount();获取参数的个数
...等等相关方法,详情查阅api


ResultSetMetaData 结果集元数据:用于获取关于 ResultSet 对象中列的类型和属性信息的对象
获取方法,通过 ResultSet对象的 getMetaData() 方法获得


ResultSetMetaData常用方法:
getColumnCount(); 获取列的个数
getColumnName(int); 获取列的名称,参数为列的序号
...等等相关方法,详情查阅api



事务管理:
事务使指一组最小逻辑操作单元,里面有多个操作组成。 
组成事务的每一部分必须要同时提交成功,
如果有一个操作失败,整个操作就回滚,


例如转账: A 给 B 转账,A 钱扣了,但是 B的钱在增加的时候出错没完成,
那么A的操作肯定要回滚,不然A扣钱了,B的钱却没增加。

事务有关方法都定义在Connection接口中,


setAutoCommit();// 设置事务是否自动提交,获取连接对象时默认为true;
// true,自动提交,false,手动提交

setSavepoint();//创建一个保存点,返回值为Savepoint对象,
//Savepoint:保存点,


rollback(); //回滚事务,回滚事务中进行的所有更改,
rollback(Savepoint savepoint); //回滚到指定的保存点(代码)

commit(); //手动提交事务,需要设置事务为手动提交才能进行事务管理



该文章内容只是本人作为初学者的学习笔记总结,若想深入了解详情请自行查阅相关资料

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值