数据库工具java部分

这篇博客介绍了使用Java开发数据库应用的经验,重点在于连接控制和数据获取。代码结构简洁,仅包含12个类,适合初学者。作者采用了Java+Flex的组合,并提供了数据库数据获取的关键代码,但出于安全考虑未包含修改数据的功能。
摘要由CSDN通过智能技术生成

之前花两个星期写了一个简易的数据库工具,还有好多功能没有做,这是界面部分,左上角的下拉框来选择数据库,目前支持的数据库是mysql,oracle,sqlserver,树上显示的是之前保存的数据库连接,点击后,会弹出请输入密码的输入框,输入密码后,就可以打开树,然后点击数据库,打开相应的数据库,点击先关的表,就可以查看表数据,表数据可以用excel导出。点击查询查询后,就可以打开查询面板,在查询面板中就可以输入要执行的sql语句。界面部分用flex完成,因为flex实现快,且不用考虑浏览器兼容性。展开后的面板如下所示。

java部分代码结构很简单就12个类,界面也很简单。使用java+flex的模式开发应用非常适合像我这样的菜鸟。

其中的关键在于对连接的控制和数据库数据的获取。我分别将其操作放入到两个类中。

数据库数据的获取代码如下,因为安全因素,没哟添加修改表数据和字段功能,大家可以单个小练习看看

package itims.typNew.tool.dbtool.operator;

import itims.typNew.tool.dbtool.service.DbDataAction;
import itims.typNew.tool.dbtool.util.SqlGenerator;
import itims.typNew.tool.dbtool.bean.ColumnsInfo;
import itims.typNew.tool.dbtool.util.UtilTool;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
 * 
 * @author chenshanqun
 *连接上数据库以后,对数据库的所有操作方法
 */
public class DataControl {
	private Log logger = LogFactory.getLog(DataControl.class);
	private Connection conn;

	private String dbType = null;

	public DataControl(Connection conn) {
		this.conn = conn;
	}

	public void setConnection(Connection conn) {
		this.conn = conn;
	}

	public Connection getConnection() {
		return this.conn;
	}
	/**
	 * 获取数据库名称
	 * @return
	 */
	public String getDatabaseName() {
		try {
			String name = conn.getMetaData().getDatabaseProductName();
			name = name.replaceAll("/", "-");
			return name;
		} catch (SQLException e) {
			// System.out.println("meta.getDatabaseProductName.ERROR" +
			// e.getMessage());
			return "--ERROR--";
		}
	}

	/**
	 * 获取所有的数据库列表   (有的数据库不能根据连接获取到和他同级的其他数据库,如oracle)
	 * @return
	 */
	public List<String> getCatalogs() {
		List<String> list = new ArrayList<String>();
		try {

			ResultSet rs;

			rs = conn.getMetaData().getCatalogs();
			while (rs.next()) {
				// System.out.println("getcatalogs+++++++++++++++++++++++++++++++++++++++++++++");
				String schema = rs.getString("TABLE_CAT");
				list.add(schema);
			}

			rs.close();
		} catch (SQLException e) {
			// System.out.println("meta.getSchemas" + e.getMessage());
		}
		return list;
	}

	/**
	 * 获取所有的表空间
	 * @return
	 */
	public List<String> getSchemas() {

		List<String> list = new ArrayList<String>();
		try {

			ResultSet rs = conn.getMetaData().getSchemas();
			while (rs.next()) {
				// System.out.println("get tableschem++++++++++++++++++++++++++++++++++++++++++++++++");
				String schema = rs.getString("TABLE_SCHEM");
				list.add(schema);
			}
			rs.close();

		} catch (SQLException e) {
			// System.out.println("meta.getSchemas" + e.getMessage());
		}
		return list;
	}
	/**
	 * 获取所有表的类型(如视图,表等)
	 * @return
	 */
	public List<String> getElementTypes() {
		List<String> list = new ArrayList<String>();
		try {
			ResultSet rs = conn.getMetaData().getTableTypes();
			while (rs.next()) {
				String type = rs.getString("TABLE_TYPE");
				list.add(type);
			}
			rs.close();
		} catch (SQLException e) {
			// System.out.println("meta.getTableTypes" + e.getMessage());
		}
		return list;
	}

	/**
	 * 
	 * @param schema 表空间或者数据库名(因为有的数据库没有表空间,如mysql)
	 * @param types 表的类型列表
	 * @param mode 数据库结构的类型,0有表空间,1没有表空间,有数据库名
	 * @return 获取所有的数据表(表名列表)
	 */
	public List<String> getElements(String schema, List types, int mode) {
		// mode 0 means by schema;
		// mode 1 means by catalog;
		String[] newTypes;
		List<String> list = new ArrayList<String>();
		if (types.size() == 0) {
			newTypes = new String[] { "table" };
		}
		try {
			ResultSet rs = null;
			newTypes = UtilTool.changeListToStrings(types);
			System.out.println(newTypes[0]);
			if (mode == 0) {
				rs = conn.getMetaData().getTables(null, schema, null, newTypes);
			} else {
				rs = conn.getMetaData().getTables(schema, null, null, newTypes);
			}

			while (rs.next()) {
				String name = rs.getString("TABLE_NAME");

				if (name.indexOf('/') > -1 || name.indexOf('$') > -1) {
					continue;
				}
				list.add(name);
			}
			rs.close();
		} catch (SQLException e) {
			// System.out.println("meta.getTableNames" + e.getMessage());
		}
		return list;
	}
	/**
	 * 
	 * @param tableName
	 * @return 获取一个数据表,所有的字段列表(列表里面的为字段对象)
	 */
	public List getColumns(String tableName) {
		ResultSet resultSet = null;
		List<ColumnsInfo> columnsInfoList = new ArrayList<ColumnsInfo>();
		try {
			resultSet = conn.getMetaData().getColumns(null, null, tableName,
					null);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (resultSet != null) {
			try {
				while (resultSet.next()) {
					// 获得字段名称
					String name = resultSet.getString("COLUMN_NAME");
					// 获得字段类型名称
					String type = resultSet.getString("TYPE_NAME");
					// 获得字段大小
					int size = resultSet.getInt("COLUMN_SIZE");
					// 获得字段备注
					String remark = resultSet.getString("REMARKS");
					ColumnsInfo info = new ColumnsInfo();
					info.setImportedKey(false);
					info.setParmaryKey(false);
					info.setName(name);
					info.setSize(size);
					info.setType(type);
					info.setRemark(remark);
					columnsInfoList.add(info);
				}
				resultSet.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		return columnsInfoList;
	}
	/**
	 * 根据一个数据集,获取这个数据集所有的字段列表
	 * @param rs
	 * @return
	 */
	public List getColumns(ResultSet rs) {
		int columnsCount = 0;
		java.sql.ResultSetMetaData rsm = null;
		try {
			rsm = rs.getMetaData();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		List<ColumnsInfo> columnsInfoList = new ArrayList<ColumnsInfo>();
		try {
			columnsCount = rs.getMetaData().getColumnCount();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		for (int i = 0; i < columnsCount; i++) {
			// 获得字段名称
			ColumnsInfo info = new ColumnsInfo();
			String name = null;
			try {
				System.out.println("dsfafed      " + i + 1);
				info.set
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值