老师这样写可以吗

老师这样写可以吗

工具类

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();

};

}

}

http://img1.sycdn.imooc.com//climg/5d58b61d0001396b13630971.jpg

http://img1.sycdn.imooc.com//climg/5d58b62a0001396b13630971.jpg

这个地方是不是因为map里面key相同的时候只是改变了key对应的值 没用复制或者改变其引用地址吧,不知道这样理解对不

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,这里的抽取工具类一般是指链接数据的部分代码,而同学把增删改查都抽取到了JdbcUtil中,这里不用把增删改查封装进去呦。

1、同学不要把增删改查都写到一个方法里呦,同学是把增删改查的方法都写到select()里了。

请同学分别写这几个方法,并且不需要在JDBCUtile里封装哦,直接在方法中写就可以,JDBCUtile 中只写链接数据库和是否链接的部分即可。

2、例如同学可以写6个方法:

1、插入的方法

2、查询所有的方法

3、根据名称查询的方法

4、根据名称修改的方法

5、根据名称删除的方法

6、查询所有数据并排序的方法。

例如插入时,先通过JDBCUtil 获取连接,最后通过JDBCUtil关闭连接。

3、首先map本就是无序的呦,而list是有序的。所有顺序不一样是正常的。

老师非常抱歉没有明白同学说的两次查询的map,一样,但是存入的list不一样是指哪里呦,请同学再次详细说明一下呦。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • shameL 提问者 #1
    您看一下这两张图片 一个map定义在了while 的外面 存入list中 结果list 输出的时候都是id 为最后一个的数据,我说是不是因为这个地方是不是因为map里面key相同的时候只是改变了key对应的值 没用复制或者改变其引用地址吧,不知道这样理解对不
    2019-08-18 16:03:37
  • 好帮手慕阿莹 回复 提问者 shameL #2
    同学是不是贴错图片了呢?同学贴的两张图是一模一样的呦。可以在“我要回答”中重新贴一下呦。祝学习愉快
    2019-08-18 17:57:06
  • shameL 提问者 回复 好帮手慕阿莹 #3
    我再我要回答发了第二张图片,看一下吧
    2019-08-20 13:07:16
提问者 shameL 2019-08-19 20:53:51

http://img1.sycdn.imooc.com//climg/5d5a9ba90001c6f115900874.jpg

第二张图片

老师我这样封装的调用数据库的类不是跟容易使用吗,有什么不妥呢

  • 同学你好,map中,当put的key有与之前重复的,则会直接替换相同key对应的value值。key就好比房间号,每次存入value都是拿到的同一个房间号时,它会把之前的覆盖掉哦。因为同学的key 都是“手机”,所以,这里map中实际只有一对键值对,就是 key 是手机 value是最后一次存进去的 id。
    2019-08-20 13:42:58
  • 提问者 shameL 回复 好帮手慕阿莹 #2
    我这个封装的不是会更方便吗?
    2019-08-20 13:54:04
  • 好帮手慕阿莹 回复 提问者 shameL #3
    但map中的key一旦相同,后边的value就会覆盖前边的value哦,又是同一个map。看同学每次都往list中add 这个map,那么每次都应该add的是一个新的map哦,所以应该每次都新new 一个map哦。 祝学习愉快。
    2019-08-20 14:09:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师