1、首先在MySQL里面建立一个库和表,插入数据。
建库!
接着下一步 建表语句
如图所示,数据也插入里面了。
2、打开idea,新建一个Javaproject,
将jar包导入src中 点击图中选项
在src里面建立一个tool工具包,然后在里面建立一个util 工具类:
在package cn.hp;
import cn.hp.model.Student;
import java.sql.*;
import java.util.ArrayList;
public class Test01 {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// jdbc操作
// test1(1,"1' or '1'='1");
test2();
}
public static void test1(int id , String sname) throws ClassNotFoundException, SQLException {
// 1、加载驱动 选择当前使用的数据库 选择了mysql
Class.forName("com.mysql.jdbc.Driver");
// 2、创建一个连接 设计模式的理念 1、提升了安全性 2、运行时的性能 3、代码的优美 4、代码的可拓展(方便升级改造)
// 一个方法 5000行代码
Connection connectionName = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?characterEncoding=utf8&useSSL=true","root","root");
// 3、新建一个 查询页面 用来编写sql的 sql语句编辑器
//
Statement statement = connectionName.createStatement();
// 4、编写sql语句
// 二进制数据 21: 101010 >> 1 --> 42
String sql = "select * from student where id = " +id +" and sname = '"+sname+"' ";
// 5、执行sql,使用statement 获取 ResultSet 结果集 ( 表类型 行 列 )
// 查询的结果集 : 4种 单行单列 --> 基本数据类型接收
// 单行多列 --> 使用对象进行接收
// 多行单列 --> 使用集合(基本数据类型)进行接收
// 多行多列 --> 使用集合(对象)进行接收
ResultSet resultSet = statement.executeQuery(sql);
// 存在一个游标 ,这个表示当前正在读取第几行的数据 默认在 字段上 不在记录上,
// 想让游标到记录上,需要使用next()将游标下移
// System.out.println(resultSet.isBeforeFirst() +" " + resultSet.getRow());
// 代表第0行的数据 字段名称 列的数量
// ResultSetMetaData metaData = resultSet.getMetaData();
// for (int i = 1 ; i <= metaData.getColumnCount() ; i ++){
// System.out.print(metaData.getColumnName(i));
// System.out.println(metaData.getColumnLabel(i));
// }
ArrayList list = new ArrayList();
while (resultSet.next()){
// 保存数据库中的多行多列 数据
// 每走一次循环,创建一个对象, 使用对象 保存当前行的数据
Student student = new Student(
// 从数结果集的表中 使用int类型的 表示获取当前行的第1列 使用string类型的参数 表示获取当前字段的列
resultSet.getInt(1),
resultSet.getString(2),
resultSet.getString(3),
resultSet.getString("ssex")
);
list.add(student);
// System.out.println( "当前下标位置" + resultSet.getRow()
// +" 当前是否第一行" +resultSet.isFirst() + " "
// + resultSet.isLast() + " " +resultSet.isAfterLast());
}
System.out.println(list);
// resultSet.previous();
// System.out.println(resultSet.isAfterLast() + " "+ resultSet.getRow());
// int i = resultSet.getInt(1);
// System.out.println(i);
// 使用Java中的容器( 基本数据类型、数组(长度固定)、集合(长度可变)、对象 ) 保存 数据库查询的数据
// 关闭资源数据 关闭的是对象, 只关注自己创建的对象 ;
resultSet.close();
statement.close();
connectionName.close();
}
// 预编译 编译器
public static void test2() throws ClassNotFoundException, SQLException {
// 1、加载驱动 选择当前使用的数据库 选择了mysql
Class.forName("com.mysql.jdbc.Driver");
// 2、创建一个连接 设计模式的理念 1、提升了安全性 2、运行时的性能 3、代码的优美 4、代码的可拓展(方便升级改造)
// 一个方法 5000行代码
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?useSSL=false&characterEncoding=utf8","root","root");
// 3、新建一个 查询页面 用来编写sql的 sql语句预编辑器 PreparedStatement
// 先将sql与使用正确的方式 拼接完成 速度和 statement 比 会慢很多 但是 安全性能高 能够防止sql注入
// 把sql语句中的条件 使用 ? 代替
// 把条件内容 当成 参数 交给 预编译器 让他自己拼接
String sql = "select * from student where id = ? and sname = ?";
Object [] strs = {1,"赵雷"};
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1,strs[0]);
preparedStatement.setObject(2,strs[1]);
// 直接调用方法 表示 执行已经拼接好的sql语句
ResultSet resultSet = preparedStatement.executeQuery();
ArrayList list = new ArrayList();
while (resultSet.next()){
// 保存数据库中的多行多列 数据
// 每走一次循环,创建一个对象, 使用对象 保存当前行的数据
Student student = new Student(
// 从数结果集的表中 使用int类型的 表示获取当前行的第1列 使用string类型的参数 表示获取当前字段的列
resultSet.getInt(1),
resultSet.getString(2),
resultSet.getString(3),
resultSet.getString("ssex")
);
list.add(student);
// System.out.println( "当前下标位置" + resultSet.getRow()
// +" 当前是否第一行" +resultSet.isFirst() + " "
// + resultSet.isLast() + " " +resultSet.isAfterLast());
}
System.out.println(list);
// resultSet.previous();
// System.out.println(resultSet.isAfterLast() + " "+ resultSet.getRow());
// int i = resultSet.getInt(1);
// System.out.println(i);
// 使用Java中的容器( 基本数据类型、数组(长度固定)、集合(长度可变)、对象 ) 保存 数据库查询的数据
// 关闭资源数据 关闭的是对象, 只关注自己创建的对象 ;
resultSet.close();
preparedStatement.close();
connection.close();
}
}
在使用cv2.drawContours进行轮廓的颜色填充时要注意一点:(1)颜色填充时:给其传参数的时候,需要搞一个轮廓的list给他,要不会导致颜色填充失败。(2)画轮廓线时:就没必要搞list了,直接contours[i]就可以。python代码:import cv2imgfile = "IMG_3200.png"img = cv2.imread(imgfile)h, w, _ = img.s...
纽约时报,网上看新闻的好地方 http://www.nytimes.com 英文MP3下载的好地方 http://www.mp3raid.com/archive/archive/m/2 英文剧本下载的好地方 http://huajun.com/juben.htm 一个个人主页,从这里可以在线收听新东方的25盘磁带 http://www.intron.ac/study/t...
(2)PLC通讯参数设置:在系统块下,通讯端口设置,如设置端口0:PLC地址2,波特率。(3)EB8000软件,PLC设备属性通讯参数设置:通讯参数如波特率等必须与第(2)步的通讯端口设置一致,如PLC地址2,波特率。可依据PLC的通讯参数作修改,如PLC地址改为2,波特率改为;PLC和HMI的程序通讯参数都必须做对应修改。建议:与S7-200通讯时,建议将通讯延时、ACK讯号延时分别设置为默...
文章目录常用基类QObject类内存管理机制:父子对象的内存管理机制QApplication类:应用程序类(一般不直接操纵)QWidget类:窗体类Qt常用库QtCore基本库QtGui GUI库:包含图形窗口类网络和数据库相关类QtNetwork: Qt网络库QtSql:Qt数据库类Qfont类: 字体QPixmap类:绘图QPixmap VS QImage常见问题QPalette类:调色板ColorGroupColorRoleQBrush画刷常用设置颜色方法QColor类常用函数输出类型转换常用基类
AppWeb认证绕过漏洞(CVE-2018-8715)Vulnhub官方复现教程漏洞原理漏洞环境启动环境浏览器BurpSuite漏洞复现【注意】Burp不知名原因,会消失最后一个字节利用sessionVulnhub官方复现教程https://vulhub.org/#/environments/appweb/CVE-2018-8715/漏洞原理AppWeb是Embedthis Softwar...
标签PostgreSQL , ECS , 阿里云 , 部署 , 物理镜像 , 流复制 , 快照备份 , 备份验证 , 自动清理背景介绍在阿里云ECS环境中,实现一个非常简单,但是可用性和可靠性满足一般企业要求的PostgreSQL环境。包括:1、自动启动数据库2、包括一个物理流复制备库3、包括自动的秒级快照备份4、包括自动备份集有效性...
版权声明:本文为博主原创文章,转载请标明出处 https://blog.csdn.net/qq_19260029/article/details/78230599 初始化分类以及商品信息@Componentpublic class InitGoodsRed...
自然语言处理(NLP)-文本处理:指代消解(Co-reference Resolution)
在安卓系统中: 当系统内存不足时,Android系统将根据进程的优先级选择杀死一 些不太重要的进程,优先级低的先杀死。进程优先级从高到低如下。前台进程处于正在与用户交互的activity与前台activity绑定的service调用了startForeground()方法的service正在执行oncreate(),onstart(),ondestroy方法的 service。进程中包含正在执行onReceive()方法的BroadcastReceiver。系统中的前台进程并不会很多,而且
摘要:在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象...
ImgUtil.java根据长宽压缩图片 根据坐标长宽切图 生成缩率图package com.beisun.mbp.util;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Rectangle;...
周末看书走神的思考,在这里简单说一说我的“打杂”经验,后面有时间再写写我是如何在“打杂”中偷懒,如何“高效打杂”节省时间学些新技术,如何在“打杂”中争取参与自己感兴趣的项目。作为一名后端“打杂”程序员(CRUD GUY)这些年从业的打杂经验:1.发觉写需求的人没有想清楚的地方(没发觉的话,后面背锅的背锅,扯嘴皮的扯嘴皮);2.有时候被迫画原型图给客户参考;3.站在测试角度写代码,有时候还得做部分功能的并发测试、压力测试(测试人员写并发测试报告、压力测试报告);4.接到需求后,做需求评估、分解需.