📄 generaldao.java
字号:
package quanquanqi;
import java.sql.*;
import javax.sql.*;//JDBC API
//import javax.naming.*;
import java.util.*;//提供collection类的访问
import java.io.*;
public class GeneralDAO
{
Connection con;
Statement stmt;
ResultSet resultSet;
ResultSetMetaData resultMD;
public GeneralAggregateVO gvo = new GeneralAggregateVO();
//------------------------------------------------------------------------------
//构造函数:
public GeneralDAO() {
this("mining1"); //以默认AlarmsTable构造GeneralDAO对象
}
//-----------------
public GeneralDAO(String datasourceName) {
try {
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+ datasourceName;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url, "", "");
System.out.println("Succees ");
}
catch (SQLException e) {
System.out.println("SQLException in GeneralDAO: ");
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
//------------------------------------------------------------------------------
public void executeQuery( String query ) throws SQLException
{//执行查询并储存结果到local ResultSet
System.out.println("Preparing and executing query ...");
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
resultSet =stmt.executeQuery(query);
resultMD =resultSet.getMetaData();
System.out.println("Loading results ...");
loadResults();//gvo包含了已执行的数据访问对象的查询结果
}
//------------------------------------------------------------------------------
public String getQuery( String fn )
{//从文件fn中读取查询字符串,并返回
String buffer = null; //数据缓冲区
String retval = null; //返回查询字串
try
{
BufferedReader reader = new BufferedReader(new FileReader(fn));//打开文件
buffer =reader.readLine();//读文件第一行
while( buffer!=null )
{
if (retval == null)
retval = buffer;
else
retval += buffer;//append
buffer = reader.readLine();//继续读文件
}
reader.close();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException in getQuery: " + e.getMessage());
}
catch (IOException e)
{
System.out.println("IOException in getQuery: "+ e.getMessage());
}
finally
{ return retval;}
}
//------------------------------------------------------------------------------
public void setAggregateVO() throws SQLException//该方法将内部ResultSet对象设置为内部聚合值对象的值
{//同步ResultSet对象与内部聚合值对象(gvo).ResultSet用来更新数据库,将gvo的更新反映到ResultSet对象上
for (int n = 0; n < gvo.getRowCount(); n++)//行遍历
{
gvo.absolute(n);//定位gvo行, gvo行号从0开始//聚合值的行号从0开始,而resultset的行号从1开始
if (gvo.getUpdateStatus( n ))//判断该行是否更新
{ resultSet.absolute( n+1 );//定位resultSet的相应行,resultSet行号从1开始
for ( int z=0; z < gvo.getColumnCount(); z++)//列遍历
{
resultSet.updateObject((z+1),gvo.getObject(z));//更新resultSet该行各列元素
}
}//if
}//for n
}
//------------------------------------------------------------------------------
public void loadAggregateVO( GeneralAggregateVO gvo) throws SQLException
{//将数据访问对象(GeneralDAO)和作为参数传入的聚合值对象(gvo)的值同步起来
this.gvo= gvo;
setAggregateVO();//使内部ResultSet与内部聚合值对象的值同步
}
//------------------------------------------------------------------------------
public void deleteRow (int row ) throws SQLException
{//从内部ResultSet中删除指定行,输入参数采用从0计数的方法
resultSet.absolute(row + 1);
resultSet.deleteRow();
}
//------------------------------------------------------------------------------
public void applyUpdates() throws SQLException
{//读取gvo中的更新.并用内部ResultSet的updateable ResultSet特性将更新应用于数据库
for (int n=0; n < gvo.getRowCount(); n++)//行遍历
{
gvo.absolute(n);//定位行
resultSet.absolute(n + 1);//定位相应行
//分insert与update操作
if (gvo.getInsertStatus(n))//是否需要插入
{
resultSet.moveToInsertRow();
}
if (gvo.getUpdateStatus(n))//是否需要更新(包括update与insert)
{
for(int z=0; z < gvo.getColumnCount(); z++)//列遍历
{
if (gvo.getUpdateStatus(n,z))//该列更新?
resultSet.updateObject( (z+1),gvo.getObject(z));//更新该列
}//for z
if (gvo.getInsertStatus(n))//该列插入?
resultSet.insertRow();//插入该列到数据库
else
resultSet.updateRow();//更新该列到数据库
}
}
}//for n
//------------------------------------------------------------------------------
public void loadResults(ResultSet rs) throws SQLException
{//将内部ResultSet的结果装载到内部GeneralAggregateVO对象中
gvo.clear();//清除内部聚合值对象的内容
for (int c=1; c <= resultMD.getColumnCount();c++)//收集ResultSet中的列标签
gvo.setColKey( resultMD.getColumnLabel( c ),(c-1));//列标签和列号
while ( rs.next())//行遍历
{
for (int n = 1; n <= resultMD.getColumnCount(); n++)
//JDBCTypeMapper.getColumnDataString()实现数据类型转换(转换至String类)
gvo.addObject(JDBCTypeMapper.getColumnDataString(n, rs));
gvo.addRow();
}
}
public void loadResults() throws SQLException//重载
{
loadResults( resultSet );
}
//------------------------------------------------------------------------------
public void clearUpdates()
{//清除聚合值对象的更新标志,不对数据库做任何操作
gvo.clearUpdates();
}
//------------------------------------------------------------------------------
public GeneralAggregateVO getGeneralAggregateVO()
{//返回GeneralDAO实例的聚合值对象的内部引用
return gvo;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -