老师这样写可以吗
工具类
package com.lfx.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class JdbcUtil {
/**
* 注册数据库
*
* @throws ClassNotFoundException
*/
private static Connection conn = null;
private static Statement state = null;
private static ResultSet res = null;
// 完整sql 语句;
private String sql;
// where 查询语句;
private String where = null;
// limit 查询语句;
private String limit = null;
// join 查询语句
private String join = null;
// group by 查询语句
private String groupBy = null;
// order by查询语句
private String orderBy = null;
// 表的名称
private String name = null;
//查寻的关键字 field
private String field = "*";
// 该对象
private static JdbcUtil ju = null;
public static void loader() throws ClassNotFoundException {
Class.forName("com.mysql.cj.jdbc.Driver");
}
/**
* 连接数据库
*
* @throws ClassNotFoundException
* @throws SQLException return 连接
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
loader();
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/javatest?useUnicoding=true&serverTimezone=UTC&characterEncoding=utf8", "root", "123456");
getStatement();
return conn;
}
/**
* 获取发送的对象
*
* @throws SQLException
*/
public static Statement getStatement() throws SQLException {
state = conn.createStatement();
return state;
}
/**
* 初始化 并且获得要操作的表
*
* @param name
* @return 该工具对象
* @throws SQLException
* @throws ClassNotFoundException
*/
public static JdbcUtil name(String name) throws ClassNotFoundException, SQLException {
JdbcUtil.getConnection();
ju = new JdbcUtil();
ju.name = name;
return ju;
}
/**
* 查询
*
* @throws SQLException
*/
public List<Map> select() {
sql="SELECT "+field+" from "+name;
if(where!=null && !(where.equals(""))) {
sql+=" where "+where;
}
if(limit!=null && !(limit.equals(""))) {
sql+=" limit "+limit+" ";
}
if(groupBy!=null && !(groupBy.equals(""))) {
sql+=" group by "+groupBy;
}
if(orderBy!=null && !(orderBy.equals(""))) {
sql+=" order by "+orderBy;
}
List<Map> list = null;
try {
res = state.executeQuery(sql);
list=res(res);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close(conn, state, res);
}
return list;
}
/**
* 修改
* Map<String,Object> keyValue 更改的列 和 值
*return 更改的列
*/
public int update(Map<String,Object> keyValue) {
if(keyValue==null || keyValue.equals("")) {
throw new Error("未获取到要改变的列");
}
sql="update "+name+" set ";
Set<Entry<String,Object>> entry=keyValue.entrySet();
Iterator<Entry<String,Object>> items=entry.iterator();
while(items.hasNext()) {
Entry<String,Object> item=items.next();
sql+=item.getKey()+"=\""+item.getValue()+"\",";
}
sql=sql.substring(0,sql.length()-1);
if(where!=null && !(where.equals(""))) {
sql+=" where "+where;
}
int n=executeUpdate();
return n;
}
/**
* 删除
*
*return 更改的列
*/
public int delete() {
sql="delete from "+name;
if(where!=null && !(where.equals(""))) {
sql+=" where "+where;
}
int n=executeUpdate();
return n;
}
/**
* 添加
*
*return 更改的列
*/
public int insert(Map<String,Object> keyValue) {
if(keyValue==null || keyValue.equals("")) {
throw new Error("未获取到要添加的列");
}
sql="insert into "+name;
String key="(";
String value=" values(";
Set<Entry<String,Object>> entry=keyValue.entrySet();
Iterator<Entry<String,Object>> items=entry.iterator();
while(items.hasNext()) {
Entry<String,Object> item=items.next();
key+=item.getKey()+",";
value+="\""+item.getValue()+"\",";
}
key=key.substring(0,key.length()-1)+")";
sql+=key;
value=value.substring(0,value.length()-1)+")";
sql+=value;
System.out.println(sql);
if(where!=null && !(where.equals(""))) {
sql+=" where "+where;
}
int n=executeUpdate();
return n;
}
/**
* 释放资源
*/
public static void close(Connection conn, Statement state) {
if (state != null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
state = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn = null;
}
}
public static void close(Connection conn, Statement state, ResultSet res) {
if (res != null) {
try {
res.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
res = null;
}
close(conn, state);
}
public JdbcUtil getJdbcUtil() {
if (ju == null || ju.equals("")) {
throw new Error("请设置要操作的表");
}
return ju;
}
public List<Map> res(ResultSet res) {
List<Map> list=new ArrayList<Map>();
// Map<String, Object> map = new HashMap<String, Object>();
try {
while (res.next()) {
int n = res.getMetaData().getColumnCount();
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= n; i++) {
map.put(res.getMetaData().getColumnName(i), res.getObject(i));
}
list.add(map);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
private int executeUpdate() {
int n = 0;
try {
n = state.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close(conn, state);
}
return n;
}
public JdbcUtil where(Map<String,Object> keyValue) {
where="";
if(keyValue!=null && !(keyValue.equals(""))) {
Set<Entry<String,Object>> entry=keyValue.entrySet();
Iterator<Entry<String,Object>> items=entry.iterator();
while(items.hasNext()) {
Entry<String,Object> item=items.next();
where+=item.getKey()+"="+item.getValue()+",";
}
where=where.substring(0,where.length()-1);
}
return this;
}
public JdbcUtil field(String[] fie) {
if(fie==null || fie.length==0) {
return this;
}
field="";
for(String item:fie) {
field+=item+",";
}
field=field.substring(0,field.length()-1);
return this;
}
public JdbcUtil limit(String startEnd) {
if(startEnd==null || startEnd.equals("")) {
return this;
}
limit=startEnd;
return this;
}
public JdbcUtil orderBy(String orderBy){
if(orderBy==null || orderBy.equals("")) {
return this;
}
this.orderBy=orderBy;
return this;
}
// groupBy
public JdbcUtil groupBy(String groupBy){
if(groupBy==null || groupBy.equals("")) {
return this;
}
this.groupBy=groupBy;
return this;
}
}
//测试类
package com.lfx.util;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class test {
public static void main(String[] args) {
test t=new test();
t.select();
}
public void select() {
try {
/**
* 删除全表
*/
// 表删除
Map<String,Object> wheres=new HashMap<String, Object>();
wheres.put("id",54);
// int n=JdbcUtil.name("goods").where(wheres).delete();
//删除全表
// int n=JdbcUtil.name("goods").delete();
// 添加
Map<String,Object> map=new HashMap<String, Object>();
map.put("name","手机");
map.put("price","2000.0");
map.put("desp","黑色,存储容量32G");
String[] field= {"id","name"};
JdbcUtil.name("goods").insert(map);
//查新单条
// List<Map> s=JdbcUtil.name("goods").where(wheres).select();
//查询多条 分页 个别字段 排序
List<Map> s=JdbcUtil.name("goods").field(field).orderBy("id desc").groupBy("name").select();
for(Map<String, Object> e:s) {
Set<Entry<String, Object>> set=e.entrySet();
Iterator<Entry<String, Object>> items=set.iterator();
while(items.hasNext()) {
Entry<String, Object> entry=items.next();
System.out.println(entry.getKey()+" = "+entry.getValue());
}
}
//修改
Map<String,Object> upmap=new HashMap<String, Object>();
upmap.put("price",3000.88f);
upmap.put("name","冰箱");
upmap.put("desp","双开门");
int n=JdbcUtil.name("goods").where(wheres).update(upmap);
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
}
这个地方是不是因为map里面key相同的时候只是改变了key对应的值 没用复制或者改变其引用地址吧,不知道这样理解对不
正在回答
同学你好,这里的抽取工具类一般是指链接数据的部分代码,而同学把增删改查都抽取到了JdbcUtil中,这里不用把增删改查封装进去呦。
1、同学不要把增删改查都写到一个方法里呦,同学是把增删改查的方法都写到select()里了。
请同学分别写这几个方法,并且不需要在JDBCUtile里封装哦,直接在方法中写就可以,JDBCUtile 中只写链接数据库和是否链接的部分即可。
2、例如同学可以写6个方法:
1、插入的方法
2、查询所有的方法
3、根据名称查询的方法
4、根据名称修改的方法
5、根据名称删除的方法
6、查询所有数据并排序的方法。
例如插入时,先通过JDBCUtil 获取连接,最后通过JDBCUtil关闭连接。
3、首先map本就是无序的呦,而list是有序的。所有顺序不一样是正常的。
老师非常抱歉没有明白同学说的两次查询的map,一样,但是存入的list不一样是指哪里呦,请同学再次详细说明一下呦。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星