900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql调用java函数_mysql概要(十五)存储过程(2)(java调用函数和存储过程)

mysql调用java函数_mysql概要(十五)存储过程(2)(java调用函数和存储过程)

时间:2021-04-17 01:43:56

相关推荐

mysql调用java函数_mysql概要(十五)存储过程(2)(java调用函数和存储过程)

使用存储过程的目的:

即将数据的函数处理放在数据库,这样主要是为了,多语言跨平台的使用(java,.net,php),不用重复的函数代码,直接调用存储过程。

(对于使用存储过程还是代码来处理数据的效率问题,这个应该是比较复杂的问题)

存储过程与自定义函数的区别:

存储过程实现过程要复杂些,而函数的针对性较强;

存储过程可以有多个返回值,而自定义函数只有一个返回值;

存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;

存储过程存在的必要性(好处):

存储过程就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.

提高了运行速度;

同时降低网络数据传输量(传一堆SQL代码快,还是传一个存储过程名字和几个参数快)

---存储过程---

#修改mysql语句的结束符为//

(修改结束符的原因是存储过程中用到分号,作为语句的分隔符)

mysql > delimiter //

#定义一个过程,获取users表总记录数,将10设置到变量count中

(有点特别是,输入输出的都定义在括号中作为参数,in表示输入(下面参数:out表示输出标识,输出变量,类型)

create procedure simpleproc(out count int)begin

select count(id) into count fromusers;(into 表示结果赋值给count)end

//

#修改mysql语句的结束符为;

mysql > delimiter ;

#调用过程,将结果赋给变量a,@是定义变量的符号

call simpleproc(@a);

#显示变量a的值

select @a;

Java调用Mysql的过程

String sql ="{call simpleproc(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);

cstmt.registerOutParameter(1,Types.INTEGER);

cstmt.execute();Integer count = cstmt.getInt(1);

System.out.println("共有"+ count + "人");

/*** 工具类

*@authorAdminTC*/

public classJdbcUtil {private static String driver = "com.mysql.jdbc.Driver";private static String url = "jdbc:mysql://127.0.0.1:3306/js";private static String user = "root";private static String password = "root";static{try{

Class.forName(driver);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}

}public static Connection getConnection() throwsException{returnDriverManager.getConnection(url,user,password);

}public static void close(Connection conn) throwsException{if(conn != null){

conn.close();

}

}public static void close(Statement stmt) throwsException{if(stmt != null){

stmt.close();

}

}public static void close(ResultSet rs) throwsException{if(rs != null){

rs.close();

}

}

}

View Code

/*** 演示Java调用Mysql的过程

*@authorAdminTC*/

public classTestJavaCallMysqlProc {public static void main(String[] args) throwsException{//Java调用过程的语法,这里只有一个?号,它是输出值

String sql = "{call simpleproc(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);//这个输出的?设置类型,?号下标从1开始

cstmt.registerOutParameter(1,Types.INTEGER);//执行过程的调用

cstmt.execute();//接收过程的返回值

Integer count = cstmt.getInt(1);//显示

System.out.println("共有" + count + "个用户");

JdbcUtil.close(cstmt);

JdbcUtil.close(conn);

}

}

View Code

----函数----

#修改mysql语句的结束符为//

mysql > delimiter //

#定义一个函数,完成字符串拼接

create function hello( s char(20) ) returns char(50) (定义最大输入字符和输出字符的长度)return concat('hello,',s,'!');(mysql自带拼接字符串函数)//

#修改mysql语句的结果符为;

mysql > delimiter ;

#调用函数

select hello('world');

Java调用Mysql的函数

String sql = "{? =call hello(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);

cstmt.registerOutParameter(1,Types.VARCHAR);

cstmt.setString(2,"zhaojun");

cstmt.execute();

String value= cstmt.getString(1);

System.out.println(value);

JdbcUtil.close(cstmt);

JdbcUtil.close(conn);

/*** 演示Java调用Mysql的函数

*@authorAdminTC*/

public classTestJavaCallMysqlFunc {public static void main(String[] args) throwsException{

String sql= "{? = call hello(?)}";

Connection conn=JdbcUtil.getConnection();

CallableStatement cstmt=conn.prepareCall(sql);//第一个输出的?设置类型

cstmt.registerOutParameter(1,Types.VARCHAR);//第二个输入的?设置值

cstmt.setString(2,"赵君");//调用函数

cstmt.execute();//接收返回的值

String value = cstmt.getString(1);//显示

System.out.println(value);

JdbcUtil.close(cstmt);

JdbcUtil.close(conn);

}

}

View Code

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。