大家好,來請教各位
我要撈資料庫畫一個長條圖
SQL連線OK
長條圖顯示OK
但從SQL抓資料顯示到長條圖中(X)
都會跟我說
我試著要把值抓出來但都失敗.....
以下程式碼
@ManagedBean
public class ChartView implements Serializable {
 private BarChartModel barModel;
    private HorizontalBarChartModel horizontalBarModel;
  public int a[];
 public int b[];
 public int i=0;
/*
set/get
*/
    @PostConstruct
    public void init() {
        createBarModels();
    }
 private void createBarModels() {
        createBarModel();   
    }
     private void createBarModel() {
        barModel = initBarModel();          
        Axis xAxis = barModel.getAxis(AxisType.X);      
        Axis yAxis = barModel.getAxis(AxisType.Y); 
        yAxis.setMin(0);
        yAxis.setMax(200);
    }
    private BarChartModel initBarModel() {
        BarChartModel model = new BarChartModel();
        ChartSeries boys = new ChartSeries();
  for(int j=0;j<a.length;j++)
  {
      boys.set(a[j], b[j]);//畫長條圖
  }
        model.addSeries(boys); 
        return model;
    }
     
    public List<Purtxt> getPurData()
    {
        List<Purtxt> purlist=new LinkedList<Purtxt>();
        try
        {
         Class.forName("oracle.jdbc.driver.OracleDriver");
         Connection con=DriverManager.getConnection(....);      
      Statement st=con.createStatement();
       System.out.println(st);      
         ResultSet rs=st.executeQuery(
        "select pmn20,pmn31 from pmn_file where pmn31>0 and rownum<10"); 
         
     while(rs.next())
            { 
       a[i]=rs.getInt("pmn31");
       b[i]=rs.getInt("pmn20");//存SQL數據
       /*問題主要在這裡,想把值放進去,但發現他放不進去.....
        a[i],b[i]依舊是空值
        我有試著將a[i],b[i]直接存入數字(不使用SQL)她就可以顯示.....
        求把rs.getInt("pmn31")值存入a[i]的方法...感謝
       */
       i++;
            }
            rs.close();
            st.close();
            con.close();
        }
        //catch.....
        return purlist;
    }
 
}
感謝
如果你要使用int[], 就必須要先分配固定的記憶體空間(分配記憶體並非初始化), 假設各分配10個int:
public int a[]=new int[10];
public int b[]=new int[10];
但是, 你面對的可能是不一定長度的資料庫資料, 建議您使用List, Map,..., 例如,
List<Integer> a = new ArrayList<Integer>();
List<Integer> b = new ArrayList<Integer>();
然後
a.add(rs.getInt("pmn31"));
b.add(rs.getInt("pmn20"));
"我試過將陣列初始化a[i]={0}"
{0}的大括號等於是記憶體分配(new), 而且初始化a[0]為0
bizpro你好
試了您的方法,發現還是無法傳值......
.......
private BarChartModel initBarModel() {
        BarChartModel model = new BarChartModel();
        getPurData();
        ChartSeries boys = new ChartSeries();
        boys.setLabel("Boys");
	for(int j=0;j<a.length;j++)
	{
	    boys.set(c.get(j), d.get(j));
	      
	}
        model.addSeries(boys); 
        return model;
    }
    public List<Purtxt> getPurData()
    {
        List<Purtxt> purlist=new LinkedList<Purtxt>();
        try
        {
        //connect sql
 ResultSet rs=st.executeQuery(
"select pmn20,pmn31 from pmn_file where pmn31>0 and rownum<10  ");               
	   for(i=0;i<10;i++)
            {rs.next();
            Purtxt e=new Purtxt();  
		 purlist.add(e);
		c.add(rs.getInt("pmn31"));
       d.add(rs.getInt("pmn20"));
		//我值放進去他還是無法顯示...
        e.setCoun(rs.getInt("pmn31"));**
        //一定要這樣才能顯示到網頁,但這樣只能用table方式呈現
        無法畫長條圖.......
            }
           //connect close
        }
您有配置記憶體給c和d嗎?
List<Integer> c = new ArrayList<Integer>()
List<Integer> d = new ArrayList<Integer>()
如果你讀長條圖資料非得用int[],那再把c跟d轉回來就好了啊?
這樣可以嗎?
 public int a[]=new int[10];
 public int b[]=new int[10];
 List<Integer> c = new ArrayList<Integer>(10);
List<Integer> d = new ArrayList<Integer>(10);
之前只有a和b, 現在多出c和d...
如果您要配置記憶體給int[] a和b, 需設定固定數量的記憶體空間:
public int a[]=new int[10];
public int b[]=new int[10];
如果您要配置記憶體給ArrayList c和d, 不需設定固定數量的記憶體空間:
List<Integer> c = new ArrayList<Integer>();
List<Integer> d = new ArrayList<Integer>();
bizpro
現在有畫出東西了,謝謝
想問一下
那這樣我一定要先規定陣列大小
那如果我每天的資料量不一樣
(例如推出新產品,10樣變12樣)
是不是就只能自己改a[10]==>a[12]阿
還是我可以自動偵測資料庫的筆數去畫
所以我才建議要用不固定長度的ArrayList<Integer>, 而不是固定長度的int[]
List<Integer> c = new ArrayList<Integer>();
List<Integer> d = new ArrayList<Integer>();
//draw chart
.....
  ChartSeries boys = new ChartSeries();
        boys.setLabel("Boys");
	for(int j=0;j<a.length;j++)
	{
	    //boys.set(a[j], b[j]);
	     boys.set(c.get(j), d.get(j));
	}
    .....
    c.add(rs.getInt("pmn31"));
     d.add(rs.getInt("pmn20"));//store data
結果圖就出不來了.......
請問我有那裡沒寫到嗎?謝謝
可以不用ArrayList, int[],...:
ChartSeries boys = new ChartSeries();
boys.setLabel("Boys");
while(rs.next())
{ 
  boys.set(new Integer(rs.getInt("pmn31")).toString, new Integer(rs.getInt("pmn20")));
}
rs.close();
st.close();
con.close();
如果您要先取值給ArrayList以供後續利用, 也可:
//先取值:
//...資料庫ResultSet操作...
ArrayList<String> pmn31 = new ArrayList<String>();
ArrayList<Integer> pmn20 = new ArrayList<Integer>();
while(rs.next())
{ 
  pmn31.add(new Integer(rs.getInt("pmn31")).toString());
  pmn20.add(new Integer(rs.getInt("pmn20")));
}
rs.close();
st.close();
con.close();
//...
//之後利用:
ChartSeries boys = new ChartSeries();
boys.setLabel("Boys");
for (int i = 0; i < pmn31.size(); i++) {
  boys.set(pmn31.get(i), pmn20.get(i));
}
以上程式碼只做描述用. 請自行除錯.
bizpro
OK啦!!
感謝大大