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 ...
随机推荐
- AI 状态机
by AKara 2010-11-11 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @weibo.com/akaras 一个简单横版游戏 ...
- Darwin Streaming Server 6.0.3安装、订制、插件或模块
How to setup Darwin Streaming Server 6.0.3 on 32 or 64 bit Linux platforms, add custom functionality ...
- Vim学习总结
Vim 目前还没感觉到比在Mac下使用Sublime Text高效到哪 安装 sudo apt-get install vim 常用配置 在Linux环境下Vim的初始化配置文件为.vimrc,通常有 ...
- Android Message和obtainMessage的区别
类概述 定义一个包含任意类型的描述数据对象,此对象可以发送给Handler.对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作. 尽管Message的构造器是公开 ...
- js中json与数组字符串的相互转化
<SCRIPT LANGUAGE="JavaScript"> var t="{'firstName': 'cyra', 'lastName': 'richar ...
- IOS CAShapeLayer CAGradientLayer UIBezierPath 使用实例
CGRect rect = CGRectMake(100, 100, 100, 100); UIView * bgView = [[UIView alloc]initWithFrame:rect]; ...
- unicode ansi utf-8 unicode_big_endian编码的区别
随便说说字符集和编码 快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思.&quo ...
- DataTable行转列
/// <summary> /// DataTable行转列 /// </summary> /// <param name="dtable">需 ...
- bzoj 1391 [Ceoi2008]order(最小割)
[题意] 有n个有偿工作选做,m个机器,完成一个工作需要若干个工序,完成每个工序需要一个机器,对于一个机器,在不同的工序有不同的租费,但买下来的费用只有一个.问最大获益. [思路] 对于工作和机器建点 ...
- stl+模拟 CCF2016 4 路径解析
// stl+模拟 CCF2016 4 路径解析 // 一开始题意理解错了.... #include <iostream> #include <string> #include ...