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

📄 josqljrdatasource.java

📁 JoSQL 1.5的源代码。JoSQL(SQL for Java Objects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java
💻 JAVA
字号:
/* * Copyright 2004-2005 Gary Bentley  *  * Licensed under the Apache License, Version 2.0 (the "License"); you may  * not use this file except in compliance with the License.  * You may obtain a copy of the License at  *    http://www.apache.org/licenses/LICENSE-2.0  * * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License. */package org.josql.contrib;import java.util.List;import net.sf.jasperreports.engine.JRRewindableDataSource;import net.sf.jasperreports.engine.JRField;import org.josql.QueryExecutionException;import org.josql.QueryParseException;import org.josql.Query;import org.josql.QueryResults;/** * A data source suitable for use with <a href="http://jasperreports.sourceforge.net/">JasperReports</a>.   * This is basically just an extension to {@link Query} that allows the * results to be iterated over, thereby providing the ability for objects to be reported on * that are held in memory. * <p> * One limitation here is that the SQL query must return columns rather than the objects * since the values need to be mapped by JasperReports.  For example: * <pre> *   SELECT lastModified, *          name *   FROM   java.io.File *   WHERE  name LIKE '%.html' * </pre> * <p> * This query would work but it should be noted that the select "columns" (since they do not have  * aliases assigned) will be labeled 1, 2, X and so on. * You can assign aliases to the "columns" and then use them in the report definition file. * <p> * Please note: due to my bewilderment (and the fact that I can't get the examples to work ;) * I haven't been able to adequately test this implementation, in the rudementary tests I  * performed it seemed to work.  If it doesn't please send me an example so that I can try * it! * <p> *  Last Modified By: $Author: barrygently $<br /> *  Last Modified On: $Date: 2005/01/20 15:27:25 $<br /> *  Current Revision: $Revision: 1.1 $<br /> */  public class JoSQLJRDataSource extends Query implements JRRewindableDataSource{    private int row = 0;    private List results = null;    public JoSQLJRDataSource ()    {    }    /**     * Exectute the query and return the results.  A reference to the results is also held to      * allow them to be iterated over.  If you plan on re-using this data source then      * you should call: {@link #clearResults()} to free up the references to the results.     *     * @param l The List of objects to execute the query on.     * @return The results.     * @throws QueryExecutionException If the query cannot be executed, or if the query     *                                 is set to return objects rather than "columns".     */    public QueryResults executeQuery (List   l)	                              throws QueryExecutionException    {	if (this.isWantObjects ())	{	    throw new QueryExecutionException ("Only SQL statements that return columns (not the objects passed in) can be used.");	}	QueryResults qr = super.execute (l);	this.results = qr.getResults ();	return qr;    }    public List getResults ()    {	return this.results;    }    public void clearResults ()    {	this.results = null;    }    public Object getFieldValue (JRField field)    {	// Get the row of objects.	List res = (List) this.results.get (this.row);	Integer ind = (Integer) this.getAliases ().get (field.getName ());	int i = -1;	if (ind != null)	{	    i = ind.intValue ();	    if (i > (res.size () - 1))	    {		return null;	    }	}	// Get the index for the field name.	return res.get (i);    }    public boolean next ()    {	if (this.row < (this.results.size () - 1))	{	    this.row++;	    return true;	}	return false;    }    public void moveFirst ()    {	this.row = 0;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -