⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdbc.java

📁 webwork study w ebwork study
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			}
			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 + -