MySql_数据库用java程序创建表以及存储过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MySql 数据库用java程序创建表以及存储过程
1.同一般的数据库操作基本一样。
2.Statement.executeUpdate(String sql); 这个方法可以用来执行DDL语句,以及执行更新操作。
3.需要注意CallableStatement 接口的用法。
用于执行SQL 存储过程的接口。JDBC API 提供了一个存储过程SQL 转义语法,该语法允许对所有RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为OUT 型参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是1。
{?= call
{call
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);