MySql_数据库用java程序创建表以及存储过程

合集下载

mysql存储过程

mysql存储过程

mysql存储过程MySQL存储过程1. 存储过程简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。

它可以有SQL 语句和一些特殊的控制结构组成。

当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。

数据库中的存储过程可以看做是对编程中面向对象方法的模拟。

它允许控制数据的访问方式。

存储过程通常有以下优点:(1).存储过程增强了SQL语言的功能和灵活性。

存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).存储过程允许标准组件是编程。

存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。

而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).存储过程能实现较快的执行速度。

如果某一操作包含大量的Transaction-SQL 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。

因为存储过程是预编译的。

在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。

而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).存储过程能过减少网络流量。

针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

(5).存储过程可被作为一种安全机制来充分利用。

系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

Java连接MySql数据库,并且实现插入、删除、更新、选择操作

Java连接MySql数据库,并且实现插入、删除、更新、选择操作

天之火–Qutr的专栏君子终日乾乾,夕惕若,厉,无咎。

HomeJava连接MySql数据库,并且实现插入、删除、更新、选择操作!这是我最近写的一个连接MySql数据库的一个例子,主要实现了插入,删除,更新,选择操作,用的环境是j2sdk1.4.2_08,Eclipse3.1。

以前我的同事用Python 写了同样的类,非常的好用,支持了我们公司的大部分业务,现在我们慢慢改用Java了,所以我用Java重写了一遍。

一方面在今后的业务中能够用到,另一方面熟悉一下Java。

下面我把在Eclipse3.1下怎样配置数据库连接信息简单说一下。

1.启动Eclipse3.1。

2.建立一个Java project就叫DbConnect 吧,再在该Project下建立一个新类也叫DbConnect 吧。

3.右击DbConnect.java文件点import,选择Archive file然后选择你的mysql-connector-java-3.1.8-bin.jar文件,点Finish。

你会看到有好些文件被加载进来,OK这就是连接MySql所需的驱动信息。

如果到了这里你都成功的话那么恭喜你,你已经成功一半了!:)4.接下来把我下面的代码copy到你的Java文件中,修改相关的数据库连接信息运行一下。

OK?我说一下那个mysql-connector-java-3.1.8-bin.jar文件,其实这就是一个MySql的驱动,各数据库厂商提供了不同的适用于JDBC的驱动使得在Java中连接数据库非常简单。

这里我就不多说了,以后我会写篇专门介绍数据库驱动的文章。

关于MySql的驱动还有更新版本的,你需要到MySql的网站上去下载,这个网上到处都是,我就不多说了。

下面看程序,有些地方我写了详细的注释应该能看懂。

这个类是非常有特色的,在每个方法的传人参数和返回值不变的情况下,希望高手能提出改进意见。

多指教,谢谢!/*** 数据库连接、选择、更新、删除演示*///import java.sql.*;import java.sql.Connection;import java.sql.Statement;import java.sql.ResultSet;import java.sql.DriverManager;import java.util.*;public class DbConnect{/////////////////////////////////////////———–>>>数据成员and 构造函数private Connection dbconn;private Statement dbstate;private ResultSet dbresult;DbConnect(){dbconn = null;dbstate = null;dbresult = null;}/////////////////////////////////////////———–>>>类方法public void print(String str)//简化输出{System.out.println(str);}//end print(…)/*** 连接MySql数据库* @param host* @param port* @param dbaName* @param usName* @param psw* @return bool值,连接成功返回真,失败返回假*/public boolean dbConnection(String host, String port, String dbaName, String usName, String psw){String driverName = "com.mysql.jdbc.Driver";//"org.gjt.mm.mysql.Driver"两个驱动都可以用String dbHost = host;//数据库的一些信息String dbPort = port;String dbName = dbaName;String enCoding = "?useUnicode=true&characterEncoding=gb2312"; //解决MySql中文问题,要连续写不能空格String userName = usName;String Psw = psw;String url = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName + enCoding;try{Class.forName(driverName).newInstance();dbconn = DriverManager.getConnection(url, userName, Psw);//getConnection(url, userName, Psw)从给的driver中选择合适的去连接数据库//return a connection to the URL}catch(Exception e){print("url = " + url); //发生错误时,将连接数据库信息打印出来print("userName = " + userName);print("Psw" + Psw);print("Exception: " + e.getMessage());//得到出错信息}if (dbconn != null)//dbconn != null 表示连接数据库成功,由异常保证!?return true;elsereturn false;}// end boolean dbConnection(…)/*** 对数据库表进行选择操作!* @param tableName 数据库表名* @param fieles 字段名* @param selCondition 选择条件* @return 一个含有map的List(列表)*/public ArrayList dbSelect(String tableName, ArrayList fields, String selCondition){ArrayList mapInList = new ArrayList();String selFields = "";for (int i = 0; i<fields.size(); ++i)selFields += fields.get(i) + ", ";String selFieldsTem = selFields.substring(0, selFields.length() – 2);//根据String的索引提取子串try{dbstate = dbconn.createStatement();String sql = "select " + selFieldsTem + " from " + tableName + selCondition;print("sql = " + sql);try{dbresult = dbstate.executeQuery(sql);}catch(Exception err){print("Sql = " + sql);print("Exception: " + err.getMessage());}while(dbresult.next()){Map selResult = new HashMap();selResult.put("message_type", dbresult.getString("message_type"));selResult.put("message_content",dbresult.getString("message_content"));mapInList.add(selResult);}}catch(Exception e){print("Exception: " + e.getMessage());}return mapInList;}//end String dbSelect(…)/*** 对数据库表中的记录进行删除操作* @param tableName* @param condition* @return bool值,表示删除成功或者失败。

如何用Java编写一个简单的数据库应用程序

如何用Java编写一个简单的数据库应用程序

如何用Java编写一个简单的数据库应用程序Java是一个非常强大的编程语言,它提供了多种处理数据库的方案。

下面我们将介绍如何用Java编写一个简单的数据库应用程序。

1.安装Java开发环境(JDK):首先,你需要安装Java开发环境(Java Development Kit,JDK)。

你可以从Oracle官方网站上下载最新版本的JDK,并按照它们提供的说明进行安装。

2.设置环境变量:一旦JDK安装完毕,你需要设置相应的环境变量。

在Windows系统中,你可以在“系统属性”中找到“高级”选项卡,点击“环境变量”,并添加JAVA_HOME变量指向JDK的安装路径。

3.下载并安装数据库:Java支持多种数据库,例如MySQL、Oracle和PostgreSQL。

你可以选择其中一个作为你的数据库。

在这个教程中,我们将使用MySQL作为示范。

从MySQL官方网站下载并安装最新版本的MySQL。

4.连接数据库:一旦数据库安装完毕,你需要编写Java代码来连接数据库。

首先,你需要下载MySQL JDBC驱动程序。

你可以从MySQL官方网站上找到最新版本的驱动程序,并将其添加到你的项目中。

接下来,你需要使用编程语言的`import`语句将这个驱动程序导入到你的Java代码中。

5.建立数据库连接:在你的Java代码中,你需要使用JDBC驱动程序提供的API来建立数据库连接。

这包括创建一个Connection对象,并传入数据库的URL、用户名和密码。

```javaimport java.sql.*;public class Main {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydatabase";String user = "root";String password = "mypassword";try {Connection conn = DriverManager.getConnection(url, user, password);System.out.println("Connected to the database");} catch (SQLException e) {System.out.println("An error occurred");e.printStackTrace();}}}```在上面的代码中,`url`变量指定了数据库的URL,`user`和`password`变量指定了连接数据库所需的用户名和密码。

mysql数据库建表代码

mysql数据库建表代码

mysql数据库建表代码MySQL是一种开源的关系型数据库管理系统,它是最流行的数据库之一。

在MySQL中,建表是非常重要的一步,因为它决定了数据的存储方式和结构。

在本文中,我们将介绍如何使用MySQL建表。

我们需要创建一个数据库。

在MySQL中,可以使用以下命令创建一个名为“mydatabase”的数据库:CREATE DATABASE mydatabase;接下来,我们需要在该数据库中创建一个表。

表是由列和行组成的,每个列都有一个数据类型和一个名称。

在MySQL中,可以使用以下命令创建一个名为“mytable”的表:CREATE TABLE mytable (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT NOT NULL,PRIMARY KEY (id));在上面的代码中,我们创建了一个包含三个列的表。

第一列是“id”,它是一个自增的整数,不允许为空。

第二列是“name”,它是一个最大长度为50的字符串,不允许为空。

第三列是“age”,它是一个整数,不允许为空。

最后,我们将“id”列设置为主键。

除了上面的基本数据类型外,MySQL还支持其他数据类型,如日期、时间、布尔值等。

在创建表时,可以根据需要选择适当的数据类型。

在创建表后,我们可以使用INSERT语句向表中添加数据。

例如,以下代码将向“mytable”表中添加一条记录:INSERT INTO mytable (name, age) VALUES ('John', 25);在上面的代码中,我们向“mytable”表中添加了一个名为“John”的人,他的年龄为25岁。

由于“id”列是自增的,因此不需要在INSERT语句中指定它的值。

我们可以使用SELECT语句从表中检索数据。

例如,以下代码将检索“mytable”表中所有人的姓名和年龄:SELECT name, age FROM mytable;在上面的代码中,我们使用SELECT语句选择了“name”和“age”列,并从“mytable”表中检索了所有记录。

MYSQL存储过程注释详解

MYSQL存储过程注释详解

MYSQL存储过程注释详解⽬录1.使⽤说明2.准备3.语法3.1 变量及赋值3.2 ⼊参出参3.3 流程控制-判断3.4 流程控制-循环3.5 流程控制-退出、继续循环3.6 游标3.7 存储过程中的handler4.练习4.1 利⽤存储过程更新数据4.3 其他场景:5.其他5.1 characteristic5.2 死循环处理5.3 可以在select语句中写case5.4 临时表0.环境说明:软件版本mysql8.0navicat1.使⽤说明存储过程时数据库的⼀个重要的对象,可以封装SQL语句集,可以⽤来完成⼀些较复杂的业务逻辑,并且可以⼊参出参(类似于java中的⽅法的书写)。

创建时会预先编译后保存,⽤户后续的调⽤都不需要再次编译。

// 把editUser类⽐成⼀个存储过程public void editUser(User user,String username){String a = "nihao";user.setUsername(username);}main(){User user = new User();editUser(user,"张三");user.getUseranme(); //java基础}⼤家可能会思考,⽤sql处理业务逻辑还要重新学,我⽤java来处理逻辑(⽐如循环判断、循环查询等)不⾏吗?那么,为什么还要⽤存储过程处理业务逻辑呢?优点:在⽣产环境下,可以通过直接修改存储过程的⽅式修改业务逻辑(或bug),⽽不⽤重启服务器。

执⾏速度快,存储过程经过编译之后会⽐单独⼀条⼀条执⾏要快。

减少⽹络传输流量。

⽅便优化。

缺点:过程化编程,复杂业务处理的维护成本⾼。

调试不便不同数据库之间可移植性差。

-- 不同数据库语法不⼀致!2.准备数据库参阅资料中的sql脚本:delimiter $$ --声明结束符3.语法官⽅参考⽹址:#### 3.0 语法结构```sql-- 存储过程结构CREATE[DEFINER = user]PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_body-- 1. proc_parameter参数部分,可以如下书写:[ IN | OUT | INOUT ] param_name type-- type类型可以是MySQL⽀持的所有类型-- 2. routine_body(程序体)部分,可以书写合法的SQL语句 BEGIN ... END简单演⽰:-- 声明结束符。

java生成达梦数据库建表语句

java生成达梦数据库建表语句

一、介绍在现代软件开发中,数据库是必不可少的一部分,而创建数据库表是数据库设计的重要环节之一。

在使用Java语言开发软件的过程中,我们常常会使用到达梦数据库作为后台数据库。

本文将从Java语言生成达梦数据库建表语句展开讨论。

二、Java生成达梦数据库建表语句的方式1. 使用JDBCJava Database Connectivity(JDBC)是Java语言中用于与数据库进行交互的API。

通过JDBC,我们可以使用Java代码连接并操作数据库。

在使用JDBC生成达梦数据库建表语句时,我们可以通过以下步骤实现:1)导入数据库驱动2)建立数据库连接3)创建Statement对象4)执行SQL语句5)关闭数据库连接通过以上步骤,我们可以在Java中调用达梦数据库的API,生成数据库建表语句。

2. 使用ORM框架ORM(Object-Relational Mapping)是一种编程技术,它允许我们在Java中以面向对象的方式操作数据库。

在使用ORM框架生成达梦数据库建表语句时,我们可以通过以下步骤实现:1)选择合适的ORM框架,如Hibernate、MyBatis等2)创建实体类(Entity)3)配置映射关系4)进行数据库操作通过ORM框架,我们可以将Java中的实体类映射到达梦数据库中的表,从而生成数据库建表语句。

三、Java生成达梦数据库建表语句的示例代码以下是使用JDBC和ORM框架分别生成达梦数据库建表语句的示例代码:1. 使用JDBC```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class CreateDmTableWithJDBC {public static void main(String[] args) {String url = "jdbc:damm://localhost:5236/demo";String user = "username";String password = "password";String sql = "CREATE TABLE employee " +"(id INTEGER not NULL, " +" name VARCHAR(255), " +" age INTEGER, " +" PRIMARY KEY ( id ))";try (Connection conn = DriverManager.getConnection(url, user, password);Statement stmt = conn.createStatement()) {stmt.execute(sql);System.out.println("Table created successfully");} catch (SQLException e) {System.out.println(e.getMessage());}}}```2. 使用ORM框架(以Hibernate为例)```javaimport org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import.example.Employee;public class CreateDmTableWithHibernate {public static void main(String[] args) {Configuration config = newConfiguration().configure().addAnnotatedClass(Employee.class); SessionFactory sessionFactory =config.buildSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();session.getTransaction()mit();session.close();sessionFactory.close();}}```四、总结通过本文我们可以了解到,在Java语言中生成达梦数据库建表语句有多种方式,包括使用JDBC和ORM框架。

使用MySQL的存储过程实现定时任务和计划

使用MySQL的存储过程实现定时任务和计划

使用MySQL的存储过程实现定时任务和计划引言在软件开发中,定时任务和计划是非常常见的需求。

通过定时任务和计划,我们可以定期执行一些重复性的操作,比如数据备份、数据清理等。

MySQL提供了存储过程来实现这些定时任务和计划,本文将介绍如何使用MySQL的存储过程来实现这些功能。

一、什么是存储过程存储过程是一组预编译的SQL语句的集合,可以作为一个单元整体被数据库管理系统调用和执行。

存储过程可以实现复杂的业务逻辑,并且可以被多个应用程序共享和调用。

二、创建存储过程使用MySQL创建存储过程非常简单,下面以创建一个定时任务为例进行介绍。

首先,我们需要在MySQL中创建一个存储过程,比如我们创建一个名为"task_schedule"的存储过程。

在创建存储过程之前,我们首先需要确保MySQL支持存储过程的功能,可以通过执行以下SQL语句进行检查:```SHOW VARIABLES LIKE 'have_procedure';```如果输出结果中的值是"YES",表示MySQL支持存储过程。

接下来,我们可以使用"CREATE PROCEDURE"语句来创建存储过程。

下面是创建一个名为"task_schedule"的存储过程的示例代码:DELIMITER $$CREATE PROCEDURE task_schedule()BEGIN-- 在此处编写任务执行的逻辑END$$DELIMITER ;```在这个示例代码中,我们使用"DELIMITER"语句来改变分隔符,将其设置为"$$",这是因为存储过程的定义中可能包含多个SQL语句,而分号(";")是SQL语句的默认分隔符,为了避免分号与存储过程代码中的其他分号冲突,我们需要将分隔符改为其他值。

然后,我们使用"CREATE PROCEDURE"语句来创建存储过程,并在BEGIN和END之间编写任务执行的逻辑。

使用存储过程建表

使用存储过程建表

使用存储过程建表
存储过程是一种能够对数据库进行操作的程序,它可以将多个SQL语句组合在一起,从而提高数据库的执行效率。

在数据库设计中,使用存储过程建表可以帮助开发人员更快速、更稳定地完成数据库的构建。

以下是使用存储过程建表的一些具体步骤:
1. 创建存储过程
在SQL Server中,使用CREATE PROCEDURE语句可以创建一个存储过程。

例如,可以创建一个名为sp_create_table的存储过程来辅助我们建立新的表格。

2. 编写存储过程的代码
在创建存储过程后,需要编写相应的代码,来实现创建新表的功能。

代码中需要定义表格的字段名、数据类型、长度、默认值、约束条件等信息。

3. 执行存储过程
在存储过程的代码编写完成后,可以使用EXECUTE语句来运行存储过程。

例如EXEC sp_create_table可以执行名为sp_create_table 的存储过程来创建新的表格。

4. 修改存储过程
当数据库需求发生改变时,需要对存储过程进行修改。

通过ALTER PROCEDURE语句可以修改存储过程的代码,从而达到更新数据表信息的目的。

需要注意的是,存储过程的使用需要按照数据库设计的规范进行操作。

例如,在定义数据类型时,需要尽可能避免使用过大的长度,避免浪费数据库资源。

此外,在创建表格时,需要考虑各个字段之间的关联关系,以及约束条件的设置,以确保数据的完整性和一致性。

总之,使用存储过程实现建表可以让数据库的操作更加高效、稳
定,也更容易管理。

当初期数据库设计结构复杂时,可以考虑使用存储过程来进行建表操作,提高开发效率,减轻维护和升级的难度。

java写mysql枚举

java写mysql枚举

在Java中,可以使用MySQL的枚举类型来定义数据库中的枚举值。

下面是一个简单的示例,演示如何使用Java和MySQL来定义一个枚举类型并将其存储在数据库中。

首先,我们需要创建一个Java枚举类型,如下所示:```javapublic enum Color {RED,GREEN,BLUE}```接下来,我们需要创建一个Java类,该类将使用JDBC连接到MySQL数据库并执行插入操作。

在此示例中,我们将使用MySQL的PreparedStatement对象来执行插入操作。

```javaimport java.sql.*;public class EnumExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydatabase";String user = "root";String password = "mypassword";String query = "INSERT INTO colors (color_name) VALUES (?)";try (Connection conn = DriverManager.getConnection(url, user, password);PreparedStatement stmt = conn.prepareStatement(query)) {stmt.setString(1, ());stmt.executeUpdate();System.out.println("Color " + () + " has been inserted into the database.");} catch (SQLException e) {e.printStackTrace();}}}```在此示例中,我们首先定义了一个数据库URL、用户名和密码。

java根据实体类生成数据库表的方法

java根据实体类生成数据库表的方法

java根据实体类生成数据库表的方法根据实体类生成数据库表通常涉及到以下几个步骤:1. 定义实体类:首先,你需要定义一个或多个实体类,这些类通常对应于数据库中的表。

2. 使用ORM工具:你可以使用对象关系映射(ORM)工具,如Hibernate或MyBatis,来根据实体类生成数据库表。

这些工具可以根据实体类的属性和注解自动生成相应的数据库表结构。

3. 配置数据库连接:在开始之前,你需要配置数据库连接信息,包括数据库类型、URL、用户名和密码等。

4. 执行生成表的操作:你可以通过编写代码或运行相应的ORM工具命令来执行生成表的操作。

通常,ORM工具会提供一个命令或方法来根据实体类生成数据库表。

下面是一个简单的示例,演示如何使用Hibernate根据实体类生成数据库表:1. 定义实体类import ;import ;Entitypublic class User {Idprivate Long id;private String name;private String email;// getters and setters}```2. 配置数据库连接你需要配置``文件来指定数据库连接信息。

3. 执行生成表的操作使用以下命令或方法执行生成表的操作:import ;import ;public class GenerateTable {public static void main(String[] args) {Configuration configuration = new Configuration();(""); // 加载配置文件SchemaExport schemaExport = newSchemaExport(configuration);(";"); // 设置分隔符(""); // 输出文件名(true); // 设置输出格式化(true, false, false, false); // 执行生成表的操作}}```这将会根据实体类生成一个名为``的文件,其中包含了创建数据库表的SQL 语句。

如何在Java程序中调用存储过程

如何在Java程序中调用存储过程

如何在Java程序中调用存储过程(一)?(1)使用scott/tiger用户在Oracle中创建2个表并插入几条数据。

Create table carl_test(A varchar2(200));create table carl_test1(B varchar2(200));--insert some data into carl_test1 tableinsert into carl_test1 values('carl1');insert into carl_test1 values('carl2');insert into carl_test1 values('carl3');commit;(2)使用scott/tiger用户在Oracle中创建一个测试存储过程,该存储过程有三个参数,第一个参数为输入参数,最后两个参数为输出参数。

为简单起见,没有在该存储过程中加入异常捕获机制。

CREATE OR REPLACE PROCEDURE carl_sp_test( v_monthly IN varchar2,last_inserted_rows_num OUT number,all_effected_rows_num OUT number)ISBEGIN/*删除carl_test表中所有记录*/delete carl_test;/*将删除行数赋值给总影响行数*/all_effected_rows_num := SQL%Rowcount;commit;/*将用户输入参数插入carl_test表中*/insert into carl_test(a) values(v_monthly);all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount;/*将表carl_test1中的所有记录插入到carl_test1中*/insert into carl_testselect* from carl_test1;/*获得影响记录数*/last_inserted_rows_num:=SQL%Rowcount;all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount;commit;END carl_sp_test;(3)使用scott/tiger用户在SQL/Plus中测试上述存储过程SQL> variable all_effected_rows_num number;SQL> variable last_inserted_rows_num number;SQL> exec carl_sp_test('first var',:last_inserted_rows_num,:all_effected_rows_num);PL/SQL procedure successfully completedlast_inserted_rows_num---------3all_effected_rows_num---------4SQL> print last_inserted_rows_num;last_inserted_rows_num---------3SQL> print all_effected_rows_num;all_effected_rows_num---------4SQL>上述结果表示测试成功(4)使用下面的Java类TestStoreProcedure.java测试存储过程。

JAVA通过MyBatis调用MySql存储过程和函数

JAVA通过MyBatis调用MySql存储过程和函数

JAV A通过MyBatis调用MySql存储过程和函数1.引言无论是采用SPRING MVC框架开发WEB画面,还是开发需按一定时间间隔执行的批处理,都可能要调用数据库的存储过程或函数。

其间调用参数设置不正会浪费大量调试时间初学者甚至放弃使用存储过程。

本文记录了通过MyBatis调用MySql存储过程和函数的具体参数设置内容,供参考。

2.MySql存储过程例/*全公司员工下一年度带薪休假一发赋予处理*/CREATE DEFINER=`DBuser`@`%` PROCEDURE `paid_vacation_compute `( OUT p_返回值 INT(11) ,INOUT p_员工号 CHAR(3) ,p_操作者ID VARCHAR(3))PROC_START:BEGIN/* 变量声明 */DECLARE done INT; #异常退出控制变量DECLARE empNo CHAR(3); #员工号DECLARE dateHire date; #分公司就职日DECLARE workYears INT; #集团内工作年数DECLARE lastYearRemainDays FLOAT; #昨年残日数(允许以小时为单位休假)DECLARE nowYearleaveDays FLOAT; #今年休暇日数(允许以小时为单位休假)DECLARE elapseYear INT; #入集团经过年度数/* 游标声明 */#上年带薪休假数据DECLARE staffPaidVacationDaysCur CURSOR FORSELECT a.EMP_NO, #员工号a.DATE_HIRE, #入职日期a.WORK_YEARS, #工作年限b.REMAIN_DAYS # 上年带薪休假应休但未休残日数FROM T_EMPLOYEE AS a,T_PAID_VACATION AS bWHERE a. EMP_NO = b. EMP_NO/* 程序退出规定声明 */DECLARE CONTINUE HANDLER FOR NOT FOUND SET SET done = 1;DECLARE EXIT HANDLER FOR SQLWARNING SET done = 2;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINSET done = 3;ROLLBACK; #SQL异常回滚END;/* 1.输入参数妥当性检查 */IF (p_操作者 IS NULL OR p_操作者 = '') THENSET p_返回值 = 9;LEAVE PROC_START;END IF;SET done = 0;START TRANSACTION;loop_label:LOOP# 读入一条记录, 代入到各个变量中FETCH staffPaidVacationDaysCurINTO empNo, #员工号dateHire, #就职日workYears, #集团内工作年数lastYearRemainDays #昨年残日数;IF done = 1 THENLEAVE loop_label;END IF;/*根据集团内工作年限+分公司就职年限计算下一年度带薪天数*/ SET elapseYear = YEAR(current_timestamp)- Year(dateHire)+ workYears;IF elapseYear = 0 THENSET nowYearLeaveDays = 10;ELSEIF elapseYear = 1 THENSET nowYearLeaveDays = 11;ELSEIF elapseYear = 2 THENSET nowYearLeaveDays = 12;ELSEIF elapseYear = 3 THENSET nowYearLeaveDays = 14;ELSEIF elapseYear = 4 THENSET nowYearLeaveDays = 16;ELSEIF elapseYear = 5 THENSET nowYearLeaveDays = 18;ELSEIF elapseYear >= 6 THENSET nowYearLeaveDays = 20;END IF;SET done = 0;SET p_员工号= empNo;UPDATE T_PAID_VACATIONSETLAST_YEAR_REMAIN_DAYS = lastYearRemainDays,THIS_YEAR_BASE_DAYS = nowYearLeaveDays,UPDATE_DATETIME = current_timestamp,UPDATE_USER_ID = 'SYS',UPDATE_TERMINAL_ID = 'MANUAL'WHERE EMP_NO = CONVERT(empNo USING binary);IF done = 3 THENSET p_返回值 = 6;LEAVE PROC_START;END IF;END LOOP;COMMIT;END3.MySql函数例CREATE DEFINER=`DBuser`@`%` FUNCTION ` paid_vacation_compute `( p_员工号 CHAR(3) ,p_操作者ID VARCHAR(3))) RETURNS int(11)BEGIN/* 变量声明 */DECLARE done INT; #异常退出控制变量DECLARE empNo CHAR(3); #员工号DECLARE dateHire date; #分公司就职日DECLARE workYears INT; #集团内工作年数DECLARE lastYearRemainDays FLOAT; #昨年残日数(允许以小时为单位休假)DECLARE nowYearleaveDays FLOAT; #今年休暇日数(允许以小时为单位休假)DECLARE elapseYear INT; #入集团经过年度数/* 游标声明 */#上年带薪休假数据DECLARE staffPaidVacationDaysCur CURSOR FORSELECT a.EMP_NO, #员工号a.DATE_HIRE, #入职日期a.WORK_YEARS, #工作年限b.REMAIN_DAYS # 上年带薪休假应休但未休残日数FROM T_EMPLOYEE AS a,T_PAID_VACATION AS bWHERE a. EMP_NO = b. EMP_NO/* 程序退出规定声明 */DECLARE CONTINUE HANDLER FOR NOT FOUND SET SET done = 1;DECLARE EXIT HANDLER FOR SQLWARNING SET done = 2;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINSET done = 3;ROLLBACK; #SQL异常回滚END;/* 1.输入参数妥当性检查 */IF (p_操作者 IS NULL OR p_操作者 = '') THENRETURN 9;END IF;SET done = 0;START TRANSACTION;loop_label:LOOP# 读入一条记录, 代入到各个变量中FETCH staffPaidVacationDaysCurINTO empNo, #员工号dateHire, #就职日workYears, #集团内工作年数lastYearRemainDays #昨年残日数;IF done = 1 THENLEAVE loop_label;END IF;/*根据集团内工作年限+分公司就职年限计算下一年度带薪天数*/ SET elapseYear = YEAR(current_timestamp)- Year(dateHire)+ workYears;IF elapseYear = 0 THENSET nowYearLeaveDays = 10;ELSEIF elapseYear = 1 THENSET nowYearLeaveDays = 11;ELSEIF elapseYear = 2 THENSET nowYearLeaveDays = 12;ELSEIF elapseYear = 3 THENSET nowYearLeaveDays = 14;ELSEIF elapseYear = 4 THENSET nowYearLeaveDays = 16;ELSEIF elapseYear = 5 THENSET nowYearLeaveDays = 18;ELSEIF elapseYear >= 6 THENSET nowYearLeaveDays = 20;END IF;SET done = 0;SET p_员工号= empNo;UPDATE T_PAID_VACATIONSETLAST_YEAR_REMAIN_DAYS = lastYearRemainDays,THIS_YEAR_BASE_DAYS = nowYearLeaveDays,UPDATE_DATETIME = current_timestamp,UPDATE_USER_ID = 'SYS',UPDATE_TERMINAL_ID = 'MANUAL'WHERE EMP_NO = CONVERT(empNo USING binary);IF done = 3 THENRETURN 6;END IF;END LOOP;COMMIT;END4.MySql存储过程调用时的iBatis用Mapper例BaseInfoEditMapper.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-////DTD Mapper 3.0//EN""/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.xxx.web.mapper.base_info_edit"><select id="VacationProcedure"parameterType="VacationBean"statementType="CALLABLE"> { call paid_vacation_compute (#{ReturnValue,javaType=INTEGER, jdbcType=INTEGER, mode=OUT},#{StaffNumber,javaType=String, jdbcType=CHAR, mode=INOUT},#{HireDate,javaType=String, jdbcType=VARCHAR, mode=IN},#{OperateID,javaType=String, jdbcType=VARCHAR, mode=IN})}</select></mapper>5.MySql函数调用时的iBatis用Mapper例BaseInfoEditMapper.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-////DTD Mapper 3.0//EN""/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.xxx.web.mapper.base_info_edit"><select id="VacationProcedure"parameterType="VacationBean"statementType="CALLABLE"> { #{ReturnValue,javaType=INTEGER, jdbcType=INTEGER, mode=OUT} =call paid_vacation_compute (#{StaffNumber,javaType=String, jdbcType=CHAR, mode=IN},#{HireDate,javaType=String, jdbcType=VARCHAR, mode=IN},#{OperateID,javaType=String, jdbcType=VARCHAR, mode=IN} )} </select></mapper>6.JAVA调用例1(MySql存储过程和函数相同)package com.XXX.impl;import java.util.ArrayList;import java.util.List;import com.XXX.web.bean.VacationCreateBean;import com.XXX.web.dao.BaseInfoEditDAO;import com.XXX.web.util.BasicSqlSupport;public class BaseInfoEditDAOImpl extends BasicSqlSupport implements BaseInfoEditDAO { public boolean addBaseInfo(BaseInfoEditBean objUserInfo) throws Exception {boolean blnFlag=false;//成功FLAG;//全公司员工下一年度带薪休假一发赋予处理VacationCreateBean objVacationCreateBean = new VacationCreateBean();objVacationCreateBean.setStaffNumber(objUserInfo.getSTAFF_NUMBER());objVacationCreateBean.setHireDate(objUserInfo.getDATE_HIRE().toString());objVacationCreateBean.setOperateID(objUserInfo.getCREATE_USER_ID());objVacationCreateBean.setDhcWorkYearsShinKi(objUserInfo.getDHC_WORK_YEARS());String returnValue = (String)this.session.selectOne("com.XXX.web.mapper.base_info_edit.VacationProcedure", objVacationCreateBean);//System.out.println("staffNumber=" + objVacationCreateBean.getStaffNumber());//System.out.println("result=" + objVacationCreateBean.getReturnValue());//System.out.println("returnValue=" + returnValue);//追加結果の判断blnFlag=true;return blnFlag;}}7.処理DAO接口package com.XXX.web.dao;import java.util.List;import com.XXX.web.bean.BaseInfoEditBean;/*** 员工基本信息画面の処理DAO*/public interface BaseInfoEditDAO {public List<BaseInfoEditBean> selectAuthoriyList() throws Exception;public String selectStaffId() throws Exception;public int selectOpetateTimeNum(String strStaffNumber) throws Exception;public boolean addBaseInfo(BaseInfoEditBean objUserInfo) throws Exception;public boolean updateBaseInfo(BaseInfoEditBean objUserInfo) throws Exception;public BaseInfoEditBean searchBaseInfo(String strStaffNumber) throws Exception; }8.共同処理package com.XXX.web.util;import org.apache.ibatis.session.SqlSession;public class BasicSqlSupport{protected SqlSession session;public SqlSession getSession() {return session;}public void setSession(SqlSession session) {this.session = session;} }9. DAO与MAP间的交互BEANpackage com.XXX.web.bean;import java.io.Serializable;public class VacationCreateBean implements Serializable{private int ReturnValue;private String StaffNumber;private String HireDate;private String OperateID;private int WorkYearsShinKi;public int getReturnValue() {return ReturnValue;}public void setReturnValue(int returnValue) {ReturnValue = returnValue;}public String getStaffNumber() {return StaffNumber;}public void setStaffNumber(String staffNumber) {StaffNumber = staffNumber;}public String getHireDate() {return HireDate;}public void setHireDate(String hireDate) {HireDate = hireDate;}public String getOperateID() {return OperateID;}public void setOperateID(String operateID) {OperateID = operateID;}public int getDhcWorkYearsShinKi() {return dhcWorkYearsShinKi;}public void setDhcWorkYearsShinKi(int dhcWorkYearsShinKi) {this.dhcWorkYearsShinKi = dhcWorkYearsShinKi;}}10.通过MAIN函数进行调用package com.ohc.pms.batch;import java.io.FileInputStream;import java.io.IOException;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class VacationCreate {/**JDBC驱动名 */static String jdbcDriver = "com.mysql.jdbc.Driver";/**DB URL */static String dbURL = "jdbc:mysql://172.999.999.35:3306/empdb";/** DB用户名 */static String user = "empuser";/**DB密码 */static String pass = "empuser123";/**日志输出 */static protected Logger log = Logger.getLogger(VacationCreate.class );public static void main(String[] args) {Connection conn = null;CallableStatement stmt = null;try{PropertyConfigurator.configure(System.getProperty("user.dir") + "\\" + "log4j.properties");("実行路径:" + System.getProperty("user.dir"));String fileName = "jdbc.properties"; // 属性文件名Properties conf = new Properties();try {conf.load(new FileInputStream(System.getProperty("user.dir") + "\\" + "jdbc.properties"));} catch (IOException e) {System.err.println("Cannot open " + fileName + ".");e.printStackTrace();System.exit(-1); // 程序終了}// 读入jdbcDriver = conf.getProperty("driver");dbURL = conf.getProperty("url");user = conf.getProperty("user");pass = conf.getProperty("password");//JDBC driver登録Class.forName("com.mysql.jdbc.Driver");("DB连接。

(完整版)MySQL数据库_教学大纲

(完整版)MySQL数据库_教学大纲

《MySQL数据库》课程教学大纲学时:64学时(其中:讲课学时:24 上机学时:40)先修课程:计算机基础、java基础入门后续课程:Java面向对象编程、JavaWeb程序开发入门适用专业:信息及其计算机相关专业开课部门:计算机科学技术学院一、课程的性质与目标《MySQL数据库》是面向计算机相关专业的一门专业基础课,涉及数据库基础知识、MySQL数据库的安装和配置、数据库和表的操作、事务管理、存储过程管理、视图管理、数据库的高级操作等内容,通过本课程的学习,学生能够了解数据库的基础知识,掌握MySQL的开发和管理技术。

二、课程的主要内容及基本要求第一章数据库入门(4学时)[知识点]➢数据库存储结构➢SQL语言➢MySQL安装与配置➢MySQL目录结构➢MySQL的使用[重点]➢MySQL安装与配置➢MySQL的使用[难点]➢数据库存储结构[基本要求]➢了解数据库的存储结构和SQL语言➢掌握MySQL的安装、配置和使用[实践与练习]动手安装和配置MySQL数据库,熟悉MySQL的使用。

第二章数据库和表的基本操作(7学时)[知识点]➢数据库的基本操作➢数据类型➢数据表的基本操作➢表的约束➢设置表的字段值自增➢索引的创建和删除[重点]➢数据库的基本操作➢数据类型➢数据表的基本操作➢表的约束➢索引[难点]➢表的约束➢索引[基本要求]➢掌握数据库的基本操作➢掌握数据类型➢掌握数据表的基本操作➢掌握表的约束➢掌握索引的创建和删除[实践与练习]建议考核课后习题,并安排上机,重点考核对数据库和数据表的操作以及索引的创建和删除。

第三章添加、更新与删除数据(6学时)[知识点]➢添加数据➢更新数据➢删除数据[重点]➢添加数据➢更新数据➢删除数据[难点]➢添加数据➢更新数据➢删除数据[基本要求]➢掌握向表中添加、更新和删除数据[实践与练习]建议上机动手添加、更新和删除数据,掌握MySQL提供的数据库操作语言,包括插入数据的INSERT语句,更新数据的UPDATE语句以及删除数据的DELETE 语句。

java中mysql临时表的写法

java中mysql临时表的写法

java中mysql临时表的写法在Java 中使用MySQL 临时表,你可以通过JDBC(Java Database Connectivity)连接到MySQL 数据库,然后使用SQL 语句执行创建临时表的操作。

以下是一个简单的示例:```javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class CreateTemporaryTableExample {public static void main(String[] args) {// JDBC连接参数String url = "jdbc:mysql://localhost:3306/your_database";String user = "your_username";String password = "your_password";try (Connection connection = DriverManager.getConnection(url, user, password)) { // 创建Statement 对象Statement statement = connection.createStatement();// 创建临时表的SQL 语句String createTemporaryTableSQL = "CREATE TEMPORARY TABLE temp_table_name ("+ "id INT PRIMARY KEY,"+ "name VARCHAR(255)"+ ")";// 执行SQL 语句statement.executeUpdate(createTemporaryTableSQL);System.out.println("Temporary table created successfully!");} catch (SQLException e) {e.printStackTrace();}}}```请确保替换示例中的以下信息:-`jdbc:mysql://localhost:3306/your_database`:将`your_database` 替换为你的MySQL 数据库名称。

mysql 创建存储过程语法

mysql 创建存储过程语法

mysql 创建存储过程语法MySQL是一个广泛使用的关系型数据库管理系统,它提供了存储过程功能,允许用户以程序的方式在数据库中定义和执行一段预先定义好的SQL语句集合,从而实现复杂的业务逻辑。

下面就来介绍一下MySQL创建存储过程的语法。

1. 创建存储过程的基本语法CREATE PROCEDURE procedure_name ([ IN | OUT | INOUT ] parameter_name data_type [, ... ])BEGINsql_statement;...END;其中,CREATE PROCEDURE是创建存储过程的关键字,procedure_name 是存储过程的名称,parameter_name是存储过程的参数名,data_type 是参数的数据类型(支持常用的数据类型,如CHAR、INT、VARCHAR 等),sql_statement是实际执行的SQL语句。

2. 存储过程的参数类型MySQL支持三种参数类型:IN、OUT和INOUT。

IN表示输入参数,接收存储过程调用者的参数值。

OUT表示输出参数,将存储过程的执行结果作为参数返回给调用者。

在存储过程中,必须显式地设置输出参数的初始值。

INOUT表示既是输入参数也是输出参数,即将存储过程的执行结果作为参数返回给调用者,同时还允许存储过程修改输入参数的值。

3. 存储过程的变量除了参数,存储过程还可以定义一些局部变量,在存储过程中用来存储临时数据或者控制语句执行流程。

DECLARE variable_name datatype [DEFAULT value];其中,DECLARE是定义局部变量的关键字,variable_name是变量名称,datatype是变量的数据类型,可以是数字、字符串等,DEFAULT用来为变量指定默认值,value为变量的默认值,可以省略。

4. 存储过程的流程控制在存储过程中,可以使用IF、WHILE、LOOP等控制语句来控制程序的执行流程。

java存储过程写法

java存储过程写法

java存储过程写法在Java中,可以通过JDBC(Java Database Connectivity)来调用和执行存储过程。

下面我将从多个角度来介绍Java中存储过程的写法。

1. 使用CallableStatement:在Java中,可以使用CallableStatement来调用存储过程。

首先,你需要获取数据库连接,然后创建一个CallableStatement对象,并设置存储过程的参数,最后执行存储过程。

例如:java.Connection conn = DriverManager.getConnection(url, username, password);CallableStatement cs = conn.prepareCall("{callyour_stored_procedure(?, ?)}");cs.setInt(1, parameter1);cs.setString(2, parameter2);cs.execute();2. 使用存储过程注解:一些持久层框架(如MyBatis)提供了注解的方式来调用存储过程。

你可以在Java方法上使用注解来指定要调用的存储过程的名称和参数。

例如(使用MyBatis的@Select注解):java.@Select("{call your_stored_procedure(#{parameter1, mode=IN, jdbcType=INTEGER}, #{parameter2, mode=IN, jdbcType=VARCHAR})}")。

void callStoredProcedure(int parameter1, Stringparameter2);3. 使用存储过程的ORM映射:一些ORM框架(如Hibernate)允许你将存储过程映射为Java方法,然后直接调用这些方法来执行存储过程。

mysql创建存储过程案例

mysql创建存储过程案例

mysql创建存储过程案例MySQL创建存储过程是数据库管理中一个非常重要的技能,可以极大地简化我们对数据的操作。

下面,我将通过一个案例来详细说明如何使用MySQL创建存储过程。

案例:假设我们有一个用户数据表users,包含以下字段:id, username, password, email, create_time。

现在我们需要创建一个存储过程,根据用户名和密码查询用户信息,如果找到对应的用户,则返回用户信息,否则返回NULL。

步骤:第一步,打开MySQL客户端,连接到数据库。

第二步,创建一个存储过程,语法格式如下:CREATE PROCEDURE procedure_name (IN param1 datatype1, IN param2 datatype2, ...)BEGIN-- sql statementsEND;其中,procedure_name是存储过程名称,param1、param2等则是输入参数,datatype1、datatype2则是参数的数据类型。

在我们的案例中,存储过程名称为sp_get_user_info,输入参数为username和password,数据类型均为VARCHAR。

那么我们的创建过程语句如下:CREATE PROCEDURE `sp_get_user_info` (IN `username` VARCHAR(50), IN `password` VARCHAR(50))BEGINSELECT * FROM `users` WHERE `username`=username AND`password`=password;END;第三步,执行存储过程。

执行存储过程可以使用CALL语句,语法格式如下:CALL procedure_name(param1, param2, ...);在我们的案例中,执行语句如下:CALL `sp_get_user_info`('test', '123456');该语句会根据用户名test和密码123456去查询用户表users,如果找到对应的用户,则返回用户信息。

mysql存储过程sql语句

mysql存储过程sql语句

mysql存储过程sql语句存储过程是一组预编译的SQL语句,可以在MySQL数据库中进行存储和重复调用。

下面是一个简单的存储过程示例,用于在数据库中创建一个新的表:sql.DELIMITER //。

CREATE PROCEDURE create_new_table()。

BEGIN.CREATE TABLE new_table (。

id INT AUTO_INCREMENT PRIMARY KEY,。

name VARCHAR(50)。

);END //。

DELIMITER ;在这个示例中,我们首先使用`DELIMITER`语句将语句结束符号改为`//`,然后使用`CREATE PROCEDURE`语句定义了一个名为`create_new_table`的存储过程。

在`BEGIN`和`END`之间是存储过程的主体,其中包含了要执行的SQL语句。

在这个例子中,我们使用`CREATE TABLE`语句创建了一个名为`new_table`的新表,该表包含一个自增的id列和一个名为name的列。

最后,我们使用`DELIMITER ;`将语句结束符号改回分号。

除了创建表,存储过程还可以执行各种其他操作,包括插入、更新、删除数据,以及执行复杂的查询和逻辑处理。

存储过程可以接受参数,并根据参数的不同执行不同的逻辑。

存储过程的灵活性和可重用性使其成为管理和执行复杂数据库操作的有力工具。

需要注意的是,存储过程的语法和用法可能会因不同的数据库系统而有所不同,上面的示例是针对MySQL数据库的存储过程语法。

如何在MySQL中创建和使用临时存储过程

如何在MySQL中创建和使用临时存储过程

如何在MySQL中创建和使用临时存储过程MySQL是一种广泛使用的关系型数据库管理系统,可以为用户提供高效、可靠的数据存储和管理。

在MySQL中,存储过程是一种事先编写好的SQL语句集合,可以在需要的时候被调用。

临时存储过程是存储在数据库服务器的内存中,仅在会话期间存在,会话结束后自动清除的存储过程。

本文将介绍如何在MySQL中创建和使用临时存储过程。

一、创建临时存储过程的语法在MySQL中,使用CREATE PROCEDURE语句可以创建存储过程。

其基本语法如下:CREATE PROCEDURE procedure_name ([parameter_list])[characteristic_list] routine_body其中,procedure_name是存储过程的名称,parameter_list是存储过程的输入参数列表,characteristic_list是存储过程的特性列表,routine_body是存储过程内部的SQL语句集合。

二、创建一个简单的临时存储过程下面以一个简单的示例来说明如何创建一个临时存储过程。

假设我们有一个名为Employee的表,其中包含员工的姓名和年龄两列。

我们需要创建一个临时存储过程,用于查询指定年龄以上的员工信息。

首先,我们可以使用以下语句创建一个名为get_employee的临时存储过程:CREATE PROCEDURE get_employee(IN min_age INT)BEGINSELECT * FROM Employee WHERE age >= min_age;END;在上述语句中,我们定义了一个输入参数min_age,然后使用SELECT语句查询满足条件的员工信息。

三、调用临时存储过程在创建临时存储过程后,我们可以使用CALL语句来调用它。

下面是调用get_employee存储过程的示例:CALL get_employee(30);在上述语句中,我们将30作为参数传递给get_employee存储过程,从而查询年龄大于等于30的员工信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MySql 数据库用java程序创建表以及存储过程
1.同一般的数据库操作基本一样。

2.Statement.executeUpdate(String sql); 这个方法可以用来执行DDL语句,以及执行更新操作。

3.需要注意CallableStatement 接口的用法。

用于执行SQL 存储过程的接口。

JDBC API 提供了一个存储过程SQL 转义语法,该语法允许对所有RDBMS 使用标准方式调用存储过程。

此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。

如果使用结果参数,则必须将其注册为OUT 型参数。

其他参数可用于输入、输出或同时用于二者。

参数是根据编号按顺序引用的,第一个参数的编号是1。

{?= call <procedure-name>[<arg1>,<arg2>, ...]}
{call <procedure-name>[<arg1>,<arg2>, ...]}
IN 参数值是使用从PreparedStatement 中继承的set 方法设置的。

在执行存储过程之前,必须注册所有OUT 参数的类型;它们的值是在执行后通过此类提供的get 方法检索的。

4.需要注意存储过程调用的方法。

5.registerOutParameter 的使用方法。

void registerOutParameter(int parameterIndex, int sqlType) throws SQLException
按顺序位置parameterIndex 将OUT 参数注册为JDBC 类型sqlType。

所有OUT 参数都必须在执行存储过程前注册。

由sqlType 指定的OUT 参数的JDBC 类型确定必须用于get 方法来读取该参数值的Java 类型。

如果预期返回给此输出参数的JDBC 类型是取决于此特定数据库的,则sqlType 应该是java.sql.Types.OTHER。

方法getObject(int) 检索该值。

参数:
parameterIndex - 第一个参数是1,第二个参数是2,依此类推。

sqlType - java.sql.Types 定义的JDBC 类型代码。

如果参数是JDBC 类型NUMERIC 或DECIMAL,则应使用接受标度值的那种。

下面是一个具体的程序实例:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package gui.database;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author zhfdai
*/
public class DBManager {
public static void main(String[] args) {
final String DATABASE_NAME = "jdbc:mysql://localhost:3306/test";
final String USER_NAME = "root";
final String PASSWORD = "zhfdai";
Connection connection; //为数据库建立的连接
Statement statement; //将执行的SQL语句
CallableStatement callable; //将执行的SQL存储过程
try {
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection(DATABASE_NAME, USER_NAME, PASSWORD);
statement = connection.createStatement();
/*
创建时,先检查该数据库中该项是否已经存在。

若存在,就删除。

*/
String checkTable = "DROP TABLE IF EXISTS test.teacher;";
statement.executeUpdate(checkTable);
String createTable = "Create table test.teacher(name varchar(20) not null primary key ,age int not null);";
statement.executeUpdate(createTable);
String checkProcedure1 = "DROP PROCEDURE IF EXISTS test.queryall";
statement.executeUpdate(checkProcedure1);
String createProcedure1 = "CREATE PROCEDURE test.queryall() BEGIN SELECT * FROM test.teacher; END";
statement.executeUpdate(createProcedure1);
String checkProcedure2 = "DROP PROCEDURE IF EXISTS test.queryCount";
statement.executeUpdate(checkProcedure2);
String createProcedure2 = "CREATE PROCEDURE test.queryCount(OUT param INT) BEGIN SELECT COUNT(*) INTO param FROM test.teacher; END";
statement.executeUpdate(createProcedure2);
String query = "queryall";
callable = connection.prepareCall("{call " + query + "}");
ResultSet rs = callable.executeQuery();
System.out.println("Column :" + rs.getMetaData().getColumnCount());
System.out.println("Table:" + rs.getMetaData().getTableName(1));
String queryCount = "queryCount(?)";
callable = connection.prepareCall("{ call " + queryCount + " }");
callable.registerOutParameter(1, Types.INTEGER); //设定参数的数据类型。

callable.executeQuery(); //获取参数所得值。

int rowCount = callable.getInt(1);
System.out.println("The number of rows is " + rowCount);
} catch (SQLException ex) {
Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
}。

相关文档
最新文档