`

以编程方式创建数据库表

阅读更多
前几天下了个开源的论坛系统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语句正确。

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

分享到:
评论

相关推荐

    MySQL中创建数据库和表的操作指南+编程知识+技术开发

    mysql创建数据库和表,MySQL中创建数据库和表的操作指南+编程知识+技术开发;mysql创建数据库和表,MySQL中创建数据库和表的操作指南+编程知识+技术开发;mysql创建数据库和表,MySQL中创建数据库和表的操作指南+...

    数据库原理及应用实验一(创建数据库和表)

    本实验主要针对《数据库原理及应用》课程中的基础知识部分,旨在让学生通过实践的方式熟悉数据库管理系统的基本操作,并掌握使用SQL Server Management Studio创建数据库和表的具体步骤。此外,还强调了通过SQL语句...

    php&mysql 无需编程轻松创建数据库网站

    无需编程轻松创建数据库网站&gt;&gt; 凌锋 编著php&mysql 未注册不完全版电子书

    MySQL讲解及创建数据库表

    01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv 03A ORM实现数据的保存.wmv...

    C# 创建数据库、数据表

    在C#编程环境中,创建数据库和数据表是常见的任务,特别是在开发基于.NET Framework的应用程序时。Visual Studio(如VS2013)提供了一个强大的集成开发环境(IDE),结合SQL Server(例如SQL2008)数据库管理系统,...

    Java根据实体创建Mysql数据库表

    - 当应用启动时,Hibernate会读取配置,扫描实体类,然后根据元数据生成相应的SQL语句,执行这些语句以创建数据库表。 6. **注意事项**: - 数据库表的命名策略可以通过`@Table(name = "table_name")`自定义,...

    PHP&MySQL无需编程轻松创建数据库网

    PHP&MySQL无需编程轻松创建数据库网。还不错,好好看看。

    国开作业《MySQL数据库应用》实验训练1在MySQL中创建数据库和表参考107.pdf

    除了命令行,还可以使用图形化的数据库管理工具,如MySQL Workbench、phpMyAdmin等,这些工具提供了更直观的界面,让你通过拖拽和填写表单的方式来创建数据库和表。 完整性约束是数据库设计中的关键部分,确保数据...

    C#操作Mysql创建数据库,数据表,增、删、改数据

    本教程将详细介绍如何使用C#与Mysql进行交互,包括创建数据库、数据表以及执行基本的CRUD(Create、Read、Update、Delete)操作。 首先,我们需要在C#项目中引入Mysql的数据提供者——`MySql.Data.dll`。这个库允许...

    精彩编程与编程技巧-用代码创建数据库,表,字段...

    在程序开发过程中,特别是在基于数据库的应用系统中,经常会遇到需要通过编程语言来创建数据库的需求。本案例中使用的是Microsoft Access数据库,并通过Visual Basic (VB) 编程语言来实现。 #### 1. 创建数据库 - *...

    PHP & MySQL 无需编程轻松创建数据库网站

    PHP & MySQL 无需编程轻松创建数据库网站

    SQLite(创建数据库)

    3. **创建数据库**:连接到SQLite后,如果没有指定数据库,SQLite会默认创建一个名为`sqlite3.db`的临时数据库。若要创建特定名称的数据库,可以使用`CREATE DATABASE`语句,但在SQLite中,这通常是通过直接打开相应...

    创建数据库.rar_-baijiahao_E4A DB数据库_e4a创建目录_e4a数据库 图片_e4a数据库表格

    本文将详细讲解如何在E4A中创建数据库,并涵盖从检测数据库文件到创建数据表的全过程。 首先,我们要理解E4A中的数据库概念。E4A支持SQLite数据库,这是一种轻量级的关系型数据库,适用于移动设备。SQLite数据库...

    PHP_MySQL无需编程轻松创建数据库网站

    在“无需编程轻松创建数据库网站”的主题下,用户将学习如何利用Dreamweaver的内置模板和向导功能来快速搭建网站框架,并设置与MySQL数据库的连接。这通常包括以下步骤: 1. **设置数据库连接**:在Dreamweaver中...

    根据MyBatis或iBatis的SQLMapper文件反向生成数据库表

    这样的需求可能源于需要将已有的SQLMapper文件中定义的数据表结构信息提取出来,以便用于数据库表的创建或者其他用途。 实现这样的功能通常需要进行以下步骤: 解析SQLMapper文件: 首先需要解析SQLMapper文件,...

    易语言创建Access数据库

    2. **创建数据库表**:在建立连接后,我们需要定义表的结构,包括字段名、字段类型(如文本、数字、日期/时间等)、字段长度等。易语言提供了“创建表格”命令,可以方便地创建数据库表,并通过“添加列”命令来设置...

    数据库编程实例——数据库基本操作

    首先,让我们讨论如何创建数据库。在大多数数据库管理系统(如MySQL、SQL Server或Oracle)中,创建一个新的数据库通常通过执行CREATE DATABASE语句来完成。例如,创建一个名为"StudentManagement"的数据库,SQL命令...

    网络编程和数据库编程学习案例

    除此之外,Entity Framework是一个更高级别的ORM(对象关系映射)框架,它可以简化数据库操作,让开发者能以面向对象的方式处理数据库事务。 数据库编程中,了解SQL语言是必不可少的。SQL(结构化查询语言)用于...

    易语言对象创建ACCESS数据库

    接下来,我们可以通过这个连接对象来创建数据库表。在易语言中,可以使用SQL命令(CREATE TABLE)来定义表结构,包括字段名、字段类型、长度等属性。例如: ```易语言 .创建SQL命令("CREATE TABLE 表名 (字段1 字符...

    Android基础编程-sqlite数据库创建数据表.pptx

    3. **重写onCreate方法**:这个方法会在首次创建数据库时被调用。在这里,我们编写SQL语句来创建数据表。例如,创建一个名为"我身边的榜样"的表,可以包含姓名字段: ```java @Override public void onCreate...

Global site tag (gtag.js) - Google Analytics