Mysql,JDBC封装
1.完成对数据库的表的增删改的操作
2.查询返回单条记录
3.查询返回多行记录
4.可以使用反射机制来封装,查询单条记录
5.反射机制,查询多条记录
package myjdbc; import java.sql.DriverManager;
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 javax.sound.midi.MetaEventListener; import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Field;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSetMetaData; import domain.UserInfo; public class JdbcUtil {
//表示数据库的用户名
private final String USERNAME = "root";
//表示数据库的密码
private final String PASSWORD = "hang796413";
//数据库的驱动信息
private final String DRIVER = "com.mysql.jdbc.Driver";
//访问数据库的地址
private final String URL = "jdbc:mysql://localhost:3306/gustomer";
//定义数据库的链接
private Connection connection;
//定义sqk语句的执行对象
private java.sql.PreparedStatement pstmt;
//定义查询返回的结果集合
private ResultSet resultSet; public JdbcUtil(){
try {
Class.forName(DRIVER);
System.out.println("注册驱动成功");
connection = (Connection) DriverManager.getConnection(URL,USERNAME,PASSWORD);
System.out.println("链接成功");
} catch (Exception e) { }
}
/*完成对数据库的表的增删改的操作
*
* @param sql
* @param params
* @retuen
* @throws SQLException
* */
public boolean upderbypaerdstaemnet(String sql, List<Object>
params)throws SQLException{
boolean flag = false;
int result = -1;//表示当用户执行增删改所影响数据库的行数
pstmt = connection.prepareStatement(sql); int index = 1;
if(params != null && !params.isEmpty()){
for(int i = 0; i<params.size();i++){
pstmt.setObject(index++, params.get(i));
}
}
System.out.println(pstmt.toString());
result = pstmt.executeUpdate();
System.out.println(result);
flag = result > 0 ? true : false;
return flag; }
/*查询返回单条记录
* */
public Map<String,Object> findSimpleResult(String sql, List<Object>
params)throws SQLException{
Map<String,Object> map = new HashMap<String,Object>();
//组合SQL语句
pstmt = connection.prepareStatement(sql);
int index = 1;
if(params != null && !params.isEmpty()){
for(int i = 0; i<params.size();i++){
pstmt.setObject(index++, params.get(i));
}
}
System.out.println(pstmt.toString()); resultSet = pstmt.executeQuery();//返回查询结果
//获取列的信息 -> metaData
ResultSetMetaData metaData = (ResultSetMetaData) resultSet.getMetaData();
int col_len = metaData.getColumnCount();//获得列的名称
System.out.println(col_len);
//如果还有其他列
while(resultSet.next()){ for(int i = 0; i<col_len;i++){
//记录 名字和值
System.out.println("11112333332233332");
//i+1!!!!!!!!
String cols_name = metaData.getColumnName(i+1);
System.out.println(cols_name);
Object cols_value =resultSet.getObject(cols_name);
if( cols_value == null){
cols_value = " ";
} map.put(cols_name, cols_value);
}
} return map;
}
/*
* 查询返回多行记录
* */
public List<Map<String,Object>> findMoreResult(String sql, List<Object>
params)throws SQLException{
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
pstmt = connection.prepareStatement(sql);
int index = 1;
if(params != null && !params.isEmpty()){ for(int i = 0; i<params.size();i++){
pstmt.setObject(index++, params.get(i));
}
}
System.out.println(pstmt.toString());
resultSet = pstmt.executeQuery();//返回查询结果
//获取列的信息 -> metaData
ResultSetMetaData metaData = (ResultSetMetaData) resultSet.getMetaData();
int col_len = metaData.getColumnCount();//获得列的名称
while(resultSet.next()){
//******多了这个地方****/
Map<String,Object> map = new HashMap<String,Object>();
for(int i = 0; i<col_len;i++){
//记录 名字和值
String cols_name = metaData.getColumnName(i+1);
Object cols_value =resultSet.getObject(cols_name);
if( cols_value == null){
cols_value = " ";
}
map.put(cols_name, cols_value);
}
list.add(map);
}
return list;
}
//jdbc的封装可以使用反射机制来封装
public <T> T findSimpleRefResult(String sql ,List<Object>params,
Class<T> cls)throws SQLException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException {
T resultObject = null;
int index = 1;
pstmt = connection.prepareStatement(sql);
if(params != null && !params.isEmpty()){
for(int i = 0; i<params.size();i++){
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData =(ResultSetMetaData) resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while(resultSet.next()){
//通过反射机制创建实例 resultObject = cls.newInstance();
//初始化
for(int i = 0; i<cols_len;i++){
//记录 名字和值 String cols_name = metaData.getColumnName(i+1);
Object cols_value =resultSet.getObject(cols_name); if( cols_value == null){
cols_value = " ";
}
//获取javabean(UserInfo)对应列的属性
java.lang.reflect.Field field = cls.getDeclaredField(cols_name);
//打开javabea的访问私有权限
field.setAccessible(true);
//相对应的javabean进行赋值
field.set(resultObject,cols_value); }
}
return resultObject;
}
/*
* 通过反射机制访问数据库
* */
public <T> List <T> finMoreRefResult(String sql ,List<Object>params,
Class<T> cls)throws SQLException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, InstantiationException{
List <T> list = new ArrayList<T>();
int index = 1;
pstmt = connection.prepareStatement(sql);
if(params != null && !params.isEmpty()){
for(int i = 0; i<params.size();i++){
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData =(ResultSetMetaData) resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while(resultSet.next()){
//通过反射机制创建实例
T resultObject = cls.newInstance();
//初始化
for(int i = 0; i<cols_len;i++){
//记录 名字和值
String cols_name = metaData.getColumnName(i+1);
Object cols_value =resultSet.getObject(cols_name);
if( cols_value == null){
cols_value = " ";
}
//获取javabean(UserInfo)对应列的属性
java.lang.reflect.Field field = cls.getDeclaredField(cols_name);
//打开javabea的访问私有权限
field.setAccessible(true);
//相对应的javabean进行赋值
field.set(resultObject,cols_value);
}
list.add(resultObject);
} return list; }
public void releaseConn(){
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
JdbcUtil jdbcUtil = new JdbcUtil(); // String sql = "insert into userinfo(username,pswd) values(?,?)";
// List<Object> params = new ArrayList<Object>();
// params.add("rose");
// params.add("123");
// try {
// boolean flag = jdbcUtil.upderbypaerdstaemnet(sql, params);
// System.out.println(flag);
// } catch (Exception e) {
// }
String sql ="select * from userinfo ";
//查询单个
//List<Object>params = new ArrayList<Object>();
//params.add(1);//id为1的记录
try {
List<UserInfo> list= jdbcUtil.finMoreRefResult(sql,null,UserInfo.class);
System.out.println(list);
} catch (Exception e) { }finally {
jdbcUtil.releaseConn();
}
}
}
package domain;
import java.io.Serializable;
public class UserInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String username;
private String pswd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", username=" + username + ", pswd=" + pswd + "]";
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPswd() {
return pswd;
}
public void setPswd(String pswd) {
this.pswd = pswd;
}
public UserInfo(){
}
}
Mysql,JDBC封装的更多相关文章
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- JDBC 进阶:使用封装通用DML DQL 和结构分层以及at com.mysql.jdbc.PreparedStatement.setTimestamp空指针异常解决
准备: 数据表 CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(10) DEFAULT ...
- MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题
JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...
- Class.forName("com.mysql.jdbc.Driver") ;
try { Class.forName("com.mysql.jdbc.Driver") ; } catch(ClassNotFoundException e) { System. ...
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- 数据库 MySQL Jdbc JDBC的六个固定步骤
*0 案例: a)在JavaScript中使用正则表达式,在JS中正则表达式的定界符是:// var regexp = /^[0-9]+$/; if(regexp.test(nu ...
- com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'goodsName' cannot be null
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'goodsName' cannot be n ...
- Java JDBC封装模式
模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...
- Springmvc对就jdbc封装的操作
解释: JdbcTemplate 封装常用的JDBC方法 HibernateTemplate 封装常用Hibernate方法 JdbcDaoSupport JDBC数据访问对象的基类 Hibern ...
随机推荐
- C#开发COM+组件和ActiveX控件
using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices ...
- Math.trunc
- 【 D3.js 高级系列 】 总结
高级系列的教程已经完结,特此总结. 月初的时候曾说过本月内完结高级教程,今天是最后一天,算是可以交差了.O(∩_∩)O~ 如此一来,[入门]-[进阶]-[高级]三个系列的教程算是完成了.本教程的目的在 ...
- apache开源项目--Synapse
Apache Synapse一个易于使用.轻量级的XML与Web Services管理和集成中间件.可用于搭建SOA和ESB的基础平台.Apache Synapse支持多种标准包括:XML.XSLT. ...
- 《C++ Primer 4th》读书笔记 第12章-类
原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936473.html
- QuartZ Cron表达式在java定时框架中的应用
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...
- table中嵌套table,如何用jquery来控制奇偶行颜色
总是要趁着自己还有记忆的时候,把该记录下来的都记录下来,着实是不敢恭维自己的记性. 相信很多时候,我们前端人员,经常会用到table里面的某个td中还嵌套着table,而这个时候还总要去弄奇偶行的颜色 ...
- Spring AOP (上)
工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习.第一:为了更充实自己,保持进步状态.第二:为了提升技术,提高开发能力.第三:保 ...
- 对Spring IoC容器实现的结构分析
本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...
- Google的通用翻译机能成为未来的巴别鱼吗?
“巴别鱼,”<银河系漫游指南>轻轻朗读着,“体型很小,黄色,外形像水蛭,很可能是宇宙中最奇异的事物.它靠接收脑电波的能量为生,并且不是从其携带者身上接收,而是从周围的人身上.……如果你把一 ...