首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

以编程模式创建数据库表

2012-11-09 
以编程方式创建数据库表前几天下了个开源的论坛系统JForum,看了一下,此论坛系统是以可编程的方式进行数据

以编程方式创建数据库表
前几天下了个开源的论坛系统JForum,看了一下,此论坛系统是以可编程的方式进行数据库表的创建。

研究了一下,现把具体的代码分离一下,感兴趣的朋友可以看看,以后可能会用到的。

下面是解析SQL文件的语句代码:

public class ParseDBStructFile { /**  * 读取Sql文件,得到Sql语句信息列表  * @param operation 控制Sql语句的数组  * @param filename Sql文件所在的路径  * @return Sql语句的信息列表  */ @SuppressWarnings("unchecked") public static List parse(String[] operation,String filename) {  //保存Sql语句的List  List statements = new ArrayList();  BufferedReader reader = null;  try {   reader = new BufferedReader(new FileReader(filename));   StringBuffer sb = new StringBuffer(512);   boolean processing = false;   char delimiter = ';';//   String[] creators = { "CREATE INDEX", "CREATE TABLE",//     "CREATE SEQUENCE", "DROP TABLE", "IF EXISTS",//     "DROP SEQUENCE", "DROP INDEX" };   String[] creators = operation;   String line;   while ((line = reader.readLine()) != null) {    if (line.length() == 0) {     continue;    }    char charAt = line.charAt(0);    // Ignore comments    if (charAt == '-' || charAt == '#') {     continue;    }    if (processing) {     sb.append(line);     if (line.indexOf(delimiter) > -1) {      sb.delete(sb.length() - 1, sb.length());      statements.add(sb.toString());      processing = false;     }    } else {     for (int i = 0; i < creators.length; i++) {      if (line.indexOf(creators[i]) > -1) {       sb.delete(0, sb.length());       if (line.indexOf(delimiter) > -1) {        if (line.indexOf(';') > -1) {         line = line.replace(';', ' ');        }        statements.add(line);       } else {        sb.append(line);        processing = true;       }       break;      }     }    }   }  } catch (Exception e) {   e.printStackTrace();  } finally {   if (reader != null) {    try {     reader.close();    } catch (Exception e) {    }   }  }  return statements; }}


此类用于对包含SQL语句的文件进行分析。

把SQL语句添加至一个List对象里面。其中String数组中包含数据库表创建中的一些关键字段,比如CREATE INDEX, CREATE TABLE,DROP TABLE,DROP INDEX等语句。

接着就可以创建执行Sql语句的类,以创建数据库表信息,以下是具体代码:

public class InstallTables { /**  * 创建数据库表的方法  * @param post 数据库对应的端口   * @param dbName 数据库名称  * @param username 用户名  * @param password 密码  * @param operation 控制数据库创建表数组  * @param filename Sql表文件的路径  * @throws Exception  */ @SuppressWarnings("unchecked") public void install(String post,String dbName,String username,String password,String[] operation,String filename) throws Exception{  Connection conn = DBConnection.getConnectionMySqlDB(post,dbName,username,password);  boolean autoCommit = conn.getAutoCommit();  Statement st = null;  List queryList = ParseDBStructFile.parse(operation,filename);  for(String sql:queryList){   if (sql == null || "".equals(sql.trim())) {    continue;   }   st = conn.createStatement();   st.executeUpdate(sql);   st.close();  }  conn.setAutoCommit(autoCommit); }}


其中DBConnection是一个建立与数据库连接的类,参数代表了数据库的端口号、要连接的目标数据库名称、用户名、密码。

DBConnection类的具体代码:

public class DBConnection { public static Connection getConnectionMySqlDB(String post, String dbName,String userName,String password)   throws Exception {  String driver = "com.mysql.jdbc.Driver";  String url = "jdbc:mysql://localhost:" + post + "/" + dbName;  String user = userName;  String pwd = password;  Class.forName(driver);  return DriverManager.getConnection(url, user, pwd); }}


当然你也可以自己进行扩展,比如再创建与SQLServer、Oracle的连接等。

现在一切都已经完成啦,让我们做一个简单的测试:

public class testCreator{     @Test     public void testInstallTables(){        InstallTables install = new InstallTables();        try {           String[] operation = {"CREATE TABLE","DROP TABLE"};           install.install("3306", "jackdemo", "root", "jack",operation, "F:\\tables.sql");        } catch (Exception e) {           e.printStackTrace();        }     } } 


下面是tables.sql文件的内容:

DROP TABLE IF EXISTS jackdemo1; CREATE TABLE jackdemo1 (         id int primary key auto_increment,         name varchar(50),         age int,         address varchar(1000) ); 


以上就是全部的内容,当然还可以进行表内容的添加,只要你写的Sql语句正确。

有时候看一些开源的东西,特别是看别人的代码的时候觉得自己的代码写的好不严谨呀,以后还要多多学习开源框架的源码,养成好的代码风格和习惯。

热点排行