📄 jdbc.java
字号:
}
metaData = resultSet.getMetaData();
i = metaData.getColumnCount();
String[] field = new String[i];
for(int j=0;j<i;j++){
field[j] = metaData.getColumnLabel(j+1);
}
return field;
}catch (SQLException ex) {
SysLogger.error("JDBC","executeQuery","数据库查询错误"+ex);
throw ex;
}catch (Exception e) {
e.printStackTrace();
return null;
}finally{
//关闭resultSet
try{
resultSet.close();
}catch(SQLException re){
SysLogger.error("JDBC","executeQuery","数据库resultSet 关闭错误:"+re);
throw re;
}
try{
statement.close();
}catch(SQLException se){
SysLogger.error("JDBC","executeQuery","数据库statement关闭错误:"+se);
throw se;
}
freeConnection(connection);
}
}
/**
* 根据表名称和查询条件得到结果集Result
* @param tableName 表的名字
* @param whereStmt 查询条件
* @return 结果集Result
* @exception Exception
*/
public static Result searchByWhere(String tableName,String whereStmt) throws Exception {
String sql = queryStatementFromClass(tableName,whereStmt);
return executeQuery(sql);
}
/**
* 根据表名称和查询条件得到结果集Result
* @param tableName 表的名字
* @param whereStmt 查询条件
* @param beginRows 查询结果的起始位置
* @param pageRows 查询记录数
* @return 结果集Result
* @exception Exception
*/
public static Result searchByWhere(String tableName,String whereStmt, int beginRows, int pageRows ) throws Exception {
String sql = queryStatementFromClass(tableName,whereStmt);
return executeQuery(sql, beginRows, pageRows);
}
/**
* 把一个对象插入它所对应的表中。
* @param obj 要被插入表中的对象。
* @return 成功执行的记录数
* @exception Exception
*/
public static int insertObject(Object obj) throws Exception{
Connection conn = getConnection();
try{
return insertObject(obj, conn);
}
catch(Exception e){
throw e;
}
finally{
freeConnection(conn);
}
}
/**
* 把一个对象插入它所对应的表中(利用已有数据库连接)
* @param obj 要被插入表中的对象。
* @param conn 数据库连接
* @return 成功执行的记录数
* @exception Exception
*/
public static int insertObject(Object obj, Connection conn) throws Exception
{
Class objClass=obj.getClass();
String tableName=getTableNameFromClass(objClass);
Field [] fields=objClass.getFields();
String strStmt="insert into "+tableName+"( " ;
for (int i=0; i<fields.length;i++)
{
if (i!=0)
{
strStmt+=", ";
}
strStmt+=fields[i].getName();
}
strStmt+=" ) values ( " ;
for(int i=0; i<fields.length;i++)
{
if (i!=0)
{
strStmt+=", ";
}
strStmt+="?";
}
strStmt+=" )";
//System.out.println("insertObject:"+strStmt);
SysLogger.infoLog(strStmt);
PreparedStatement preStmt = conn.prepareStatement(strStmt);
for(int j=0;j<fields.length;j++)
{
String typeName=fields[j].getType().getName();
SysLogger.infoLog("filds[" + j + "] = " + fields[j].get(obj));
if (typeName.equals("double"))
{
if(fields[j].getDouble(obj) == -1){
preStmt.setNull(j+1,Types.DOUBLE);
}//weigang 20021208 如果数值为缺省值,则设置为NULL
else{
preStmt.setDouble(j+1, fields[j].getDouble(obj) );
}
}else if (typeName.equals("float"))
{
if(fields[j].getFloat(obj) == -1){
preStmt.setNull(j+1,Types.REAL);
}
else{
preStmt.setFloat(j+1,fields[j].getFloat(obj) );
}
}else if (typeName.equals("int"))
{
if(fields[j].getInt(obj) == -1){
preStmt.setNull(j+1,Types.INTEGER);
}
else{
preStmt.setInt(j+1,fields[j].getInt(obj) );
}
}else if (typeName.equals("long"))
{
if(fields[j].getLong(obj) == -1){
preStmt.setNull(j+1,Types.BIGINT);
}
else{
preStmt.setLong(j+1,fields[j].getLong(obj) );
}
}else if (typeName.equals("short"))
{
if(fields[j].getShort(obj) == -1){
preStmt.setNull(j+1,Types.INTEGER);
}
else{
preStmt.setShort(j+1,fields[j].getShort(obj) );
}
}else if (typeName.equals("boolean"))
{
preStmt.setBoolean(j+1,fields[j].getBoolean(obj) );
}else if (typeName.equals("java.lang.String"))
{
if( fields[j].get(obj)==null )
{
preStmt.setNull(j+1,Types.VARCHAR);
}else
{
preStmt.setString(j+1,(String)(fields[j].get(obj)) );
}
}else
{
if ( fields[j].get(obj)==null )
{
preStmt.setNull(j+1,sqlTypeFromClassName(typeName));
}else
{
preStmt.setObject(j+1,fields[j].get(obj) );
}
}
}
try{
return preStmt.executeUpdate();
}
catch(Exception e){
SysLogger.error("JDBC","insertObject","数据库插入错误" + e);
SysLogger.error("JDBC","insertObject","sql: " + strStmt);
throw e;
}
finally{
preStmt.close();
}
}
/**
* 根据对象和条件建立查询语句更改为对象所表示的值。
* @param obj 要被更改到表中的对象
* @param whereStmt where条件
* @return 返回码
* @exception Exception
*/
public static int updateObjectByWhere(Object obj, String whereStmt) throws Exception{
return executeUpdate(getUpdateStatementFromObject(obj, whereStmt));
}
/**
* 根据对象和条件建立查询语句
* 更改为对象所表示的值。
* @param obj 要被更改到表中的对象
* @param whereStmt where条件
* @param conn 数据库连接
* @return 返回码
* @exception Exception
*/
public static int updateObjectByWhere(Object obj, String whereStmt, Connection conn) throws Exception{
return executeUpdate(getUpdateStatementFromObject(obj, whereStmt), conn);
}
/**
* 根据对象和条件建立查询语句
* @param obj 要被更改到表中的对象
* @param string whereStmt条件
* @return update sql语句
* @exception Exception
*/
public static String getUpdateStatementFromObject(Object obj,String whereStmt)throws Exception
{
Class objClass=obj.getClass();
String tableName=getTableNameFromClass(objClass);
Field [] fields=objClass.getFields();
String strStmt="update "+tableName+" set " ;
/*for (int i=0; i<fields.length;i++)
{
if (i!=0)
{
strStmt+=", ";
}
strStmt+=fields[i].getName();
}
strStmt+=" ) = ( " ;
*/
boolean f = false;
for(int i=0; i<fields.length;i++)
{
//modify weigang 20021112
if (fields[i].getType().getName().equals("java.lang.String")&& fields[i].get(obj) == null
|| fields[i].getType().getName().equals("int") && fields[i].getInt(obj) == -1
|| fields[i].getType().getName().equals("double") && fields[i].getDouble(obj) == -1){
//SysLogger.debug("String is null");
continue;
}
if (f)
{
strStmt+=", ";
}
f = true;
strStmt += fields[i].getName();
strStmt += " = ";
String typeName=fields[i].getType().getName();
if (typeName.equals("double"))
{
strStmt+= fields[i].getDouble(obj) ;
}else if (typeName.equals("float"))
{
strStmt+=fields[i].getFloat(obj) ;
}else if (typeName.equals("int"))
{
strStmt+=fields[i].getInt(obj) ;
}else if (typeName.equals("long"))
{
strStmt+=fields[i].getLong(obj) ;
}else if (typeName.equals("short"))
{
strStmt+=fields[i].getShort(obj) ;
}else if (typeName.equals("boolean"))
{
strStmt+=fields[i].getBoolean(obj) ;
}else if (typeName.equals("java.lang.String"))
{
if( fields[i].get(obj)==null )
{
throw new Exception("Database Error:"+fields[i].getName()+"is null!");
}else
{
strStmt+="'"+(String)(fields[i].get(obj))+"'" ;
}
}else
{
if ( fields[i].get(obj)==null )
{
strStmt+=sqlTypeFromClassName(typeName);
}else
{
strStmt+=fields[i].get(obj);
}
}
}
strStmt += " WHERE ";
strStmt += whereStmt;
//strStmt += " )";
System.out.println("updateObject:"+strStmt);
return strStmt;
}
/**
* 从表中删除记录
* @param tableName 表名
* @param whereStmt 删除条件
* @return 成功删除的记录数
* @exception Exception
*/
public static int delete(String tableName, String whereStmt) throws Exception{
Connection conn = getConnection();
try{
return delete(tableName, whereStmt, conn);
}
catch(Exception e){
throw e;
}
finally{
freeConnection(conn);
}
}
/**
* 通过指定的连接从表中删除记录
* @param tableName 表名
* @param whereStmt 删除条件
* @param conn 数据录连接
* @return 成功删除的记录数
* @exception Exception
*/
public static int delete(String tableName, String whereStmt, Connection conn) throws Exception{
if (whereStmt == null){
return 0; //where条件不能为null
}
return executeUpdate("delete from " + tableName + " where " + whereStmt, conn);
}
/**
* 从数据库得到计算结果
* add by yanger 2002-11-15
*/
public static int countByQuery(String query)throws Exception{
Connection conn= getConnection();
return -1;
}
/**
* 根据类, 返回表名。
* @param cls 类
* @return 表名
*/
public static String getTableNameFromClass(Class cls){
String className=cls.getName();
//System.out.println(className);
int lastdot=className.lastIndexOf('.');
return className.substring(lastdot+1);
}
/**
* 把一个Java的一个对象类型映射为java.sql.Types中定义的类型
* @param obj java的一个对象.
* @return java.sql.Types中定义的类型.
* @throws Exception 如果不能找到所对应的类型, 则产生一个Exception.
*/
public static int sqlTypeFromClassName(String className) throws Exception{
if( className.equals("java.lang.String") ) return Types.VARCHAR;
if( className.equals("java.lang.Boolean") ) return Types.BIT ;
if( className.equals("java.lang.Integer") ) return Types.INTEGER ;
if( className.equals("java.lang.Long") ) return Types.BIGINT ;
if( className.equals("java.lang.Float") ) return Types.REAL ;
if( className.equals("java.lang.Double") ) return Types.DOUBLE ;
if( className.equals("[b") ) return Types.VARBINARY ;
if( className.equals("java.sql.Date") ) return Types.DATE ;
if( className.equals("java.sql.Time") ) return Types.TIME ;
if( className.equals("java.sql.Timestamp") ) return Types.TIMESTAMP ;
throw new Exception("Map Java class '"+className+"' to SQL Type Error.");
}
/**
* 根据条件得到dataBean对象
* @param tableName 数据表名称(dataBean)
* @param whereStmt 检索条件
* @return Object dataBean数据对象
*/
public static Object getObjectByWhere(String tableName,String whereStmt) throws Exception {
Object object=null;
return object;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -