当前位置:文档之家› MySql 数据库用java程序创建表以及存储过程

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

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.SEV ERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(DBManager.class.getName()).log(Level.SEV ERE, null, ex);
}
}
}。

相关主题