Java怎么连接程序数据源

  介绍

这篇文章主要介绍“Java怎么连接程序数据源”,在日常操作中,相信很多人在Java怎么连接程序数据源问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“Java怎么连接程序数据源”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在实际应用中,可能需要根据表名动态地改变数据源,比如在程序数据集中,通过传进的表名参数,到数据库取出对应的表作为数据源。例如,FineReport是通过AbstractTableData抽象类来读取数据源的,而上述所有的数据来源都继承实现其抽象方法,因此用户只要实现了AbstractTableData抽象类,也就可以用自定义类型的数据源了(程序数据集),这是带参程序数据集连接的方法。

FineReport报表引擎就能够读取定义的数据源作为报表数据源使用,原理就是继承AbstractTableData。

<强> 1,定义参数

定义一个参数,并定义数据表结构,代码如下:

public  ParamTableDataDemo (), {,,   ,,,,,,,//,定义表名参数,,   ,,,,,,,this.parameters =, new 参数[],{,new 参数(“tableName"),},,,   ,,,,,,,//,定义程序数据集列名,,   ,,,,,,,columnNames =, new 字符串(columnNum);,,   ,,,,,,,for  (int 小姐:=,0;,小姐:& lt;, columnNum;,我+ +),{,,   ,,,,,,,,,,,columnNames[我],=,“列#“,+,String.valueOf (i),,,   ,,,,,,,},,   }

2,设置数据

将数据放入到定义的表中,代码如下:

public  void  init (), {//,确保只被执行一次   if  (valueList  !=, null), {   返回;   }//,保存得到的数据库表名   String  tableName =,参数[0].getValue () .toString ();//,构造SQL语句,并打印出来   String  sql =,“select  *,得到“,+,tableName  +,“,“;   FRContext.getLogger () . info (“Query  SQL  of  ParamTableDataDemo:, \ n", +, sql);//,保存得到的结果集   时间=valueList  new  ArrayList ();//,下面开始建立数据库连接,按照刚才的SQL语句进行查询   Connection  conn =, this.getConnection ();   try  {   Statement  stmt =, conn.createStatement ();   ResultSet  rs =, stmt.executeQuery (sql);//,获得记录的详细信息,然后获得总列数   ResultSetMetaData  rsmd =, rs.getMetaData ();   时间=colNum  rsmd.getColumnCount ();//,用对象保存数据   时间=对象[],objArray 零;   while  (rs.next ()), {   时间=objArray  new 对象(colNum);   for  (int 小姐:=,0;,小姐:& lt;, colNum;,我+ +),{   objArray[我],=,rs.getObject(小姐:+,- 1);   }//,在valueList中加入这一行数据   valueList.add (objArray);   }//,释放数据库资源   rs.close ();   stmt.close ();   conn.close ();//,打印一共取到的数据行数量   FRContext.getLogger () . info (   “Query  SQL  of  ParamTableDataDemo:, \ n", +, valueList.size ()   +,“,rows  selected");   },catch  (Exception  e), {   e.printStackTrace ();   }   }

3,完整的数据集代码

整的带参程序数据集的代码如下

package  com.fr.data;      import  java.sql.Connection;   import  java.sql.DriverManager;   import  java.sql.ResultSet;   import  java.sql.ResultSetMetaData;   import  java.sql.Statement;   import  java.util.ArrayList;      import  com.fr.base.Env;   import  com.fr.base.FRContext;   import  com.fr.data.AbstractTableData;   import  com.fr.base.Parameter;      public  class  ParamTableDataDemo  extends  AbstractTableData  {//,列名数组,保存程序数据集所有列名   private  String [], columnNames =,空;//,定义程序数据集的列数量   时间=private  int  columnNum  10;//,保存查询表的实际列数量   时间=private  int  colNum  0;//,保存查询得到列值   时间=private  ArrayList  valueList 零;//,构造函数,定义表结构,该表有10个数据列,列名# 0为列,列# 1,# 9……列   public  ParamTableDataDemo (), {//,定义表名参数   setDefaultParameters (new 参数[],{,new 参数(“tableName"),});//,定义程序数据集列名   时间=columnNames  new 字符串(columnNum);   for  (int 小姐:=,0;,小姐:& lt;, columnNum;,我+ +),{   columnNames[我],=,“列#“,+,String.valueOf(我);   }   }//,实现其他四个方法   public  int  getColumnCount (), {   return  columnNum;   }      public  String  getColumnName (int  columnIndex), {   return  columnNames [columnIndex];   }      public  int  getRowCount (), {   init ();   return  valueList.size ();   }      public  Object  getValueAt (int  rowIndex, int  columnIndex), {   init ();   if  (columnIndex 祝辞=,colNum), {   return 零;   }   return  ((Object []), valueList.get (rowIndex)) (columnIndex);   }//,准备数据   public  void  init (), {//,确保只被执行一次   if  (valueList  !=, null), {   返回;   }//,保存得到的数据库表名   String  tableName =,参数[0].getValue () .toString ();//,构造SQL语句,并打印出来   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java怎么连接程序数据源