从其他模式调用存储过程以创建表

时间:2014-01-23 09:46:06

标签: java mysql java-stored-procedures

我正在开发使用java开发的Web应用程序项目。在我的工作项目中, 我有这样的要求,就像我需要在用户注册后动态创建数据库。我已经采用了这种方法。

但是,现在我想调用另一个模式(主数据库)中可用的一个存储过程。存储过程包含表。现在,我想在动态创建的数据库中调用该过程。

我已编写如下代码,有人可以帮我了解此代码中的错误,

Connection c1 = DriverManager.getConnection(URL, USER, PASSWORD);
java.sql.CallableStatement cstmt=null;
System.out.println("Invoking the stored procedure from subscription DB........");      
String callSP="{call masterdb.createCorporateDBProc()};";
cstmt= c1.prepareCall(callSP);
cstmt.execute();

java.sql.CallableStatement cstmt=null;
try {
    System.out.println("Invoking the stored procedure from subscription DB........");      
    String callSP="{call subscription.createCorporateDBProc()}";
    cstmt = c1.prepareCall(callSP);
    int r = cstmt.executeUpdate();
    System.out.println("SP created"+r);
    System.out.println("SP invoked and executed successfully in corporate DB....");
}  catch(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException e){
    e.printStackTrace();
    cstmt.close();
    c1.close();
}

1 个答案:

答案 0 :(得分:0)

请参阅声明的javadoc:

http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29

返回:     (1)SQL数据操作语言(DML)语句的行计数或(2)0表示不返回任何内容的SQL语句

这意味着execute for procedure将返回0.如果调用成功,也检查数据库。