package com.keem.sql;
import java.util.*;
import java.lang.*;
import java.sql.*;
import java.math.BigDecimal;
import java.net.URL;
import com.keem.sql.*;public class QFieldArray{
/**
构造函数
*/
public QFieldArray(){
}
/**
新增字段
@param strFieldName 字段名
@param nType 字段类型
@param FieldValue 字段值
*/
public void addField(String strFieldName,int nType,Object FieldValue){
QField objField=new QField();
objField.setField(strFieldName,nType,FieldValue);
FList.add(objField);
}
/**
新增字段
@param FieldValue 已知的字段
*/
public void addField(QField FieldValue){
QField objField=new QField();
objField.setField(FieldValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,int FieldValue){
Integer nValue=new Integer(FieldValue);
addField(strFieldName,QField.FIELD_INT,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addFieldValue(String strFieldName,long FieldValue){
Long nValue=new Long(FieldValue);
addField(strFieldName,QField.FIELD_LONG,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,short FieldValue){
Short nValue=new Short(FieldValue);
addField(strFieldName,QField.FIELD_SHORT,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,byte FieldValue){
Byte nValue=new Byte(FieldValue);
addField(strFieldName,QField.FIELD_BYTE,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,float FieldValue){
Float nValue=new Float(FieldValue);
addField(strFieldName,QField.FIELD_FLOAT,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,double FieldValue){
Double nValue=new Double(FieldValue);
addField(strFieldName,QField.FIELD_DOUBLE,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,boolean FieldValue){
Boolean nValue=new Boolean(FieldValue);
addField(strFieldName,QField.FIELD_BOOLEAN,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,char FieldValue){
Character nValue=new Character(FieldValue);
addField(strFieldName,QField.FIELD_CHAR,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,String FieldValue){
addField(strFieldName,QField.FIELD_STRING,FieldValue);
}
/**
设置字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,BigDecimal FieldValue){
addField(strFieldName,QField.FIELD_BIGDECIMAL,FieldValue);
}
/**
设置字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,Blob FieldValue){
addField(strFieldName,QField.FIELD_BLOB,FieldValue);
} /**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,Clob FieldValue){
addField(strFieldName,QField.FIELD_CLOB,FieldValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,java.sql.Date FieldValue){
addField(strFieldName,QField.FIELD_DATE,FieldValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,java.sql.Time FieldValue){
addField(strFieldName,QField.FIELD_TIME,FieldValue);
} /**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,URL FieldValue){
addField(strFieldName,QField.FIELD_URL,FieldValue);
}
/**
清除所有字段
*/
public void clearField(){
FList.clear();
}
/**
取得字段数
*/
public int getLength(){
return FList.size();
}
/**
取得某一个字段
*/
public QField getField(int nIndex)
throws Exception
{
rangeCheck(nIndex);
return (QField)FList.get(nIndex);
}
/**
执行更新语句
@param conn 连接数据库对象
@param strTableName 要插入的表名
@param strWhere SQL的Where子句
*/
public void update(Connection conn,String strTableName,String strWhere)
throws SQLException,Exception
{
if( getLength()==0 ) {
throw new Exception("字段数:0");
}
String strSQL="update "+strTableName+"set ";
int nLength=getLength();
for( int i=0 ; i<nLength ; i++){
if( i< nLength-1 ){
strSQL+=getField(i).getFieldName()+"=?,";
}else{
strSQL+=getField(i).getFieldName();
}
}
if( strWhere != null)
strSQL+= " "+strWhere; PreparedStatement pstmt=conn.prepareStatement(strSQL);
for (int i=0 ;i<nLength; i++){
setField(pstmt,i);
}
pstmt.executeUpdate();
pstmt.close();
}
/**
执行插入语句
@param conn 连接数据库对象
@param strTableName 要插入的表名
*/
public void insert(Connection conn,String strTableName)
throws SQLException,Exception
{
if( getLength()==0 ) {
throw new Exception("字段数:0");
}
String strSQL="INSERT INTO "+strTableName+"(";
int nLength=getLength();
for ( int i=0 ; i<nLength ; i++){
if( i< nLength-1 ){
strSQL += getField(i).getFieldName() + ",";
}else{
strSQL +=getField(i).getFieldName();
}
}
strSQL += ") VALUES(";
for ( int i=0 ; i<nLength ; i++){
if( i< nLength-1 ){
strSQL += "?,";
}else{
strSQL +="?";
}
}
strSQL += ")";
PreparedStatement pstmt=conn.prepareStatement(strSQL);
pstmt.clearParameters();
for (int i=0 ;i<nLength; i++){
setField(pstmt,i);
}
pstmt.executeUpdate();
pstmt.close();
}
import java.util.*;
import java.lang.*;
import java.sql.*;
import java.math.BigDecimal;
import java.net.URL;
import com.keem.sql.*;public class QFieldArray{
/**
构造函数
*/
public QFieldArray(){
}
/**
新增字段
@param strFieldName 字段名
@param nType 字段类型
@param FieldValue 字段值
*/
public void addField(String strFieldName,int nType,Object FieldValue){
QField objField=new QField();
objField.setField(strFieldName,nType,FieldValue);
FList.add(objField);
}
/**
新增字段
@param FieldValue 已知的字段
*/
public void addField(QField FieldValue){
QField objField=new QField();
objField.setField(FieldValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,int FieldValue){
Integer nValue=new Integer(FieldValue);
addField(strFieldName,QField.FIELD_INT,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addFieldValue(String strFieldName,long FieldValue){
Long nValue=new Long(FieldValue);
addField(strFieldName,QField.FIELD_LONG,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,short FieldValue){
Short nValue=new Short(FieldValue);
addField(strFieldName,QField.FIELD_SHORT,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,byte FieldValue){
Byte nValue=new Byte(FieldValue);
addField(strFieldName,QField.FIELD_BYTE,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,float FieldValue){
Float nValue=new Float(FieldValue);
addField(strFieldName,QField.FIELD_FLOAT,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,double FieldValue){
Double nValue=new Double(FieldValue);
addField(strFieldName,QField.FIELD_DOUBLE,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,boolean FieldValue){
Boolean nValue=new Boolean(FieldValue);
addField(strFieldName,QField.FIELD_BOOLEAN,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,char FieldValue){
Character nValue=new Character(FieldValue);
addField(strFieldName,QField.FIELD_CHAR,nValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,String FieldValue){
addField(strFieldName,QField.FIELD_STRING,FieldValue);
}
/**
设置字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,BigDecimal FieldValue){
addField(strFieldName,QField.FIELD_BIGDECIMAL,FieldValue);
}
/**
设置字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,Blob FieldValue){
addField(strFieldName,QField.FIELD_BLOB,FieldValue);
} /**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,Clob FieldValue){
addField(strFieldName,QField.FIELD_CLOB,FieldValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,java.sql.Date FieldValue){
addField(strFieldName,QField.FIELD_DATE,FieldValue);
}
/**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,java.sql.Time FieldValue){
addField(strFieldName,QField.FIELD_TIME,FieldValue);
} /**
新增字段
@param strFieldName 字段名
@param FieldValue 字段值
*/
public void addField(String strFieldName,URL FieldValue){
addField(strFieldName,QField.FIELD_URL,FieldValue);
}
/**
清除所有字段
*/
public void clearField(){
FList.clear();
}
/**
取得字段数
*/
public int getLength(){
return FList.size();
}
/**
取得某一个字段
*/
public QField getField(int nIndex)
throws Exception
{
rangeCheck(nIndex);
return (QField)FList.get(nIndex);
}
/**
执行更新语句
@param conn 连接数据库对象
@param strTableName 要插入的表名
@param strWhere SQL的Where子句
*/
public void update(Connection conn,String strTableName,String strWhere)
throws SQLException,Exception
{
if( getLength()==0 ) {
throw new Exception("字段数:0");
}
String strSQL="update "+strTableName+"set ";
int nLength=getLength();
for( int i=0 ; i<nLength ; i++){
if( i< nLength-1 ){
strSQL+=getField(i).getFieldName()+"=?,";
}else{
strSQL+=getField(i).getFieldName();
}
}
if( strWhere != null)
strSQL+= " "+strWhere; PreparedStatement pstmt=conn.prepareStatement(strSQL);
for (int i=0 ;i<nLength; i++){
setField(pstmt,i);
}
pstmt.executeUpdate();
pstmt.close();
}
/**
执行插入语句
@param conn 连接数据库对象
@param strTableName 要插入的表名
*/
public void insert(Connection conn,String strTableName)
throws SQLException,Exception
{
if( getLength()==0 ) {
throw new Exception("字段数:0");
}
String strSQL="INSERT INTO "+strTableName+"(";
int nLength=getLength();
for ( int i=0 ; i<nLength ; i++){
if( i< nLength-1 ){
strSQL += getField(i).getFieldName() + ",";
}else{
strSQL +=getField(i).getFieldName();
}
}
strSQL += ") VALUES(";
for ( int i=0 ; i<nLength ; i++){
if( i< nLength-1 ){
strSQL += "?,";
}else{
strSQL +="?";
}
}
strSQL += ")";
PreparedStatement pstmt=conn.prepareStatement(strSQL);
pstmt.clearParameters();
for (int i=0 ;i<nLength; i++){
setField(pstmt,i);
}
pstmt.executeUpdate();
pstmt.close();
}
新增要插入的字段
@param pstmt PreparedStatement 对象
@param nIndex 顺序
*/
private void setField(PreparedStatement pstmt,int Index)
throws Exception,SQLException
{
QField objField=getField(Index);
int nIndex=Index+1;
//pstmt.set
switch(objField.getType()){
case QField.FIELD_BOOLEAN:
pstmt.setBoolean(nIndex,((Boolean)objField.getFieldValue()).booleanValue());
break;
case QField.FIELD_BYTE:
pstmt.setByte(nIndex,((Byte)objField.getFieldValue()).byteValue());
break;
case QField.FIELD_BIGDECIMAL:
pstmt.setBigDecimal(nIndex,((BigDecimal)objField.getFieldValue()));
break;
case QField.FIELD_CHAR:
pstmt.setString(nIndex,""+((Character)objField.getFieldValue()).charValue());
break;
case QField.FIELD_DOUBLE:
pstmt.setDouble(nIndex,((Double)objField.getFieldValue()).doubleValue());
break;
case QField.FIELD_FLOAT:
pstmt.setFloat(nIndex,((Float)objField.getFieldValue()).floatValue());
break;
case QField.FIELD_INT:
pstmt.setInt(nIndex,((Integer)objField.getFieldValue()).intValue());
//System.out.println("<"+nIndex+">["+objField.getFieldName()+"]="+((Integer)objField.getFieldValue()).intValue());
break;
case QField.FIELD_LONG:
pstmt.setLong(nIndex,((Long)objField.getFieldValue()).longValue());
break;
case QField.FIELD_SHORT:
pstmt.setShort(nIndex,((Short)objField.getFieldValue()).shortValue());
break;
case QField.FIELD_STRING:
pstmt.setString(nIndex+1,((String)objField.getFieldValue()));
// System.out.println("<"+nIndex+">["+objField.getFieldName()+"]="+((String)objField.getFieldValue()));
break;
case QField.FIELD_BLOB:
pstmt.setBlob(nIndex,((Blob)objField.getFieldValue()));
break;
case QField.FIELD_CLOB:
pstmt.setBlob(nIndex,((Blob)objField.getFieldValue()));
break;
case QField.FIELD_DATE:
pstmt.setDate(nIndex,((java.sql.Date)objField.getFieldValue()));
break;
case QField.FIELD_TIME:
pstmt.setTime(nIndex,((java.sql.Time)objField.getFieldValue()));
break;
case QField.FIELD_URL:
pstmt.setURL(nIndex,((URL)objField.getFieldValue()));
break;
}
}
/*
检查nIndex是否越界
*/
private void rangeCheck(int nIndex)
throws Exception
{
if( ( nIndex<0 ) || ( nIndex >=getLength() ) )
throw new Exception("nIndex: "+nIndex+", 字段数: "+getLength());
}
private ArrayList FList=new ArrayList();
}
如:
QFieldArray fa=new QFieldArray();
fa.add("field1","test1");
fs.add("field2",1234);
fa.insert(conn,"testtable");
但可以编译,却不能运行
你把抓异常的地方用e.printStackTrace();方法打出来看看!
PreparedStatement pstmt=conn.prepareStatement(strSQL);
pstmt.clearParameters();
for (int i=0 ;i<nLength; i++){
setField(pstmt,i);
}
有错误!也就是pstmt做为参数传过去操作后有错误!在setField中,pstmt的set方法不能用。