前几天下了个开源的论坛系统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中创建数据库和表的操作指南+...
本实验主要针对《数据库原理及应用》课程中的基础知识部分,旨在让学生通过实践的方式熟悉数据库管理系统的基本操作,并掌握使用SQL Server Management Studio创建数据库和表的具体步骤。此外,还强调了通过SQL语句...
无需编程轻松创建数据库网站>> 凌锋 编著php&mysql 未注册不完全版电子书
01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv 03A ORM实现数据的保存.wmv...
在C#编程环境中,创建数据库和数据表是常见的任务,特别是在开发基于.NET Framework的应用程序时。Visual Studio(如VS2013)提供了一个强大的集成开发环境(IDE),结合SQL Server(例如SQL2008)数据库管理系统,...
- 当应用启动时,Hibernate会读取配置,扫描实体类,然后根据元数据生成相应的SQL语句,执行这些语句以创建数据库表。 6. **注意事项**: - 数据库表的命名策略可以通过`@Table(name = "table_name")`自定义,...
PHP&MySQL无需编程轻松创建数据库网。还不错,好好看看。
除了命令行,还可以使用图形化的数据库管理工具,如MySQL Workbench、phpMyAdmin等,这些工具提供了更直观的界面,让你通过拖拽和填写表单的方式来创建数据库和表。 完整性约束是数据库设计中的关键部分,确保数据...
本教程将详细介绍如何使用C#与Mysql进行交互,包括创建数据库、数据表以及执行基本的CRUD(Create、Read、Update、Delete)操作。 首先,我们需要在C#项目中引入Mysql的数据提供者——`MySql.Data.dll`。这个库允许...
在程序开发过程中,特别是在基于数据库的应用系统中,经常会遇到需要通过编程语言来创建数据库的需求。本案例中使用的是Microsoft Access数据库,并通过Visual Basic (VB) 编程语言来实现。 #### 1. 创建数据库 - *...
PHP & MySQL 无需编程轻松创建数据库网站
3. **创建数据库**:连接到SQLite后,如果没有指定数据库,SQLite会默认创建一个名为`sqlite3.db`的临时数据库。若要创建特定名称的数据库,可以使用`CREATE DATABASE`语句,但在SQLite中,这通常是通过直接打开相应...
本文将详细讲解如何在E4A中创建数据库,并涵盖从检测数据库文件到创建数据表的全过程。 首先,我们要理解E4A中的数据库概念。E4A支持SQLite数据库,这是一种轻量级的关系型数据库,适用于移动设备。SQLite数据库...
在“无需编程轻松创建数据库网站”的主题下,用户将学习如何利用Dreamweaver的内置模板和向导功能来快速搭建网站框架,并设置与MySQL数据库的连接。这通常包括以下步骤: 1. **设置数据库连接**:在Dreamweaver中...
这样的需求可能源于需要将已有的SQLMapper文件中定义的数据表结构信息提取出来,以便用于数据库表的创建或者其他用途。 实现这样的功能通常需要进行以下步骤: 解析SQLMapper文件: 首先需要解析SQLMapper文件,...
2. **创建数据库表**:在建立连接后,我们需要定义表的结构,包括字段名、字段类型(如文本、数字、日期/时间等)、字段长度等。易语言提供了“创建表格”命令,可以方便地创建数据库表,并通过“添加列”命令来设置...
首先,让我们讨论如何创建数据库。在大多数数据库管理系统(如MySQL、SQL Server或Oracle)中,创建一个新的数据库通常通过执行CREATE DATABASE语句来完成。例如,创建一个名为"StudentManagement"的数据库,SQL命令...
除此之外,Entity Framework是一个更高级别的ORM(对象关系映射)框架,它可以简化数据库操作,让开发者能以面向对象的方式处理数据库事务。 数据库编程中,了解SQL语言是必不可少的。SQL(结构化查询语言)用于...
接下来,我们可以通过这个连接对象来创建数据库表。在易语言中,可以使用SQL命令(CREATE TABLE)来定义表结构,包括字段名、字段类型、长度等属性。例如: ```易语言 .创建SQL命令("CREATE TABLE 表名 (字段1 字符...
3. **重写onCreate方法**:这个方法会在首次创建数据库时被调用。在这里,我们编写SQL语句来创建数据表。例如,创建一个名为"我身边的榜样"的表,可以包含姓名字段: ```java @Override public void onCreate...