资源描述
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 应该是 。方法 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 PROCEDUREtest.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);
展开阅读全文