JAVA数据库处理(连接,数据查询,结果集返回)

package  john
import java.io.IOException;
import java.util.*;
public class QueryDataRow 
{
    public HashMap hashColumn;

    private String[] data;
    public QueryDataRow() 
    {
        super();
    }
    public String get(String str) throws IOException 
    {
        int colindex = ((Integer) (hashColumn.get(str))).intValue();
        return DBUtil.deTransSql(data[colindex]);
    }
    public void setData(String[] s) 
    {
        this.data = new String[s.length];
        for (int i = 0; i < s.length; i++) 
        {
            this.data[i] = s[i];
        }
    }
    public void resetColumn(String columnName, String columnValue) 
    {
        int colindex = ((Integer) (hashColumn.get(columnName))).intValue();
        data[colindex] = columnValue;
    }
}
package john
import java.util.*;
import java.sql.*;
public class QueryData 
{
    private ArrayList rows;
    public QueryData() 
    {
        rows = new ArrayList();
        rows.clear();
    }
    public boolean setData(ResultSet rs) throws Exception 
    {
        boolean ret = false;
        try 
        {
            ResultSetMetaData rsdata = rs.getMetaData();
            int ColumnCount = rsdata.getColumnCount();
            String Columns[] = new String[ColumnCount];

            HashMap hashColumn = new HashMap();

            for (int i = 0; i < ColumnCount; i++) 
            {
                Columns[i] = rsdata.getColumnName(i + 1);
                hashColumn.put(Columns[i], new Integer(i));
            }
            while (rs.next()) 
            {
                String rowdata[] = new String[ColumnCount];

                for (int i = 0; i < ColumnCount; i++) 
                {
                    String column = Columns[i];

                    String value = rs.getString(column);

                    value = (value != null ? value : "");
                    rowdata[i] = value;
                }

                QueryDataRow row = new QueryDataRow();
                row.hashColumn = hashColumn;
                row.setData(rowdata);
                rows.add(row);
            }

            ret = true;
        } 
        catch (Exception e) 
        {
            ret = false;
            throw e;
        }
        return ret;
    }
    public boolean removeRow(int index) throws Exception 
    {
        try 
        {
            if (rows != null) 
            {
                rows.remove(index);
                return true;
            } 
            else 
            {
                return false;
            }
        } 
        catch (Exception ex) 
        {
            throw ex;
        }
    }
    public QueryDataRow getRow(int index) throws Exception 
    {
        try 
        {
            if (rows != null) 
            {
                QueryDataRow row = new QueryDataRow();
                return (QueryDataRow) rows.get(index);
            } 
            else 
            {
                return null;
            }

        } catch (Exception ex) 
        {
            throw ex;
        }
    }
    public int size() 
    {
        if (rows != null) 
        {
            return rows.size();
        } 
        else 
        {
            return 0;
        }
    }
}
package john
import java.io.IOException;
import java.sql.*;
import javax.sql.*;

public class DBUtil 
{
 
 public static final String STRING = "0";
 public static final String DATE = "1";
 public static final String INT = "2";
 
 private Connection conn = null;  //DB接続

 private ResultSet sqlResult = null;
 private DataSource ds = null;
 Statement sqlStatement = null;
 
    /* エラー情報*/
    public String errStr = null; 

 private static Logger logger = Logger.getLogger(DBUtil.class.getName());
 
 static 
 {
  try 
  {
   Class.forName("oracle.jdbc.driver.OracleDriver");
  } 
  catch (Exception ex) 
  {
   ex.printStackTrace();
  }
 } 
 public DBUtil(Connection pConn)
 {
  conn = pConn;  //DB接続

  sqlResult = null;
  ds = null;
  sqlStatement = null;
  errStr = new String("");
 }
  public Connection connOpen() throws Exception
  {
   try 
   {
    if (Common.CONN_FLAG == true)
    {
      String strDbIp = Common.getData("other.dbhost");        
      String strDbPort = Common.getData("other.dbport");      
      String strDbName = Common.getData("other.dbname");     
      String strUsername = Common.getData("other.dbuser");    
      String strPassword = Common.getData("other.dbpswd");   
      String strDBUrl = "jdbc:oracle:thin:@"+strDbIp+":"+strDbPort+":"+strDbName;
      conn = DriverManager.getConnection(strDBUrl, strUsername, strPassword);
     }
    conn.setAutoCommit(false);
    sqlStatement = null;
    sqlStatement = conn.createStatement();
    return conn;
   } 
   catch (SQLException e) 
   {
             String strErr = "SQL connection error: /n"
              + e.getMessage();
             logger.error("DBUTIL",strErr);
             this.errStr += strErr;
    throw new BaseException("syserr");   
   }
  }
 public void connClose() throws Exception
 {
  try 
  {
   if(sqlStatement != null)
    sqlStatement.close();
   sqlStatement = null;
   if(conn != null)
    if(!conn.isClosed())
     conn.close();
   conn = null;
  } 
  catch (SQLException ex) 
  {
   logger.error("DBUTIL",ex.getMessage());
   logger.error("DBUTIL","DB closing exception!");
   throw new BaseException("syserr");
  }
 }
 public QueryData selQuery(String strQuerySQL) throws Exception
 {
  try
  {
   QueryData qd = new QueryData();
   Statement tmpSQLStatement = conn.createStatement();
   tmpSQLStatement.execute(transSql(strQuerySQL));
   sqlResult = null;
   sqlResult = tmpSQLStatement.getResultSet();
   qd.setData(sqlResult);
   if(sqlResult != null) sqlResult.close();
   sqlResult = null;
   tmpSQLStatement.close();
   tmpSQLStatement = null;
   logger.error("DBUTIL",strQuerySQL);
   return qd;
  } 
  catch(Exception e)
  {
   logger.error("DBUTIL","SQL error: " + strQuerySQL);
   logger.error("DBUTIL",e.getMessage());
   throw new BaseException("syserr");   
  } 
  finally
  {
  }
 }
 public QueryData selQureyPrep(String pQuerySql,String[][] conditionlist) throws Exception
 {
  try
  {
   QueryData qd = new QueryData();
   PreparedStatement prep = conn.prepareStatement(transSql(pQuerySql));
   int cnt = 0;
   for (int x = 0; x < conditionlist.length;x++)
   {
    boolean isFalse = true;
    while (isFalse)
    {
     int mode = 0;
     String strMode =conditionlist[x][0];
     if (!Common.checkNull(strMode))
     {
      isFalse = false;
      break;
     }
     else
     {
      cnt++;
      mode = Integer.parseInt(strMode);
     }
     switch (mode) 
     {
     case 0:
      prep.setString(cnt,String.valueOf(conditionlist[x][1]));
      isFalse = false;
      break;
     case 1: 
      prep.setDate(cnt,Date.valueOf(conditionlist[x][1]));
      isFalse = false;
      break;
     case 2:
      prep.setInt(cnt,Integer.parseInt(conditionlist[x][1]));
      isFalse = false;
      break;
     default :
      isFalse = false;
      break;
     }      
    }
   }
   sqlResult = null;
   sqlResult = prep.executeQuery();
   qd.setData(sqlResult);  
   if(sqlResult != null) sqlResult.close();
   sqlResult = null;
   prep.close();
   prep = null;
   logger.error("DBUTIL",pQuerySql);
   return qd;
  } 
  catch(Exception e)
  {
   logger.error("DBUTIL","SQL error: " + pQuerySql);
   logger.error("DBUTIL",e.getMessage());
   throw new BaseException("syserr");   
  } 
  finally
  {
  }  
 }
  public ResultSet selQuery_large(String strQuerySQL) throws Exception
  {
   try
   {
     sqlStatement.execute(transSql(strQuerySQL));   
     sqlResult = sqlStatement.getResultSet();
     logger.error("DBUTIL",strQuerySQL);
     return sqlResult;
   }
   catch(SQLException e)
   {
     logger.error("DBUTIL","SQL error: " + strQuerySQL);
     logger.error("DBUTIL",e.getMessage());
     throw new BaseException("syserr");
   }
   finally
   {
   }
  }  
 public void doQuery(String strQuerySQL) throws Exception 
 {
  try
  {
   Statement SQLStatement = conn.createStatement();

   SQLStatement.executeUpdate(transSql(strQuerySQL));
   logger.error("DBUTIL",strQuerySQL);
   SQLStatement.close();
   SQLStatement = null;

  }
  catch(SQLException e)
  {
   logger.error("DBUTIL","SQL error: " + strQuerySQL);
   logger.error("DBUTIL",e.getMessage());
   throw new BaseException("syserr");
  }
  finally
  {
  }
 }
 public void doQueryPrep(String pQuerySql,String[][] conditionlist) throws Exception 
 {
  try
  {
   PreparedStatement prep = conn.prepareStatement(transSql(pQuerySql));
   int cnt = 0;
   for (int x = 0; x < conditionlist.length;x++){
    boolean isFalse = true;
    while (isFalse){
     int mode = 0;
     String strMode =conditionlist[x][0];
     if (!Common.checkNull(strMode)){
      isFalse = false;
      break;
     }else{
      cnt++;
      mode = Integer.parseInt(strMode);
     }
     switch (mode) {
     case 0:
      prep.setString(cnt,String.valueOf(conditionlist[x][1]));
      isFalse = false;
      break;
     case 1: 
      prep.setDate(cnt,Date.valueOf(conditionlist[x][1]));
      isFalse = false;
      break;
     case 2:
      prep.setInt(cnt,Integer.parseInt(conditionlist[x][1]));
      isFalse = false;
      break;
     default :
      isFalse = false;
      break;
     }      
    }
   } 
   prep.executeUpdate();
    logger.error("DBUTIL","SQL error: " + pQuerySql);
   prep.close();
   prep = null;

  }
  catch(SQLException e)
  {
    logger.error("DBUTIL","SQL error: " + pQuerySql);
   logger.error("DBUTIL",e.getMessage());
   throw new BaseException("syserr");
  }
  finally
  {
  }
 } 
 public boolean doCommit() throws Exception
 {
  try
  {
   conn.commit();
   return true;
  }
  catch (SQLException e)
  {
     logger.error("DBUTIL","SQL commit error! ");
      logger.error("DBUTIL",e.getMessage()); 
   conn.rollback();
   throw new BaseException("syserr");
  }
  finally
  {
  }
 }
 public void doRollback() throws Exception
 {
  try
  {
   if(conn != null)
    conn.rollback();
  }
  catch (Exception e)
  {
      logger.error("DBUTIL","SQL rollback error! " );
      logger.error("DBUTIL",e.getMessage()); 
  }   
 }
 public static String transSql(String strInput) throws IOException
 {
  String strOutput = strInput;
  //return EucJpFile.toJIS(strOutput);
  return strOutput;
 }
 public static String deTransSql(String strInput) throws IOException
 {
  String strOutput = strInput;
  return strOutput;
  //return EucJpFile.toCp932(strOutput);
 }
} 

 

以下是JAVA对DB操作的一种实现方式,与大家一起共享,对初学者可能有一定的帮助,当然对高手而 言,用处就不见的大了,欢迎大家提出更好的意见和建议.为了商业规则,代码的注释去掉了,请大家见谅.

 

转载于:https://www.cnblogs.com/huidaoli/p/3208048.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java数据库查询结果的输出 摘自:北京海脉信息咨询有限公司   利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。 类Vector:   定义如下: public class Vector extends AbstractList implements List , Cloneable , Serializable{…} 类JTable:   JTable组件是Swing组件中比较复杂的小件,隶属于javax.swing包,它能以二维表的形式显示数据。类Jtable: 定义如下: public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible{…} 类AbstractTableModel:   定义如下: public abstract class AbstractTableModel extends Object implements TableModel, Serializable{…}   生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面三个方法: public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column);   我们可以建立一个简单二维表(5×5): TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 5; } public int getRowCount() { return 5;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); 数据库及其连接方法:   我们采用Sybase数据库数据库存放在数据库服务器中。路径为:D:WORKER,数据库名为:worker.dbf。具有以下字段: 字段名 类型 Wno(职工号) VARCHAR Wname(职工名) VARCHAR Sex(性别) VARCHAR Birthday(出生日期) DATE Wage(工资) FLOAT   要连接数据库,需使用java.sql包中的类DriverManager。此类是用于管理JDBC驱动程序的实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据库访问登录超时等方法。   具体连接方法如下:   定位、装入和链接SybDriver类。 driver="com.sybase.jdbc.SybDriver"; SybDriver sybdriver=(SybDriver) Class.forName(driver).newInstance();   注册SybDriver类。 DriverManager.registerDriver(sybdriver);   取得连接(SybConnection)对象引用。 user="sa"; password=""; url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER"; SybConnection connection= (SybConnection)DriverManager.getConnection (url,user,password); 建立完连接后,即可通过Statement接口进行数据库查询与更改。 实现方法:   对象声明。   AbstractTableModel tm;   //声明一个类AbstractTableModel对象   JTable jg_table;//声明一个类JTable对象   Vector vect;//声明一个向量对象   JScrollPane jsp;//声明一个滚动杠对象   String title[]={"职工号","职工名",   "性别","出生日期","工资"};   //二维表列名   定制表格。   实现抽象类AbstractTableModel对象tm中的方法:   vect=new Vector();//实例化向量   tm=new AbstractTableModel(){   public int getColumnCount(){   return title.length;}//取得表格列数   public int getRowCount(){   return vect.size();}//取得表格行数   public Object getValueAt(int row,int column){   if(!vect.isEmpty())   return   ((Vector)vect.elementAt(row)).elementAt(column);   else   return null;}//取得单元格中的属性值   public String getColumnName(int column){   return title[column];}//设置表格列名   public void setValueAt   (Object value,int row,int column){}   //数据模型不可编辑,该方法设置为空   public Class getColumnClass(int c){   return getValueAt(0,c).getClass();   }//取得列所属对象类   public boolean isCellEditable(int row,int column){   return false;}//设置单元格不可编辑,为缺省实现   };   定制表格:   jg_table=new JTable(tm);//生成自己的数据模型   jg_table.setToolTipText("显示全部查询结果");   //设置帮助提示   jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   //设置表格调整尺寸模式   jg_table.setCellSelectionEnabled(false);   //设置单元格选择方式   jg_table.setShowVerticalLines(true);//   设置是否显示单元格间的分割线   jg_table.setShowHorizontalLines(true);   jsp=new JScrollPane(jg_table);//给表格加上滚动杠   显示查询结果。   连接数据库:已给出。   数据库查询:   Statement stmt=connection.createStatement();   ResultSet rs=stmt.executeQuery   ("select * from worker");   显示查询结果:   vect.removeAllElements();//初始化向量对象   tm.fireTableStructureChanged();//更新表格内容   while(rs.next()){   Vector rec_vector=new Vector();   //从结果中取数据放入向量rec_vector中   rec_vector.addElement(rs.getString(1));   rec_vector.addElement(rs.getString(2)); rec_vector.addElement(rs.getString(3)); rec_vector.addElement(rs.getDate(4));   rec_vector.addElement(new Float(rs.getFloat(5)));   vect.addElement(rec_vector);   //向量rec_vector加入向量vect中   }   tm.fireTableStructureChanged();   //更新表格,显示向量vect的内容   实现示图中记录前翻、后翻的效果,有两种方法:   如果软件环境支持JDBC2.0,可直接利用rs.prevoius()和rs.next()获得记录,然后通过类JTextField中的setText()方法,显示出各个字段值。   如果不支持JDBC2.0,则可利用向量Vector按行取出JTable中数据。自定义一个指针,用来记录位置。当指针加1时,取出上一行数据放入Vector中显示;指针减1时,取出下一行数据显示。显示方法同上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值