昨天查询了多行数据,今天完善一下
首先在工具类JdbcUtil写一个查询一行的类,使用泛型传参:
public static <T> T selectRow(String sql, Class<T> c) {
try {
//1.注册驱动-放射加载jar包中com.mysql.jdbc
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8", "root", "root");
//3.定义sql
//4.需要创建statemrnt
Statement statement = con.createStatement();
//5.statement执行sql,返回结果集
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
//6.解析
if (rs.next()) {//读取结果集的光标向下移动,光标默认在哪一行,列名所在的那一行
T t = c.newInstance();
for (int i = 1; i <= columnCount; i++) {
//通过列的序号,获取每一列的值
Object value = rs.getObject(i);
if (value != null) {
//通过新的序列,获取每一列的列名
String columnName = md.getColumnName(i);
//因为列名和实体类t中的属性名一致,为每一个属性构造一个反射中的set方法
Field f = c.getDeclaredField(columnName);
//赋予私有属性
f.setAccessible(true);
//使用反射,把value给到对象t的属性中
f.set(t, value);
}
}
return t;
}
//7.关闭资源
statement.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
同样的方法查询一列:
public static <T> List<T> selectColumn(String sql, Class<T> c) {
List<T> tList = new ArrayList<>();
try {
//1.注册驱动-放射加载jar包中com.mysql.jdbc
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8", "root", "root");
//3.定义sql
//4.需要创建statemrnt
Statement statement = con.createStatement();
//5.statement执行sql,返回结果集
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
//6.解析
while (rs.next()) {//读取结果集的光标向下移动,光标默认在哪一行,列名所在的那一行
//通过列的序号,获取每一列的值
T t = (T) rs.getObject(1);
tList.add(t);
}
//7.关闭资源
statement.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return tList;
查询单个:
public static <T> T selectOne(String sql, Class<T> c) {
List<T> tList = new ArrayList<>();
try {
//1.注册驱动-放射加载jar包中com.mysql.jdbc
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8", "root", "root");
//3.定义sql
//4.需要创建statemrnt
Statement statement = con.createStatement();
//5.statement执行sql,返回结果集
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columnCount = md.getColumnCount();
//6.解析
T t=null;
if(rs.next()){
t = (T) rs.getObject(1);
}
//7.关闭资源
statement.close();
con.close();
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
以及增删改的方法:
public static int update(String sql) {
try {
//1.注册驱动-放射加载jar包中com.mysql.jdbc
Class.forName("com.mysql.jdbc.Driver");
//获取连接对象
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf8", "root", "root");
//3.定义sql
//4.需要创建statemrnt
Statement statement = con.createStatement();
//5.statement执行sql,返回结果集
int i = statement.executeUpdate(sql);
//7.关闭资源
statement.close();
con.close();
return i;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
在Mysql里创建两个登录方法:
然后在util里创建JdbcUtilPlus类,复制JdbcUtil里代码并修改:
写一个Test测试方法:
输出登录失败及为成功:
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于将数据以易于阅读和编写的方式进行传输和存储。它是一种文本格式,并且是独立于语言的,因此可以在不同的编程语言之间进行数据交换。
JSON以键值对的形式表示数据。一个JSON对象由一个或多个键值对组成,每个键值对由一个属性名和对应的值组成。值可以是字符串、数字、布尔值、数组、对象或者null。
在写之前写配置一下环境:
配置成功:
重新新建一个Servlet-7.11工程,奖jdbc-7.10复制一份:
然后导包:
创建dept和vue写与myql与java实现数据交互代码:
现有代码加以修改后加一个Json类:
package com.hp.utils;
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
public class JsonUtil {
public static void transJason(Object obj, HttpServletResponse resp){
try {
//数据转换成json格式,再响应给浏览器
String json_string = JSON.toJSONString(obj);
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().write(json_string);
}catch (Exception e){
e.printStackTrace();
}
}
}
dept里写:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/vue/vue.min.js"></script>
<script src="/vue/axios.min.js"></script>
</head>
<body>
<div id="app">
<button @click="showDept">点击显示数据</button>
<table border="1" cellpadding="20" cellspacing="0">
<tr>序号</tr>
<tr>部门名称</tr>
<tr>部门位置</tr>
<tr>部门领导</tr>
<tr v-for="dept in deptList">
<td>{{dept.did}}</td>
<td>{{dept.dname}}</td>
<td>{{dept.dlocation}}</td>
<td>{{dept.leader}}</td>
</tr>
</table>
</div>
</body>
<script>
new Vue({
el:'#app',
data: {
deptList:[]
},
methods:{
showDept(){
axios.get('http://localhost:8080/deptC').then((resp)=>{
console.log(resp,resp.data)
this.deptList=resp.data
})
}
}
})
</script>
</html>
与服务器进行连接:
显示以下则连接成功:
最后就是这个亚子啦:
今天就到这里啦,继续刻舟求剑。。。。。。