学习笔记:jdbc调用存储过程等

statement    //超父接口

preparedstatement  //父接口  是java sql 包下的一个接口,通过调用connection preparedStatement(sql)方法可以获得PreparedStatement对象,数据库系统会对其进行预编译,这样,它就比Statement对象生成的查询速度快。PreparedStatement可以写动态参数化查询 用它你可以写带参数的sql查询语句。同时,PreparedStatement拥有更佳的性能优势。Sql语句会在预编译的数据库系统中,执行计划同样会被缓存起来,它允许数据库做参数化查询,使用预处理语句比普通语句的查询速度更快,因为它做的工作更少。另外还可以防止sql注入:类似于username="'1'or'1'='1'";

callablestatement 调用存储过程用的


JDBC中的事物

如:

修改员工薪资同时提交修改信息表,要求必须修改完成,并且在表中插入修改信息。

步骤:

创建表和序列

1.在orcle中创建表和序列:

create table logs_emp(
id number(4) primary key,
who varchar2(30),
when date default sysdate,
what varchar2(50)
);
create sequence my_log_emp start with 1000 increment by 1;

2.利用java JDBC

package day110;


import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;


import util.ConnectionUtils;
public class Test01 {
public static void main(String[] args) {
update(5000,7369);
}
public static  void update(int empno,int salary){
String sql="update emp set sal="+salary+"where empno="+empno;
String sql02="insert into logs_emp values(my_log_emp.nextval,user,sysdate,'update salary')";
Connection conn=null;
Statement stmt=null;
try {
conn=ConnectionUtils.openConnection();//利用创建的工具包建立连接
stmt=conn.createStatement();//创建statement实例

conn.setAutoCommit(false);
int n=stmt.executeUpdate(sql);
int n02=stmt.executeUpdate(sql02);
if(n==1&n02==1){
conn.commit();;
}else{
conn.rollback();
}

conn.setAutoCommit(true);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


}

二.JDBC执行批处理,往test表中插入1-105

package day110;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


import util.ConnectionUtils;


public class BatchDemo {
public static void main(String[] args) {
executeSql();
}
public static void executeSql(){
String sql = "insert into test(ID) values(?)";
Connection conn = null;
PreparedStatement stmt= null;
try {
conn=ConnectionUtils.openConnection();

conn.setAutoCommit(false);
stmt=conn.prepareStatement(sql);
for(int i=1;i<=105;i++){
stmt.setInt(1, i);
stmt.addBatch();
if(i%10==0){
stmt.executeBatch();
stmt.clearBatch();
}
}
stmt.executeBatch();
conn.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ConnectionUtils.closeConnection(conn);
}
}


三.分页

一次性把数据全部取出来放在缓存里,

只访问数据库一次,第一次取比较慢,以后每页都从缓存数据中取,仅适合数据量不大的情况。

基于缓存:

package day110;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


import util.ConnectionUtils;


public class BufferPageDemo {
public static void main(String[] args) {
getPage(10,3);
}
private static void getPage(int pageSize, int page){
int begin =(page-1)*pageSize+1;
String sql="select * from test";
Connection conn =null;
Statement stmt = null;
ResultSet rs= null;
try {
conn=ConnectionUtils.openConnection();
stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY
);
rs=stmt.executeQuery(sql);
rs.absolute(begin);
for(int i=0;i<pageSize;i++){
System.out.println(rs.getInt("ID"));

if(!rs.next()){
break;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}finally{
ConnectionUtils.closeConnection(conn);
ConnectionUtils.closeResultSet(rs);
}
}
}

如果访问的页数超过总页数,或者是负数时

package day110;


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


import util.ConnectionUtils;


public class BufferPageDemo2 {
public static void main(String[] args) {
getPage(10,"8888");
}
private static void getPage(int pageSize,String j){
int page=1;
try{
page=Integer.parseInt(j);
    }catch(NumberFormatException e){
    page=1;
    }
int totalPage= getTotalPage(pageSize);
if(page>totalPage){
page=totalPage;
}
if(page<1){
page=1;
}
int begin=(page-1)*pageSize+1;
String sql="select * from test";
Connection conn= null;
Statement stmt= null;
ResultSet rs= null;
try {
conn=ConnectionUtils.openConnection();
stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY
);
rs=stmt.executeQuery(sql);
rs.absolute(begin);
for(int i=0;i<pageSize;i++){
System.out.println(rs.getInt("ID"));

if(!rs.next()){
break;
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();


}finally{
ConnectionUtils.closeConnection(conn);
ConnectionUtils.closeResultSet(rs);
}
}
private static int getTotalPage(int pageSize){
int totalTableCount = 0;
totalTableCount = getTotalTableCount();
int totalPage = 0;
int mode= totalTableCount%pageSize;
if(mode==0){
totalPage = totalTableCount/pageSize;
}else{
totalPage = totalTableCount/pageSize+1;
}
return totalPage;
}
private static int getTotalTableCount(){
int count =0;
String sql ="select count(*) num from test";
Connection conn=null;
Statement stmt=null;
ResultSet rs= null;
try {
conn = ConnectionUtils.openConnection();
stmt=conn.createStatement();
rs= stmt.executeQuery(sql);
rs.next();

count=rs.getInt("num");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
ConnectionUtils.closeConnection(conn);
ConnectionUtils.closeStatemenet(stmt);
}
return count;
}


}


基于查询的方式:

package day110;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import util.ConnectionUtils;


public class SelectPageDemo {
public static void main(String[] args) {
getPage(10,3);
}
private static void getPage(int pageSize,int page){
int begin = (page-1)*pageSize+1;
int end=begin+pageSize-1;
String sql="select ID from ( select ID,rownum rn from test)where rn between? and ?";
Connection conn=null;
PreparedStatement stmt =null;
ResultSet rs=null;
try {
   conn=ConnectionUtils.openConnection();
stmt=conn.prepareStatement(sql);
stmt.setInt(1, begin);
stmt.setInt(2, end);
rs=stmt.executeQuery();
while(rs.next()){
System.out.println(rs.getInt("ID"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
ConnectionUtils.closeConnection(conn);
ConnectionUtils.closeResultSet(rs);
ConnectionUtils.closeStatemenet(stmt);
}

}
}

基于查询的分页策略:直接从数据表中取出部分数据(x到y条的数据)

基于缓存的分页策略:获得数据表中的全部数据,得到可滚动结果集,通过移动指针从结果集中取出部分数据,适用于数据量小的表

存储过程的调用:

package day110;


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;


import util.ConnectionUtils;


public class ProcDemo {
public static void main(String[] args) {
int flag= checkUser(1001,"1234");
if(flag==1){
System.out.println("登陆成功");
}else if(flag==0){
System.out.println("密码错误");
}else if(flag==-1){
System.out.println("账号不存在");
}else{
System.out.println("其他错误");
}
}
private static int checkUser(int id , String pwd){
int flag=-2;
String sql="{call checkuser_newland(?,?,?)}";
Connection conn = null;
CallableStatement stmt = null;
try {
conn=ConnectionUtils.openConnection();

stmt=conn.prepareCall(sql);
stmt.setInt(1, id);
stmt.setString(2, pwd);
stmt.registerOutParameter(3, Types.INTEGER);
stmt.execute();
flag=stmt.getInt(3);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
ConnectionUtils.closeConnection(conn);
ConnectionUtils.closeStatemenet(stmt);
}
return flag;
}
}

内容概要:本文档详细介绍了在三台CentOS 7服务器(IP地址分别为192.168.0.157、192.168.0.158和192.168.0.159)上安装和配置Hadoop、Flink及其他大数据组件(如Hive、MySQL、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala)的具体步骤。首先,文档说明了环境准备,包括配置主机名映射、SSH免密登录、JDK安装等。接着,详细描述了Hadoop集群的安装配置,包括SSH免密登录、JDK配置、Hadoop环境变量设置、HDFS和YARN配置文件修改、集群启动与测试。随后,依次介绍了MySQL、Hive、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala和Flink的安装配置过程,包括解压、环境变量配置、配置文件修改、服务启动等关键步骤。最后,文档提供了每个组件的基本测试方法,确保安装成功。 适合人群:具备一定Linux基础和大数据组件基础知识的运维人员、大数据开发工程师以及系统管理员。 使用场景及目标:①为大数据平台搭建提供详细的安装指南,确保各组件能够顺利安装和配置;②帮助技术人员快速掌握Hadoop、Flink等大数据组件的安装与配置,提升工作效率;③适用于企业级大数据平台的搭建与维护,确保集群稳定运行。 其他说明:本文档不仅提供了详细的安装步骤,还涵盖了常见的配置项解释和故障排查建议。建议读者在安装过程中仔细阅读每一步骤,并根据实际情况调整配置参数。此外,文档中的命令和配置文件路径均为示例,实际操作时需根据具体环境进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值