动态表数据库
1. 怎么从数据库中调出数据并生成动态图表
JSP页面中嵌入动态图表的两种方法 :在JSP页面中插入Applet小程序 ;通过javaBean动态生成图像。
JSP是一种广泛应用的网页设计技术 ,它是一种HTML和Java脚本混合的编程技术 ,它结合了HTML的静态特性和Java语言的动态能力 ,因此用它进行动态网页设计非常方便。在进行图像处理时 ,一般处理静态图片非常容易 ,但是 ,在实际应用中常常需要动态地盯乎在网页中生成二维的图形.
基于JFreeChart开发的一个时序图的绘制。代码如下:
实例中createDataset()方法用于创御郑建数据集合对象。时序图的数据集合与其他数据集合不同,它需要添加一个时间段内的镇则颂所有数据,通常采用TimeSeries类进行添加。该实例中通过Math类的random()方法进行随机生成。
import java.awt.*;
import java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import
java.io.DataInputStream;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.net.URL;
import
java.net.URLConnection;
import java.text.DateFormat;
import
java.text.ParseException;
import java.text.SimpleDateFormat;
import
java.util.Calendar;
import java.util.Date;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.Timer;
import org.jfree.chart.*;
import
org.jfree.chart.annotations.CategoryTextAnnotation;
import
org.jfree.chart.axis.CategoryAnchor;
import
org.jfree.chart.axis.CategoryAxis;
import
org.jfree.chart.axis.CategoryLabelPositions;
import
org.jfree.chart.axis.DateAxis;
import
org.jfree.chart.axis.DateTickUnit;
import
org.jfree.chart.axis.DateTickUnitType;
import
org.jfree.chart.axis.ValueAxis;
import
org.jfree.chart.labels.;
import
org.jfree.chart.plot.CategoryPlot;
import
org.jfree.chart.plot.PlotOrientation;
import
org.jfree.chart.plot.XYPlot;
import
org.jfree.chart.renderer.category.BarRenderer;
import
org.jfree.chart.title.TextTitle;
import
org.jfree.data.category.CategoryDataset;
import
org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.chart.axis.NumberAxis;
import
org.jfree.data.category.DefaultCategoryDataset;
import
org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import
org.jfree.data.gantt.TaskSeriesCollection;
import
org.jfree.data.time.Day;
import org.jfree.data.time.Second;
import
org.jfree.data.time.TimeSeries;
import
org.jfree.data.time.TimeSeriesCollection;
import
org.jfree.data.xy.XYDataset;
public class shixutu extends JApplet {
//PLOT_FONT是一静态的字体常量对象,使用此对象可以避免反复用到的字体对象被多次创建
private static final Font PLOT_FONT = new Font("黑体", Font.ITALIC ,
18);
JFreeChart chart;
//创建数据动态更新的监听
class DataGenerator extends Timer
implements ActionListener {
private static final long serialVersionUID =
3977867288743720504L;
String
equID;
//设备ID号
int
totalTask;
//任务数
String[][]
strTask;
//任务情况
public void
actionPerformed(ActionEvent actionevent) {
addTotalObservation();
} DataGenerator()
{
super(1000,
null);
addActionListener(this);
System.out.println("super");
}
}
//将更新的数据添加到chart中
private void addTotalObservation()
{
System.out.println("addTotalObservation");
//设置新的数据集
chart.getXYPlot().setDataset(createDataset());
//通知Jfreechart
数据发生了改变,重新绘制柱状图
if
(chart != null)
{
chart.fireChartChanged();
}
}
private static void
processChart(JFreeChart chart)
{
//设置标题字体
chart.getTitle().setFont(new Font("隶书", Font.BOLD,
26));
//设置背景色
chart.setBackgroundPaint(new
Color(252,175,134));
XYPlot plot = chart.getXYPlot();
//获取图表的绘制属性
plot.setDomainGridlinesVisible(false);
//设置网格不显示
//获取时间轴对象
DateAxis dateAxis = (DateAxis)
plot.getDomainAxis();
dateAxis.setLabelFont(PLOT_FONT);
//设置时间轴字体
//设置时间轴标尺值字体
dateAxis.setTickLabelFont(new
Font("宋体",Font.PLAIN,12));
dateAxis.setLowerMargin(0.0);
//设置时间轴上显示的最小值
//获取数据轴对象
ValueAxis valueAxis =
plot.getRangeAxis();
valueAxis.setLabelFont(PLOT_FONT);
//设置数据字体
DateFormat format = new SimpleDateFormat("mm分ss秒");
//创建日期格式对象
//创建DateTickUnit对象
DateTickUnit dtu = new
DateTickUnit(DateTickUnitType.SECOND,30,format);
dateAxis.setTickUnit(dtu);
//设置日期轴的日期标签 } //将结果输出在文件中
private static
void writeChartAsImage(JFreeChart chart)
{
FileOutputStream fos_jpg =
null;
try
{
fos_jpg = new
FileOutputStream("D:\\test\\shixutu.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1, chart, 400, 300,
null);
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
fos_jpg.close();
} catch (Exception e)
{
}
}
}
//创建数据集合对象
public static XYDataset createDataset()
{
//实例化TimeSeries对象
TimeSeries timeseries = new
TimeSeries("Data");
Second second = new Second();
//实例化Day
double d =
50D;
//添加一年365天的数据
for (int i = 0; i < 500; i++)
{
d = d + (Math.random() - 0.5) * 10;
//创建随机数据
timeseries.second(day, d);
//向数据集合中添加数据
second = (Second)
second.next();
}
TimeSeriesCollection timeSeriesCollection =
new
TimeSeriesCollection(timeseries);
//返回数据集合对象
return timeSeriesCollection; } //Applet程序初始化
public void init()
{
// 1.
得到数据
XYDataset dataset =
createDataset();
// 2.
构造chart
chart =
ChartFactory.createTimeSeriesChart(
"时序图示范", //
图表标题
"时间", //
目录轴的显示标签--横轴
"数值", //
数值轴的显示标签--纵轴
dataset, //
数据集
false,
false, //
是否生成工具
false //
是否生成URL链接
);
// 3.
处理chart中文显示问题
processChart(chart);
// 4.
chart输出图片
//writeChartAsImage(chart);
// 5. chart
以swing形式输出
//6.使用applet输出
ChartPanel chartPanel = new
ChartPanel(chart);
chartPanel.setPreferredSize(new
java.awt.Dimension(800,500));
getContentPane().add(chartPanel); (new
DataGenerator()).start();
}
public void
paint(Graphics g)
{
if
(chart != null)
{
chart.draw((Graphics2D) g,
getBounds());
}
}
public void destroy() {
}
}
2. 如何创建动态的sqlite数据库表
public FontDaoImpl(){
//在简腔构造方法里边进行判断,看是否在sqlite里边迅租有tb_font这张表,如果没有的话,在sqlite里面自动创建表
try {
conn = DBConnection.getConnection(Constants.DATABASE_PATH_STYLE);
final int cnt = conn
.prepareStatement(
"SELECT COUNT(*) as CNT FROM sqlite_master where type='table' and name='TB_FONT'"拦昌衫)
.executeQuery().getInt(1);
if (cnt != 1) {
statement = conn.createStatement();
statement
.execute("CREATE TABLE TB_FONT (id integer primary key autoincrement, name NVARCHAR2(20),description NVARCHAR2(1000),fontSize number(20),textBorderColor NVARCHAR2(10),textBackgroundColor NVARCHAR2(10),textColor NVARCHAR2(10),isDefault NVARCHAR2(4))");
//statement.execute("CREATE UNIQUE INDEX id ON TB_CURVELINE (id)");
statement.close();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBConnection.closeConnection(conn);
}
}
3. 如何设计动态字段的产品数据库表
可以采用四种技术:
动态增加数据库表字段
预留足够的空白字段,运行时作动态影射
用xml格式保存在单字段里
改列为行,用另外一个表存放定制字段
【一】
现在我们来分析一下四种技术的优劣,不过首先可以排除的是第一点动态增加字段的方法,因为在实际操作时候几乎是不可能的(sqlserver太慢,oracle索性不支持),基本可以不讨论就排除。剩耐段下后三点。
【二】
先来讨论预留空白字段的方法,基本原理就是在数据库表设计的时候加入一些多余的字段,看下面的代码:
CREATE TABLE Sample(
name varchar(12),field0 varchar(1),field1 varchar(1),fieldN varchar(1)
}
然后看实际运行时候的需要,动态分配字段给系统使用,也许需要一个这样的结构来描述分配情况:
public class Available
{
public int ;
public Hashtable ;
}
也许某一时刻的数据状况是这样的: =3,哈西表包含内容是("field0"="SomeId", "field1"="AnyName","field2=IsOk")
现在的问题是如果要配合Hibernate,如何来处理?以上段的数据使用状况为例子,如果我们的类定义是这样:
public class Entity01、{
public string Name;
public string SomeId;
public string AnyName;
public bool IsOk;
}
也许只需要修改一下xxx.hbm.xml,把 SomeId 和 field0
做成对应就ok了。但是在运行时我们怎么知道会有这样的类定义?除非我们做动态代码生成,自动编译也许可以,但是问题也许就到其他方面去了;如果我们不用动态定义,那么类就只能是这样:
public class Entity01、{
public string Name;
public Hashtable ;
}
使用的时候,用 entity01..setValue("AnyName", "boss")
的方式来引用,也许这样是修改最少的了,但是问题是Hibernate不支持这样的方法。
【三】
再来讨论单字段存储的方法,我们使用这样的数据库表定义
CREATE TABLE Sample
(
Name varchar(12),Xml CLOB(102400) // 仅作说明而已
)
然后对应这样的类定义
public class Entity01、{
public string Name;
public string Xml;
public Hashtable ;
}
我们的代码就可以这样使用:string id =
entity01..getValue("SomeId")
了。这样解决看起来很不错,不仅不需要Available表,而且看起来Hibernate对它的支持也很完美,但是致命的问题在于:如果保持高效的查询?除非数据库系统本身对此有支持,否则就只能用低效的substring或者like做查询,这在大批量数据中根本就不可行。
是不是折衷一下,把两种方法的优点和起来?问题有来了:怎么保持两者之间数据的同步?难道要我们用存储过程去解析xml内容?
所以,一个两难的问题,需要我们认真去解决。我们通过认真的需求分析,也许可以减少可变字段的数量,但是只要有一个可变字段或者可变的可能性存在,我们始终要去解决这个两难的问题。
期待继续讨论。
【四】
还有一种方法就是改列为行,用另外一个表存放扩展字段,定义可以如下:
CREATE
TABLE
(
idSample Integer,fieldName varchar(30),fieldValue varchar(100)
)
其中idSample关联到Sample表的id字段(我没有写出来)。这样的话,Hibernate很容易支持,也可以支持Sql的查询,而且可以支持把内容放到Hashtable中去,看起来是目前最好的方式了。但是在大容量数据的时候,表的昌中誉数据会是主表数据量的N倍(看定制的字段数目多少而定),同样存在有很严重的培如性能问题。
4. VB6.0动态创建数据库和表
引用:Microsoft DAO 3.6 Object Library
创建数据库:
Set f = DBEngine.CreateDatabase(App.Path + "\DB.mdb", dbLangChineseSimplified)'(仅适用键散竖于Access)
创建表要用到SQL语句,如果你有这方面的基础就会很容易做到的。
首先,连接到数据库:
Set db = OpenDatabase(App.Path + "\DB.mdb")
然后执行创建表的SQL语句:
db.Execute SqlString'SqlString是创稿大建表的SQL语句
如果你没有SQL创建表的语掘樱句基础,建议先学一学,很简单的。
Create Table ……
如果要Q,用网络Hi给我留言
5. 请问怎样动态生成数据库中的表
首先你的数据库要生成丛哗目录树的库的结构是什么样的呢?
你这样比较难回答啊。
最普遍的就是
目录树表结构 treetable
父id 名称 所属父类id
1 我是1 0
2 我是2 0
3 我是3 1
4 我是4 1
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
set rscat = server.createobject("adodb.recordset")
sqlcat="select * from treetable where 所属父类id=0"
rscat.open sqlcat,conn,1,1
do while not rscat.eof
colparam1=rscat("父id")
softcat="<tr><td width=""20%""><strong></strong></td><td width=""*"">"
set rsclass = server.createobject("adodb.recordset")
sqlclass="select * from treetable where 所属父类id=" &colparam1& ""
rsclass.open sqlclass,conn,1,1
if not(rsclass.bof and rsclass.eof) then
do while not rsclass.eof
softclass="---"&rsclass("名称")&" "
softclass2=softclass2+softclass
rsclass.movenext
loop
else
softclass2="暂无子类"
end if
rsclass.close
set rsclass=nothing
catclasslist=catclasslist+softcat+softclass2+"</td></tr>"
softclass2=""
rscat.movenext
loop
rscat.close
set rscat=nothing
response.write catclasslist
最后得出的结果应渗卜行该弊并是
我是1
---我是3
---我是4
我是2
---暂无子类
有些代码你可能需要自己修改一下。
希望对你有帮助。
6. mysql的静态表和动态表的区别,MyISAM和InnoDB的区别
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),销咐以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。
InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。
MyISAM与InnoDB的区别是什么?
1、 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
2、 存储空间
MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
3、 可移植性、备份及恢复
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行亏亩纯操作。
InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqlmp,在数据量达到几十G的时候就相对痛苦了。
4、 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
5、 AUTO_INCREMENT
MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
6、 表锁差异
MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
7、 全文索引
MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
8、 表主键
MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
9、 表的具体行数
MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是耐迟在加了wehre条件后,myisam和innodb处理的方式都一样。
10、 CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。
11、 外键
MyISAM:不支持
InnoDB:支持
通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。
7. 如何用vb动态创建数据库的表
For i = 2 To 6
tbl.Columns.Append "MyField"虚丛 & i, adInteger '表的第i个字段滚誉差
Next i
可以大皮使用循环语句创建表
8. 如何在数据库动态建表
动态建表首先需要了解Statement类
Statement 对象用 Connection 的方法createStatement 创建,例如
//创建连接对象
Connection connection = DBUtil.getConnection();
//创建Statement对象
Statement statement=connection.createStatement();
创建完之后通过执行以sql语句为参数的Statement的方法,来执行sql语句完成对数据库的操作。
Statement共有三种方法,分别是 executeQuery、executeUpdate 和execute。
方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。
方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQLDDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。如果没有进行操作就返回-1。
方法 execute用于执行返回多个结果集、多个更新计数或二者组合的语句,我们不会需要该高级功能,所以本概述就不进行介绍了。
动态建表实例:
String tablename="WrongExpression";
sql = "create table "+tablename+"(time varchar(255),expression varchar(20),result varchar(20))";
int result = stmt.executeUpdate(sql);// executeUpdate语句会返回一个受影响的行数,如果返回-1就没有成功
9. 动态数据库表创建是什么意思
类似用程宽慎序执行旁巧物这种sql语运液句,CREATE TABLE A(
A# varchar(10) PRIMARY KEY,
ANAME varchar(8) NOT NULL,
QTY varchar(14),
CITY varchar(20)
)
10. 什么叫动态数据库,什么叫静态数据库
静态数据是基本保持稳定的数据,比如一个单位的名称、员工信息、系统参数等
动态数据是随着时间的发展,常常变化的数据,比如日销售额、年销售额等等。
在数据分析中具体表现来看就是,如果这个数据库的数据仅仅只有一个时间节点的,即可理解为静态数据,又叫做横截面数据,并且采用静态数据的分析方法分析即可。
如果该数据库中的数据包含不同时间进程的,比如时间包含多个月份,或者包含多个年份这样的数据,就理解为动态数据,又叫纵截面数据,需要采用面板数据分析方法分析