主要完成以下工作:1、創建數據庫china;2、配置好數據庫連接文件db.xml;3、創建sql文件china_createTable.sql;4、在軟件項目中添加sqljdbc4.jar文件;5、在控制台下測試JadePool執行/META-INF/china_createTable.sql文件的方法,完成創建數據庫表的工作。
(一)、創建數據庫china
本范例使用SQL Server 2000數據庫。在SQL Server 2000中創建數據庫china,並為china數據庫創建一個用戶名和密碼。本范例配置的用戶名和密碼均為123。
(二)、配置數據庫連接文件db.xml
在項目源包下的META-INF目錄下創建db.xml文件,文件內容如下:
[html]
<?xml version="1.0" encoding="GBK"?>
<db>
<url>jdbc:sqlserver://127.0.0.1\\dbo:1433;databaseName=china</url>
<driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
<user>123</user>
<password>123</password>
<resource></resource>
</db>
<?xml version="1.0" encoding="GBK"?>
<db>
<url>jdbc:sqlserver://127.0.0.1\\dbo:1433;databaseName=china</url>
<driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
<user>123</user>
<password>123</password>
<resource></resource>
</db> 用戶可以參照以上代碼填寫配置項。更詳細的說明參閱:高效JDBC編程工具JadePool快速入門
(三)、創建建表sql文件china_createTable.sql
在項目源包下的META-INF目錄下創建china_createTable.sql文件,文件內容見附件1。
根據我個人的經驗,在JDBC編程中,有以下幾點僅供參考:
1、每個表盡可能保持唯一的一個主鍵;
2、非主鍵字段允許null值,防止插入單個主鍵字段時出現異常;
3、盡可能選擇與現實一致的字段類型,如,日期選擇日期型,貨幣選擇BigDecimal型,貨幣避免選擇float、double型;
4、避免設置外鍵,表間邏輯關系可以在JDBC業務邏輯中實現。
(四)、在軟件項目中添加sqljdbc4.jar文件
(五)、在控制台下測試JadePool執行sql文件的方法
在初次創建chian數據庫後,該數據庫不存在用戶表,執行以下類china.test.ExcuteSQLFile後,在SQL Server 2000企業管理器中查看china數據庫,發現多了幾個用戶表,查看sw_lianxirenfenlei表,其中有記錄存在,這些記錄來自/META-INF/china_createTable.sql文件。
[java]
/*
* 在控制台下測試JadePool執行sql文件的方法
* 2013-03-27
*/
package china.test;
import cn.jadepool.sql.Jade;
import cn.jadepool.sql.JadeTool;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author hkm
*/
public class ExcuteSQLFile {
public static void main(String[] args) throws IOException {
URL url = ExcuteSQLFile.class.getResource("/META-INF/china_createTable.sql");
Jade j = new Jade(getCon());
j.executeSqlFile(url.getFile());
j.commit();
}
/**
* sqljdbc4.jar
*/
public static synchronized Connection getCon() {
Connection con = null;
String url = "jdbc:sqlserver://127.0.0.1\\dba:1436;databaseName=china";
String userName = "123";
String password = "123";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(url, userName, password);
} catch (SQLException ex1) {
ex1.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return con;
}
}
/*
* 在控制台下測試JadePool執行sql文件的方法
* 2013-03-27
*/
package china.test;
import cn.jadepool.sql.Jade;
import cn.jadepool.sql.JadeTool;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author hkm
*/
public class ExcuteSQLFile {
public static void main(String[] args) throws IOException {
URL url = ExcuteSQLFile.class.getResource("/META-INF/china_createTable.sql");
Jade j = new Jade(getCon());
j.executeSqlFile(url.getFile());
j.commit();
}
/**
* sqljdbc4.jar
*/
public static synchronized Connection getCon() {
Connection con = null;
String url = "jdbc:sqlserver://127.0.0.1\\dba:1436;databaseName=china";
String userName = "123";
String password = "123";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(url, userName, password);
} catch (SQLException ex1) {
ex1.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return con;
}
}
圖:執行j.executeSqlFile(url.getFile());的結果
[sql]
/*
軟件項目:China
版 本:1.0
數 據 庫:MS SQL Server2000
創建日期:2013-03-26
作 者:胡開明
數據庫表:包括以下
1、行政區劃 cn_address
2、名族 cn_people
3、產品分類 cn_productcategory
4、行業分類 cn_economycategory
5、行業門類 cn_economyfield
6、三次產業 cn_economy
7、商務通訊錄 sw_tongxunlu
8、聯系人分類 sw_lianxirenfenlei
9、商務通訊錄列表 sw_tongxunlu_liebiao
10、聯系方式分類 sw_lianxifangshi
*/
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cn_address]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table cn_address( /*行政區劃主表 */
addresscode varchar(16) primary key, /*行政區劃編碼,主鍵,根據國家統計局提供的資料錄入*/
addressname varchar(50), /*行政區劃標准名稱, 根據國家統計局提供的資料錄入*/
labelcn varchar(32), /*中文地名*/
labelen varchar(32), /*英語地名*/
longitude float, /*經度*/
latitude float, /*緯度*/
zip varchar(8), /*郵政編碼,是國際通行的作法,故可作為共同部分的字段*/
memo text, /*備注*/
isusing bit default '1' /*是否使用*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cn_people]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table cn_people( /*民族表 */
people_id int primary key, /*民族表,主鍵*/
minzu varchar(16), /*民族*/
pinxie varchar(16), /*羅馬字母拼寫法*/
zimu varchar(8) /*字母代碼*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cn_productcategory]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table cn_productcategory( /*產品分類主表 */
productcode varchar(16) primary key, /*產品分類編碼,主鍵,根據國家統計局提供的資料錄入*/
productname varchar(200), /*產品分類標准名稱, 根據國家統計局提供的資料錄入*/
memo text,
isusing bit default '0' /*是否使用*/
);
--以下三個表,根據國民經濟行業分類(GB/T 4754—2011)設計
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cn_economycategory]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table cn_economycategory( /*行業分類表 根據國家統計局提供的資料錄入*/
economycode varchar(16) primary key, /*行業分類編碼,主鍵,對應大類*/
economyname varchar(400), /*行業分類標准名稱, 對應名稱*/
economyfield varchar(4), /*行業分類編碼,主鍵,對應門類(領域) 單個大字母表示,如:A*/
economy varchar(24), /*行業分類標准名稱, 對應三次產業*/
isusing bit default '0' /*是否使用*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cn_economyfield]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table cn_economyfield( /*行業門類【經濟領域】表 根據國家統計局提供的資料錄入*/
economyfield varchar(4) primary key, /*行業門類【經濟領域】主鍵,對應門類(領域) 單個大字母表示,如:A*/
economyname varchar(400), /*行業門類【經濟領域】標准名稱, 對應名稱*/
economy varchar(24) /*所屬三大產業*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cn_economy]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table cn_economy( /*三大產業表 根據國家統計局提供的資料錄入*/
economy varchar(24) primary key, /*三大產業主鍵*/
economyname varchar(400) /*三大產業, 對應名稱、解釋*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sw_tongxunlu]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table sw_tongxunlu( /*通訊錄*/
tongxunlu_id bigint primary key, /*通訊錄主鍵*/
lianxiren varchar(80) , /*聯系人,單位或個人*/
fenlei varchar(16), /*分類,如:供應商、客戶、快遞、維修、服務*/
ziliao text /*相關資料*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sw_lianxirenfenlei]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table sw_lianxirenfenlei( /*聯系人分類*/
lianxiren_fenlei_id int primary key, /*聯系人分類主鍵*/
fenlei varchar(16) /*分類,如:供應商、客戶、快遞、維修、服務*/
);
delete from sw_lianxirenfenlei;
insert into sw_lianxirenfenlei values(0,'供應商');
insert into sw_lianxirenfenlei values(1,'客戶');
insert into sw_lianxirenfenlei values(2,'貨運');
insert into sw_lianxirenfenlei values(3,'快遞');
insert into sw_lianxirenfenlei values(4,'維修');
insert into sw_lianxirenfenlei values(5,'服務');
insert into sw_lianxirenfenlei values(100,'政府部門');
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sw_tongxunlu_liebiao]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table sw_tongxunlu_liebiao( /*通訊錄列表*/
tongxunlu_liebiao_id bigint primary key, /*通訊錄列表主鍵*/
tongxunlu_id bigint, /*通訊錄主鍵*/
fangshi varchar(16) , /*聯系方式,如:地址、QQ、電話、傳真、手機等等*/
tel varchar(80) /*地址或號碼,如:*/
);
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sw_lianxifangshi]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table sw_lianxifangshi( /*商務通訊錄聯系方式*/
lianxifangshi_id int primary key, /*聯系方式分類主鍵*/
fangshi varchar(16) /*聯系方式,如:地址、QQ、電話、傳真、手機等等*/
);
delete from sw_lianxifangshi;
insert into sw_lianxifangshi values(0,'單位');
insert into sw_lianxifangshi values(1,'地址');
insert into sw_lianxifangshi values(2,'電話');
insert into sw_lianxifangshi values(3,'傳真');
insert into sw_lianxifangshi values(4,'手機');
insert into sw_lianxifangshi values(5,'QQ');
insert into sw_lianxifangshi values(6,'電子信箱');
insert into sw_lianxifangshi values(7,'信箱');