java

位置:IT落伍者 >> java >> 浏览文章

根据JavaBean生成数据库增删改查的SQL语句


发布日期:2022年01月13日
 
根据JavaBean生成数据库增删改查的SQL语句

根据JavaBean生成数据库增删改查的SQL语句

genInsertSQL(Object bean);

genUpdateSQL(Object bean);

genDeleteSQL(Object bean);

genFindAllSQL(String tableName);

genFindAllSQL(String tableName)

import javaioSerializable;

import javalangreflectField;

import javatextSimpleDateFormat;

import javautilArrayList;

import javautilDate;

import javautilHashtable;

import javautilList;

import comdomainAG;

/**

* FOR JDBC RUID OperationThis class can generate SQL by parameter of

* Object(update/insert/delete)

* or Class(select)

*

*@category comutil

*@class SQLUtil

*@author

*@date 下午::

*@see

*/

public class SQLUtil

{

private final static String database_table_prefix=databasetableprefix;

private String pkColumnName=SN;

public SQLUtil()

{

//pkColumnName is vary of Tableso mothods which need pkColumn can not use static

thispkColumnName=SN;

}

public SQLUtil(String pkColumnName)

{

//pkColumnName is vary of Tableso mothods which need pkColumn can not use static

thispkColumnName=pkColumnName;

}

/**

* @param Object the object for insert

* @return an insert String like below:

* insert into vmm_ag(sndomainnamemodifydatetestDouble)

* values(domainnameto_date(YYYYMMDD))

*/

public static String genInsertSQL(Object bean)

{

List <String> fields=BeanUtilgetFields(bean);

List <String> values=BeanUtilgetValuesString(bean);

Hashtable fieldsTypes = BeanUtilgetFieldsAndTypes(bean);

//Systemoutprintln(fieldssize():+fieldssize()+valuessize():+valuessize());

if(fieldssize() !=valuessize())

{

String error=ERROR:genInsertSQL(bean)>fieldss size does not match values sizebean:+bean+

\n fieldssize():+fieldssize()+valuessize():+valuessize();

Systemerrprintln(error);

return error;

}

//get database table Name

String tableName=getTableName(bean);

String insertSQL=insert into +tableName+ (;

for (int i = ; i < fieldssize(); i++)

{

//if value of this field is nullthen ignore this field

if(valuesget(i) !=null)

{

insertSQL+=fieldsget(i);

//if not the last fieldthen add

if(i!=fieldssize())

{

insertSQL+=;

}

}

}

insertSQL+=);

insertSQL+=values (;

for (int j = ; j <fieldssize(); j++)

{

String value=;

String typeOfThisField=(String) fieldsTypesget(fieldsget(j));

if(typeOfThisFieldequalsIgnoreCase(String))

{ //when String add around the string like:tempString

value=+valuesget(j)+;

}

else if(typeOfThisFieldequalsIgnoreCase(Date))

{ // select to_date( ::YYYYMMDD HH:MI:SS) from dual

value=to_date(+(String) valuesget(j)+YYYYMMDD HH:MI:SS);

}

else

{ //other types like longdouble add nothing but their value

value=(String) valuesget(j);

}

insertSQL +=value;

if(j!=fieldssize())

{

insertSQL +=;

}

}

insertSQL +=);

//Systemoutprintln(SQL is:+insertSQL);

return insertSQL;

}

public String genUpdateSQL(Object bean)

{

List <String> fields=BeanUtilgetFields(bean);

List <String> values=BeanUtilgetValuesString(bean);

Hashtable fieldsTypes = BeanUtilgetFieldsAndTypes(bean);

if(fieldssize() !=valuessize())

{

String error=ERROR:genUpdateSQL(bean)>fieldss size does not match values sizebean:+bean+

\n fieldssize():+fieldssize()+valuessize():+valuessize();

Systemerrprintln(error);

return error;

}

//get database table Name

String tableName=getTableName(bean);

String updateSQL=update + tableName + set ;

String pkColumnValue=;

for (int i = ; i < fieldssize(); i++)

{

String setSQL=fieldsget(i)+=;

String typeOfThisField=(String) fieldsTypesget(fieldsget(i));

String value=;

if(typeOfThisFieldequalsIgnoreCase(String))

{ //when String add around the string like:tempString

value=+valuesget(i)+;

setSQL+=value;

if(pkColumnNameequalsIgnoreCase(fieldsget(i)))

{

pkColumnValue=value;

}

}

else if(typeOfThisFieldequalsIgnoreCase(Date))

{ // select to_date( ::YYYYMMDD HH:MI:SS) from dual

value=to_date(+(String) valuesget(i)+YYYYMMDD HH:MI:SS);

setSQL+=value;

if(pkColumnNameequalsIgnoreCase(fieldsget(i)))

{

pkColumnValue=value;

}

}

else

{ //other types like longdouble add nothing but their value

value=(String) valuesget(i);

setSQL+=value;

if(pkColumnNameequalsIgnoreCase(fieldsget(i)))

{

pkColumnValue=value;

}

}

if(i!=fieldssize())

{

setSQL +=;

}

updateSQL +=setSQL;

}

updateSQL += where +pkColumnName +=+pkColumnValue;

return updateSQL;

}

/**

* @param Object the object for insert

* @return an insert String like below:

* insert into vmm_ag(sndomainnamemodifydatetestDouble)

* values(domainnameto_date(YYYYMMDD))

*/

public String genDeleteSQL(Object bean)

{

List <String> fields=BeanUtilgetFields(bean);

List <String> values=BeanUtilgetValuesString(bean);

Hashtable fieldsTypes = BeanUtilgetFieldsAndTypes(bean);

//get database table Name

String tableName=getTableName(bean);

String pkType=(String) fieldsTypesget(pkColumnName);

String pkValue=;

for (int i = ; i < fieldssize(); i++)

{ //find the pk columns value

if(pkColumnNametoUpperCase()equalsIgnoreCase(fieldsget(i)))

{

pkValue=valuesget(i);

}

}

//if the pkType is String then need to add around the value

//number

if (StringequalsIgnoreCase(pkType))

{

pkValue=+pkValue+;

}

//String deleteSQL =delete +tableName + where +pkColumnName+=+pkValue;

String deleteSQL=genRemoveByIdSQL(tableNamepkValue);

return deleteSQL;

}

/**

* @param Object the object for select

* @return an select String like below:

* select * from vmm_ag

*/

public static String genFindAllSQL(String tableName)

{

String findAllSQL =select * from +tableName;

return findAllSQL;

}

/**

* @param Object the object for select

* @return an select String like below:

* select * from vmm_ag where sn=

*/

public String genFindByIdSQL(String tableNameSerializable id)

{

String findByIdSQL =select * from +tableName + where +pkColumnName+=+id;

return findByIdSQL;

}

/**

* @param Object the object for select

* @return an select String like below:

* select * from vmm_ag where sn=

*/

public String genRemoveByIdSQL(String tableNameSerializable id)

{

String findByIdSQL =delete from +tableName + where +pkColumnName+=+id;

return findByIdSQL;

}

/**

* TableName=tablePrefix+ClassName

* eg VMM_AGGroup=VMM_+AGGroup

* the VMM_ is the prefix

* the AGGroup is the ClassName

* sothe VMM_AGGroup is the tableName

* @param bean

* @return tableName

*/

public static String getTableName(Object bean)

{

String className=BeanUtilgetClassName(bean);

//get tablePrefix from config file

String tablePrefix=PropertiesUtilgetProperty(database_table_prefix);

//get database table Name

String tableName=tablePrefix+className;

return tableName;

}

public static String getTableName(String className)

{

//get tablePrefix from config file

String tablePrefix=PropertiesUtilgetProperty(database_table_prefix);

//get database table Name

String tableName=tablePrefix+className;

return tableName;

}

/**

* 在生成Fields和values时就只生成value不为null的列

* 数据类型的处理

* ()String加

* ()long和double直接写

* ()date型在生成values的时候就生成字符串行 精确到秒

* @param args

*/

public static void main(String[] args)

{

Date aDate = new Date();

AG ag = new AG();

String sql=genInsertSQL(ag);

Systemoutprintln(sql);

}

}

               

上一篇:Java精确截取字符串

下一篇:用Lucene做一个简单的Java搜索工具