问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

想做几个简单的基于数据库查询的小应用软件,用什么开发工具比较好?(容易上手的)

发布网友 发布时间:2022-04-08 06:42

我来回答

5个回答

懂视网 时间:2022-04-08 11:03

1 DBUtils简介
DBUtils是Apache Commons组件中的一员,开源免费!
DBUtils是对JDBC的简单封装,但是它还是被很多公司使用!
DBUtils的Jar包:dbutils.jar

2 DBUtils主要类
?	DbUtils:都是静态方法,一系列的close()方法;
?	QueryRunner:
?	update():执行insert、update、delete;
?	query():执行select语句;
?	batch():执行批处理。

OK,我们卡死写一个例子,这里例子中,我们用c3p0作为数据库连接池,简单实用。


老规矩新建一个项目:

技术分享


我把代码给附上:从上往下的顺序

package com;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

public class Domain {
	
	/**
	 * 测试添加
	 * @throws SQLException
	 */
	@Test
	public void testadd() throws SQLException
	{
		Person person = new Person();
		person.setId(6);
		person.setName("ddlk");
		person.setMoney(10000);
		this.add(person);
	}
	/**
	 * 测试更新
	 * @throws SQLException
	 */
	@Test
	public void testupdata() throws SQLException
	{
		Person person = new Person();
		person.setId(6);
		person.setName("ddddd");
		person.setMoney(100000);
		this.update(person);
	}
	
	/**
	 * 测试查询
	 * @throws SQLException
	 */
	@Test
	public void testquery() throws SQLException
	{
		Person person = new Person();
		person.setId(6);
		person.setName("ddddd");
		person.setMoney(100000);
		this.update(person);
	}
	
	/**
	 * 测试删除
	 * @throws SQLException
	 */
	@Test
	public void testdelete() throws SQLException
	{ 
		//删除id为5的用户
		this.delete("5");
	}
	
	public void add(Person person) throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "insert into person values(?,?,?);";
		qr.update(sql, person.getId(),person.getName(),person.getMoney());
	}
	
	public void update(Person person) throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "update person set name=? , money=? where id=?";
		qr.update(sql, person.getName(),person.getMoney(),person.getId());
	}
	
	public void delete(String person_id) throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "delete from person where id=?";
		qr.update(sql,person_id);
	}
	
	
	//下面都是Query,查询是比较繁琐的,6种查询模式
	/**查询方法1:
	 * BeanHandler:单行结果集处理器,把数据封装到一个javaBean中
	 * @throws SQLException
	 */
	@Test
	public void query_1() throws SQLException
	{
		 
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person where id=?";
		
		/**
		 * ResultSetHandler接口只有一个方法:T handle(ResultSet)
		 * BeanHandler实现了这个接口,它会把结果集数据封装到Student对象中
		 */
		ResultSetHandler<Person> rsh = new BeanHandler<Person>(Person.class);
		Person person = qr.query(sql, rsh, "2");
		System.out.println(person.getName());
		 
	}
	
	/**
	 * 查询方法2:
	 * BeanListHandler --> 多行结果集处理器,把多行的数据封装到多个Bean对象中,返回一个List<Bean>
	 * @throws SQLException
	 * @throws SQLException 
	 */
	@Test
	public void query_2() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person ";
		
		ResultSetHandler<List<Person>> rsh = new BeanListHandler<Person>(Person.class);
		List<Person> personlist = qr.query(sql, rsh);
		
		for(int i=0;i<personlist.size();i++)
		{
			//这返回的都是对象的list
			System.out.println(personlist.get(i));
		}
		
	}
	
	/**方法3
	 * MapHandler --> 单行处理器,把一行结果集封装到一个Map对象中
	 * 
	 * 返回的map中key是列名称,值是列的值
	 * 
	 */
	@Test
	public void query_3() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person where id=?";
		//mapHandler 单行处理,封装成一个map
		MapHandler map = new MapHandler();
		
		Map<String,Object> maps = qr.query(sql, map,"3");
		System.out.println(maps);
		
	}
	
	/**方法4
	 * MapListHandler -->多行处理器,把每行结果集封装到一个Map中,多行就是多个Map,即List<Map>
	 * 
	 * 返回的map中key是列名称,值是列的值
	 * 
	 */
	@Test
	public void query_4() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select * from person ";
		//mapHandler 单行处理,封装成一个map
		MapListHandler map = new MapListHandler();
		
		List<Map<String,Object>> maps = qr.query(sql, map);
		//增强for循环
		for(Map<String,Object> map1: maps)
		{
			System.out.println(map1);
		}
			
	
	}
	
	/**方法5
	 * ColumnListHandler --> 一列多(单)行,用来处理单列查询,把该列的数据封装到一个List中
	 * @throws SQLException
	 * 
	 */
	@Test
	public void query_5() throws SQLException
	{
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select name from person ";//如果是select * 那查询的是第一列
		ColumnListHandler columnListHandler = new ColumnListHandler();
		
		List<Object> personlist = qr.query(sql, columnListHandler);
		
		for(int i = 0;i<personlist.size();i++)
		{
			System.out.println(personlist.get(i));
		}
		
	}
	
	/**方法6
	 * ScalarHandler --> 通过用在聚合函数的使用,对单行单列进行查询
	 * @throws SQLException
	 */
	@Test
	public void query_6() throws SQLException {
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		String sql = "select count(*) from person";
		ScalarHandler shd = new ScalarHandler();
		Number number = (Number)qr.query(sql, shd);
		System.out.println(number.longValue());
	}
	
	
	
}


package com;

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
 * Jdbc工具
 * 提供连接池
 * 提供链接
 * @author 挨踢界小人物
 *
 */
public class JdbcUtils {
	public static DataSource ds = new ComboPooledDataSource("myc3p0");
	
	public static Connection getConnection() throws SQLException
	{
		return ds.getConnection();
	}
	
	public static DataSource getDataSource()
	{
		return ds;
	}
}


package com;

public class Person {
	private int id;
	private String name;
	private int money;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}

	
	public Person(int id, String name, int money) {
		super();
		this.id = id;
		this.name = name;
		this.money = money;
	}


	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}
	
	
}

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

 <named-config name="myc3p0">
 
 <!-- 指定连接数据源的基本属性:!这里的用户名密码要改成自己数据库的用户名密码!~ -->
 <property name="user">root</property>
 <property name="password">root</property>
 <property name="driverClass">com.mysql.jdbc.Driver</property>
 <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
 
 <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
 <property name="acquireIncrement">5</property>
 <!-- 初始化数据库连接池时连接的数量 -->
 <property name="initialPoolSize">5</property>
 <!-- 数据库连接池中的最小的数据库连接数 -->
 <property name="minPoolSize">5</property>
 <!-- 数据库连接池中的最大的数据库连接数 -->
 <property name="maxPoolSize">10</property>

 <!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
 <property name="maxStatements">20</property>
 <!-- 每个连接同时可以使用的 Statement 对象的个数 -->
 <property name="maxStatementsPerConnection">5</property>
 
 </named-config>
 
</c3p0-config>
 


数据库脚本文件也给上吧:

/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.5.24 : Database - test
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `test`;

/*Table structure for table `person` */

DROP TABLE IF EXISTS `person`;

CREATE TABLE `person` (
 `id` int(12) NOT NULL,
 `name` varchar(20) DEFAULT NULL,
 `money` int(20) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `person` */

insert into `person`(`id`,`name`,`money`) values (1,'zhang1',1001),(2,'zhang2',1002),(3,'zhang3',1003),(4,'zhang4',1004),(5,'tttttt',60000),(6,'aaass',12345);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;



导入所需要的jar文件:点击下载

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>jdbcutils_demo</display-name>
 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
 <welcome-file>index.htm</welcome-file>
 <welcome-file>index.jsp</welcome-file>
 <welcome-file>default.html</welcome-file>
 <welcome-file>default.htm</welcome-file>
 <welcome-file>default.jsp</welcome-file>
 </welcome-file-list>
</web-app>

每一个都可以在方法里面用右键然后选择:JunitTest

技术分享


就可以在控制台看到打印的信息了。是不是很好用,很喜欢!~快来试一试吧!转载请注明出处。

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据库实用小工具之-DBUtils简单入门

标签:jdbcutils

热心网友 时间:2022-04-08 08:11

c#语言,VS2008开发工具。

热心网友 时间:2022-04-08 09:29

c/s的用C#上手比较快
b/s的用php上手比较快

热心网友 时间:2022-04-08 11:04

Response.Write("操作执行失败!可能您的权限不够或者该程序无法在DOS(命令提示符)下运行,您提交的操作如下:<br>" & Cmd)
else
end if
If Err Then
Response.Write "<br>"&err.description
err.Clear
End If
If fso.folderexists(server.mappath("/Tmp"&tmpSitePath)) Then

热心网友 时间:2022-04-08 12:55

VC?
VB?
DELPHI
都可以
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 关于无线路由器WDS桥接问题 请问两个路由器分别支持bridge和WDS,如何进行桥接? 路由器开启wds桥接,是开始主路由器的wds?还是副路由器的wds? 谁能给我解释一下WDS,中继,桥接之间的区别?越简单易懂越好。 mac硬盘读不出的文件夹怎么显示不出来怎么办 macbook Pro 文件显示不全? mac里我的所有文件怎么不显示文件夹 macbookair为什么打开文档不显示呢 京东app.无法登录,提示你的帐号存在安全风险,请到主站登录。我都改了好几次密码了,app.还是不 苏绣的工艺特色 双面绣的历史渊源 四大名绣 湘绣 苏绣等哪个最好? 双面绣的特点 双面绣是什么意思? 双面绣的工艺特点 双面绣是在什么时候产生的? 请问双面刺绣怎样绣出来的? 双面绣有哪些分类? 苏州双面绣 刺绣分哪几种?双面绣是不是两面都不一样的? 电脑上的鼠标是怎麽回事? 一张信用卡倒另一张多少钱 总倒卡要不要适当的分期 信用卡倒卡 在上海闵行区做闪送怎么样? 上海闪送各区站点- 问一问 我在上海闵行区买的东西怎么才能送到松江去? 请问上海外星人电脑实体店的电脑怎么样?有没有谁买过他们这的电脑? 上海微量网络科技有限公司怎么样? 上海外星人电脑在哪能买到?是不是在实体店买电脑更有保障? 这是什么电影,男女主角都叫什么名字啊 布拉夫夫人酒店女演员 一部韩国电影讲的是大学教授喜欢自己的学生 布拉芙夫人剧情梗概 求一部韩国电影的名字? 一个教援来到农村认识一个女人最后教援眼睛瞎了是什么电影 adobe PR导出视频问题 这个是什么电影,教授给女学生买一双高跟鞋,求片名? 这是什么韩国电影? 女演员是谁? 布拉芙夫人结局是