📄 jdbop.java
字号:
public boolean createIndex(String idxName, String tblName, boolean isUnique, IdxField[] fields) {
m_errMsg = "";
String mySql = "Create "; //创建索引语句
try{
if (preDbObj == null) {//连接还没有建立,以缺省方式建立之
if (!createConnect()){
m_errMsg = preDbObj.m_errMsg;
return false;
}
return false;
}
//检查参数是否有效
if (idxName.length() == 0) {
m_errMsg = "空的索引名";
return false;
}
if (tblName.length() == 0) {
m_errMsg = "要建索引的表名无效:" + tblName;
return false;
}
if (preDbObj.hasIndex(tblName,idxName))
return true;
if (fields.length == 0) {
m_errMsg = "没有索引字段定义";
return false;
}
//创建索引
int loopCounter;
if (isUnique)
mySql += "Unique ";
mySql += "Index " + idxName + " on " + tblName + "(";
for (loopCounter = 0; loopCounter < fields.length; loopCounter++) {
if (loopCounter == 0)
mySql += fields[loopCounter].fieldName;
else
mySql += "," + fields[loopCounter].fieldName;
if (!fields[loopCounter].isAsc) {
//降序
mySql += " Desc";
}
}
mySql += ")";
//创建索引
Statement st = preDbObj.conn.createStatement();
//System.out.println(mySql);
st.execute(mySql);
return true;
}catch (Exception e) {
m_errMsg = e.toString() + "--\n" + mySql;
System.out.println(m_errMsg);
return false;
}
}
/**
* Title: 构造函数
* Description: 本函数按照数据库类型和URL初始化数据库
* @Param: type 数据库类型。可用常量在DbType类中定义
* @param: url 要连接的数据库。可用常量在DbUrl中定义
*/
public JdbOp(int type, int url) throws Exception {
if (!createConnect(type, url))
throw new Exception("无法建立数据库连接");
}
/**
* 构造函数
* @param Connection conn 数据库连接
*/
public JdbOp(Connection conn) throws Exception{
m_conn = conn;
m_statement = m_conn.createStatement();
}
/**
* @Title: 建立数据库连接对象
* @Description: 本函数按照数据库类型和URL初始化数据库
* @Param: type 数据库类型。可用常量在DbType类中定义
* @param: url 要连接的数据库。可用常量在DbUrl中定义
*/
boolean createConnect(int type, int url) throws Exception {
if (preDbObj != null)
preDbObj.finalize(); //已经存在对象,消除之
preDbObj = new JdbObj(type,url); //创建数据连接对象
if (preDbObj.active(DbConstStr.DEVPASSWORD)) //激活并建立数据库连接
m_conn = preDbObj.conn;
else
{m_errMsg = preDbObj.m_errMsg;
return false;
}
m_statement = m_conn.createStatement();
return true;
}
/**
* @Title: 建立数据库连接对象
* @Description: 本函数以缺省方式建立数据库连接对象
*/
boolean createConnect() throws Exception {
if (preDbObj != null)
preDbObj.finalize(); //已经存在对象,消除之
preDbObj = new JdbObj(); //创建数据连接对象
if (preDbObj.active(DbConstStr.DEVPASSWORD)) //激活并建立数据库连接
m_conn = preDbObj.conn;
else
{m_errMsg = preDbObj.m_errMsg;
return false;
}
m_statement = m_conn.createStatement();
return true;
}
/**
* 根据给出的参数创建数据库联接对象。本函数应和JdbOp()构造函数连用,只适用于cerp系统
* @param companyCode 要联接的公司号
* @param year 要联接的年号
* @param sysCode 要联接的子系统号
* @return 成功时返回true,否则返回false
* @throws Exception 抛出所有例外
*/
public boolean createConnect(String companyCode,String year,String sysCode) throws Exception {
if (preDbObj != null)
preDbObj.finalize(); //已经存在对象,消除之
preDbObj = new JdbObj(); //创建数据连接对象
if (preDbObj.active(DbConstStr.DEVPASSWORD,companyCode,year,sysCode)) //激活并建立数据库连接
m_conn = preDbObj.conn;
else
{m_errMsg = preDbObj.m_errMsg;
return false;
}
m_statement = m_conn.createStatement();
return true;
}
/**
* @Title: 建立数据库连接对象
* @Description: 本函数按照用户的请求方式建立数据库连接对象。这是cerp9的连接方式
* @param sessionCode: 会话代码
* @param sysCode: 请求的系统代码
*/
protected boolean createConnect(String sessionCode, String sysCode) {
try {
if (preDbObj != null)
preDbObj.finalize(); //已经存在对象,消除之
if (!cfgFile.equalsIgnoreCase(""))
preDbObj = new JdbObj(sessionCode,sysCode,cfgFile); //创建数据连接对象
else
preDbObj = new JdbObj(sessionCode,sysCode); //创建数据连接对象
if (preDbObj.active(DbConstStr.DEVPASSWORD)) //激活并建立数据库连接
m_conn = preDbObj.conn;
else
{m_errMsg = preDbObj.m_errMsg;
return false;
}
m_statement = m_conn.createStatement(preDbObj.m_scrollType,preDbObj.m_updateType);
// m_statement = m_conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
if (m_statement == null)
throw (new Exception("创建会话句并失败"));
this.sessionCode = sessionCode;
return true;
}catch (Exception e) {
m_errMsg = "JdbOp:createConnect: " + e;
return false;
}
}
/**
* 设置返回的结果集类型。该设置生效后,当前的会话句并将被关闭
* @param scrollType: 结果集光标滚动类型
* @param updateType: 结果集更新模式
*/
public void setRstType(int scrollType, int updateType) throws Exception{
m_errMsg = "";
if (m_statement != null)
m_statement.close();
m_statement = m_conn.createStatement(scrollType,updateType);
}
/**
* 生成结果集
* Description: 如果多次调用本功能将只能保存当前结果集
* @param mySql: 用于产生结果集的语句
*/
public ResultSet getData(String mySql) throws Exception {
m_errMsg = "";
try {
// System.out.println("Native Form: " + m_conn.nativeSQL(mySql));
ResultSet rs = m_statement.executeQuery(mySql);
return rs;
}
catch (Exception e) {
m_errMsg =this.getClass().getName() + ".getData(): " + e;
// return null;
System.out.println(m_errMsg+":\n" + mySql);
throw new Exception(m_errMsg);
}
}
/**
* 生成结果集
* Description: 本方法使用新的会话返回结果集。
* @param mySql: 用于产生结果集的语句
*/
public ResultSet getDataNew(String mySql) {
m_errMsg = "";
try {
// System.out.println("Native Form: " + m_conn.nativeSQL(mySql));
Statement st = m_conn.createStatement(preDbObj.m_scrollType,preDbObj.m_updateType);
ResultSet rs = st.executeQuery(mySql);
return rs;
}
catch (Exception e) {
m_errMsg =this.getClass().getName() + ".getDataNew(): " + e;
System.out.println(m_errMsg);
return null;
}
}
/**
* 执行Sql语句
* @param mySql: 要执行的Sql语句
*/
public boolean exeSql(String mySql) {
m_errMsg = "";
try{
Statement st = m_conn.createStatement();
st.execute(mySql);
st.close();
return true;
}catch (Exception e) {
m_errMsg =this.getClass().getName() + ".exeSql(): " + e + "语句如下:\n" + mySql;
System.out.println(m_errMsg);
return false;
}
}
/**
* 执行Sql语句,该语句使用新的会话,因而不破坏已经返回的结果集
* @param mySql: 要执行的Sql语句
*/
public boolean exeSqlNT(String mySql) {
m_errMsg = "";
try{
Statement st = m_conn.createStatement();
boolean rt = st.execute(mySql);
st.close();
return rt;
}catch (Exception e) {
m_errMsg =this.getClass().getName() + ".exeSql(): " + e;
System.out.println(m_errMsg);
return false;
}
}
/**
* 将结果集转换为Vector向量,向量由一维字符串数组组成。第零个数组为的字段名
* @param Rst:要转换的结果集
* @return 成功是返回向量,否则返回null;
*/
public Vector rst2Vector(ResultSet rst) throws Exception {
try {
Vector vRst = new Vector();
//获取表头信息
ResultSetMetaData rstm = rst.getMetaData();
//System.out.println("getmeta");
int colcount = rstm.getColumnCount(), i;
String colname[] = new String[colcount];
//形成字段名数组
for (i=1; i<=colcount; i++)
colname[i-1] = rstm.getColumnName(i); //字段名从1开始,数组应从0开始
vRst.addElement(colname); //字段名数组位于0位置
//System.out.println("cr field");
//形成记录集,从矢量的索引1开始
rst.beforeFirst();
while (rst.next())
{String row[] = new String[colcount];
for (i=0; i<colcount; i++)
{row[i] = rst.getString(i+1);
if (row[i]==null)
row[i] = "";
}
//System.out.println(row[0]);
vRst.addElement(row);
}
return vRst;
}catch (Exception e) {
return null;
}
}
/**
* 将结果集转换为Vector向量,向量由一维字符串数组组成。通过参数可以选择生成或不生成字段名头。
* @param rst 要转换的结果集
* @param hasTitle
* @return 成功时返回向量,否则返回null;
* @throws Exception 抛出所有错误
*/
public Vector rst2Vector(ResultSet rst, boolean hasTitle) throws Exception {
Vector vc = rst2Vector(rst);
if (!hasTitle)
vc.remove(0);
return vc;
}
/**
* 将结果集转换为Vector向量,向量由HashMap对象组成。每个HashMap对象由字段名作为键值,字段值字符串作为值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -