1.数据库操作的主要类及接口

DriverManage:活得数据库连接
Connection:每个connection的实例化对象都表示一个数据库的连接
数据库操作的类及接口:
Statement类,PreparedStaement类
数据库的查询:
ResultSet类
调用存储过程:
CallabStatement

2.jdbc连接操作

最后附上百度回答的经典解释,本人看完后恍然大悟的感觉

JDBC访问一般分为如下流程:
1、加载JDBC驱动程序:
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
例如:

try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ;//8.0后改为com.mysql.cj.jdbc.Driver
}catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace() ;
}

正确的写法如下:
https://blog.csdn.net/weixin_41899098/article/details/91393080

怎么使用jdbc呢?( 我现在用的是myeclipse)不需要建立classpath环境变量
0.下载连接的jar包,放在任意目录,如d:\java\jdk-11\jdbc
a. 新建一个project,命名为test
b. 然后鼠标右键test,选择Build Path–>Configure Build Path
c. 在libraries选项卡上点击一下ModulePath
d. 再单击Add External JARs,选在刚才目录(d:\java\jdk-11\jdbc)下,刚才下载的mysql-connector-java-8.0.19.jar
e. 返回到工作界面,test项目下多出了一个Referenced Libraries
f.在项目文件里建立类,使用如下代码

try{ //加载MySql的驱动类 Class.forName("com.mysql.cj.jdbc.Driver") ;//8.0后改为com.mysql.cj.jdbc.Driver
}catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace() ;
}

成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
连接URL定义了连接数据库时的协议、子协议、数据源标识。
书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为
gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

3、创建数据库的连接
要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
使用DriverManager的getConnectin(String url,String username,String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
例如:
//连接MySql数据库,用户名和密码都是root

String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{ Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){ System.out.println("数据库连接失败!"); se.printStackTrace() ;
}

解决可能报时区错误****You must configure either the server or JDBC driver (via the serverTimezone conf)
在url路径中的数据库名称后面添加:?serverTimezone=UTC
正确的方法应该是:

String url = "jdbc:mysql://localhost:3306/test?serverTimezone=UTC" ;//这里使用正确的url地址
String username = "root" ;
String password = "root" ;
try{ Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){ System.out.println("数据库连接失败!"); se.printStackTrace() ;
}

4、创建一个Statement
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:

Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:

ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;

6、处理结果
两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){ String name = rs.getString("name") ; String pass = rs.getString(1); // 此方法比较高效(列是从左到右编号的,并且从列1开始)
}

7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象

if(rs != null){ // 关闭记录集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; }
}
if(stmt != null){ // 关闭声明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; }
}
if(conn != null){ // 关闭连接对象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; }
}

原文链接:https://blog.csdn.net/qq_39936434/article/details/80059901

mysql8.0以后的jar包引入配置
1.引用外部库 mysql-connector-java-8.0.版本的jar
2.jdbc驱动类:com.mysql.jdbc.Driver 改成 com.mysql.cj.jdbc.Driver
3.jdbcUrl:jdbc:mysql://{ip}:{port}/{db}?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

3.jdbc连接操作的一个例子
public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="**********";public static void main(String[] args) {//创建数据库连接Connection connection=null;try {Class.forName(DBDRIVER);} catch (ClassNotFoundException e) {System.out.println("找不到驱动程序类,加载驱动失败");e.printStackTrace();}//活得数据库连接try {connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);} catch (SQLException e) {System.out.println("数据库连接失败");e.printStackTrace();}System.out.println(connection);//关闭数据库try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

结果:
com.mysql.cj.jdbc.ConnectionImpl@707194ba

3.使用Statement类进行数据库CURD操作—插入数据
public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="********";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象java.sql.Statement statement=null;Class.forName(DBDRIVER);String sql="insert into  user(name,password,age,sex,birthday) values ('风清扬','fengqingyang',80,'男','1968-06-19')";String name="桃谷六仙";String password="taoguliuxian";int age=33;String sex="男";String birthday="2000-05-28";String sql2="insert into  user(name,password,age,sex,birthday) values ('"+name+"','"+password+"',"+age+",'"+sex+"','"+birthday+"')";//获得数据库连接connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//实例化statement对象statement=connection.createStatement();//statement.execute(sql);statement.execute(sql2);//关闭数据库  statement.close();connection.close();}}

结果:


4.使用Statement类进行数据库CURD操作—修改数据
public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象java.sql.Statement statement=null;Class.forName(DBDRIVER);int id=1;String name="不戒和尚";String password="bujieheshang";int age=33;String sex="男";String birthday="1969-03-18";String sqlupdate="update  user set name='"+name+"',password='"+password+"',age="+age+",sex='"+sex+"',birthday='"+birthday+"' where id="+id;//获得数据库连接connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//实例化statement对象statement=connection.createStatement();statement.execute(sqlupdate);//关闭数据库  statement.close();connection.close();}}

结果:

5.使用Statement类进行数据库CURD操作—删除数据
public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象java.sql.Statement statement=null;Class.forName(DBDRIVER);int id=8;String sqldelte="delete from user where id="+id;//String sqlupdate="update  user set name='"+name+"',password='"+password+"',age="+age+",sex='"+sex+"',birthday='"+birthday+"' where id="+id;//获得数据库连接connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//实例化statement对象statement=connection.createStatement();statement.execute(sqldelte);//关闭数据库  statement.close();connection.close();}}

结果:

6.使用ResultSet接口进行数据库CURD操作—查询数据
public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="*************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象java.sql.Statement statement=null;Class.forName(DBDRIVER);    String sqlquery="select id,name,password,age,sex,birthday from user";        //String sqldelte="delete from user where id="+id;//String sqlupdate="update  user set name='"+name+"',password='"+password+"',age="+age+",sex='"+sex+"',birthday='"+birthday+"' where id="+id;//String sqlinsert="insert into  user(name,password,age,sex,birthday) values ('"+name+"','"+password+"',"+age+",'"+sex+"','"+birthday+"')";//获得数据库连接connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//实例化statement对象statement=connection.createStatement();//创建查询结果集对象ResultSet resultSet=null;resultSet=statement.executeQuery(sqlquery);while (resultSet.next()) {//依次取数据//按字段名取出各个字段的值int id=resultSet.getInt("id");String name=resultSet.getString("name");String password=resultSet.getString("password");int age=resultSet.getInt("age");String sex=resultSet.getString("sex");Date date=resultSet.getDate("birthday");System.out.println("编号:"+id+" 姓名:"+name+" 密码:"+password+" 年龄:"+age+" 性别:"+sex+" 出生日期:"+date.toString());System.out.println("****************************");}//关闭数据库  resultSet.close();statement.close();connection.close();}}

结果
编号:1 姓名:不戒和尚 密码:bujieheshang 年龄:33 性别:男 出生日期:1969-03-18


编号:2 姓名:穆念慈 密码:munianci 年龄:17 性别:女 出生日期:2002-06-14


编号:3 姓名:岳不群 密码:yuebuqun 年龄:26 性别:男 出生日期:1999-06-08


编号:4 姓名:令狐冲 密码:linghuchong 年龄:23 性别:男 出生日期:2009-09-08


编号:5 姓名:任盈盈 密码:renyingying 年龄:18 性别:女 出生日期:2010-09-28


编号:6 姓名:仪琳 密码:yiling 年龄:18 性别:女 出生日期:2010-09-08


编号:7 姓名:任我行 密码:renwoxing 年龄:38 性别:男 出生日期:2001-03-08


编号:9 姓名:田伯光 密码:tianboguang 年龄:23 性别:男 出生日期:2009-01-31


编号:10 姓名:蓝凤凰 密码:lanfenghuang 年龄:21 性别:女 出生日期:2004-03-13


编号:11 姓名:岳灵珊 密码:yuelingshan 年龄:22 性别:女 出生日期:2001-03-15


编号:12 姓名:林平之 密码:lingpingzhi 年龄:21 性别:男 出生日期:2003-06-25


编号:13 姓名:风清扬 密码:fengqingyang 年龄:80 性别:男 出生日期:1954-06-19


编号:14 姓名:桃谷六仙 密码:taoguliuxian 年龄:33 性别:男 出生日期:2000-05-28


编号:15 姓名:向问天 密码:xiangwentian 年龄:23 性别:男 出生日期:2011-03-18


7.使用PreparedStatement接口进行数据库CURD操作—插入数据

PreparedStatement是主流使用方式,Statement方式容易产生注入漏洞

public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="****************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;String name="达摩老祖";String password="damolaozu";int age=93;String sex="男";String birthday="1919-03-18";//util.Date下的日期转变为sql.Date下的日期java.util.Date temp=null;//创建日期对象temp=new SimpleDateFormat("yyyy-MM-dd").parse(birthday);java.sql.Date birth=new java.sql.Date(temp.getTime());String sqlinsert="insert into  user(name,password,age,sex,birthday) values (?,?,?,?,?)";//问号是占位符,按顺序为1,2,3,4,5Class.forName(DBDRIVER);    //String sqlquery="select id,name,password,age,sex,birthday from user";      //String sqldelte="delete from user where id="+id;//String sqlupdate="update  user set name='"+name+"',password='"+password+"',age="+age+",sex='"+sex+"',birthday='"+birthday+"' where id="+id;//获得数据库连接connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//通过sql语句实例化PreparedStatement对象,pstatement=connection.prepareStatement(sqlinsert);pstatement.setString(1, name);pstatement.setString(2, password);pstatement.setInt(3, age);pstatement.setString(4, sex);pstatement.setDate(5, birth);//执行预Statement,活得int类型返回值int rows=pstatement.executeUpdate();System.out.println(rows+"条数据受影响");pstatement.close();connection.close();}}

结果:
1条数据受影响

8.使用PreparedStatement接口进行数据库CURD操作—查询数据
public class MyConnection {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="*****************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;String keyword="不";//String sqlinsert="insert into  user(name,password,age,sex,birthday) values (?,?,?,?,?)";ResultSet resultSet=null;String sqlquery="select id,name,password,age,sex,birthday from user where name like ? or password like ? or sex like ?";        Class.forName(DBDRIVER);    //String sqlquery="select id,name,password,age,sex,birthday from user";      //String sqldelte="delete from user where id="+id;//String sqlupdate="update  user set name='"+name+"',password='"+password+"',age="+age+",sex='"+sex+"',birthday='"+birthday+"' where id="+id;//获得数据库连接connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//通过sql语句实例化PreparedStatement对象,pstatement=connection.prepareStatement(sqlquery);pstatement.setString(1, "%"+keyword+"%");pstatement.setString(2, "%"+keyword+"%");pstatement.setString(3, "%"+keyword+"%");resultSet=pstatement.executeQuery();//遍历结果集while (resultSet.next()) {int id=resultSet.getInt(1);//用字段名id也可以String name=resultSet.getString(2);String password=resultSet.getString(3);int age=resultSet.getInt(4);String sex=resultSet.getString(5);java.util.Date date=resultSet.getDate(6);//结果集里是util.Date下的日期System.out.println("编号:"+id+" 姓名:"+name+" 密码:"+password+" 年龄:"+age+" 性别:"+sex+" 出生日期:"+date.toString());System.out.println("****************************");}resultSet.close();pstatement.close();connection.close();}}

结果:
编号:1 姓名:不戒和尚 密码:bujieheshang 年龄:33 性别:男 出生日期:1969-03-18


编号:3 姓名:岳不群 密码:yuebuqun 年龄:26 性别:男 出生日期:1999-06-08


9.处理clob大数据对象

创建数据表,包含大数据clob对象,其中note字段是longtext类型

create table userclob(id int auto_increment primary key,name varchar(30) not null,note longtext
)


处理大数据

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="**********";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;String name="李逍遥";String sqlinsert="insert into  userclob(name,note) values (?,?)";//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlinsert);//创建预处理对象File file=new File("D:"+File.separator+"mylog.txt");InputStream input=null;input=new FileInputStream(file);//通过输入流读取文件pstatement.setString(1, name);pstatement.setAsciiStream(2, input,(int)file.length());pstatement.executeUpdate();//关闭连接input.close();pstatement.close();connection.close();}
}

创建d盘mylog.txt文件,,输入大量文本,注意存储编码等

结果(查询数据库):

9.读取数据库中的longtext类型字段(clob大数据对象)
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;int id=2;String sqlquery="select name,note from userclob where id=?";//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER); //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery);//创建预处理对象pstatement.setInt(1, id);resultSet=pstatement.executeQuery();if (resultSet.next()) {String name=resultSet.getString(1);StringBuffer note=new StringBuffer();System.out.println("姓名:"+name);InputStream inputStream=resultSet.getAsciiStream(2);Scanner scan=new Scanner(inputStream);scan.useDelimiter("\r\n");//将文本换行作为分隔符while (scan.hasNext()) {note.append(scan.next()).append("\n");}System.out.println("内容:"+note.toString());inputStream.close();}//关闭连接resultSet.close();pstatement.close();connection.close();}}

结果:
姓名:李逍遥
内容:混合云如今很流行。几乎每个IT公司都声称已部署了解决方案,但实际上实现的却很少。相反,它们拥有与多个云实例进行某种程度集成的私有云。

在接下来的文章中,作者将尝试阐明使混合云环境混合的组成,以及IT组织在评估来自解决方案供应商的解决方案时应遵循的一些指导原则。
什么是 / 什么不是混合云?

在深入探讨之前,让我们来对什么是混合云做一个层次设置。同样,让我们确定一下什么不是混合云环境也很重要。
混合云不仅仅是私有云和公有云的组合。它不仅是按需将工作负载从on-prem到off-prem的功能。混合云是资源的统一配置和管理,可以在多个环境(公有云、私有云或边缘环境)中以一致的方式交付和使用服务。
按照定义,由这么多IT公司实施的私有-公有云部署并不是混合云环境,因为资源的配置和管理是通过多个控制台和窗格执行的。为各种服务提供具有多种配置和管理工具的多重云的激增,加剧了IT部门经常遇到的云疲劳,并导致从云中返回应用程序和数据。
我们是如何造成这种云疲劳的?
……太长不再贴入

10.使用getclob读取数据库中的longtext类型字段(clob大数据对象)
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="***********";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;int id=2;String sqlquery="select name,note from userclob where id=?";//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery);//创建预处理对象pstatement.setInt(1, id);resultSet=pstatement.executeQuery();if (resultSet.next()) {String name=resultSet.getString(1);System.out.println("姓名:"+name);Clob clob=(Clob) resultSet.getClob(2);String note=clob.getSubString(1,(int)clob.length());System.out.println("内容:"+note.toString());}//关闭连接resultSet.close();pstatement.close();connection.close();}}

结果:
姓名:李逍遥
内容:混合云如今很流行。几乎每个IT公司都声称已部署了解决方案,但实际上实现的却很少。相反,它们拥有与多个云实例进行某种程度集成的私有云。

在接下来的文章中,作者将尝试阐明使混合云环境混合的组成,以及IT组织在评估来自解决方案供应商的解决方案时应遵循的一些指导原则。
什么是 / 什么不是混合云?

在深入探讨之前,让我们来对什么是混合云做一个层次设置。同样,让我们确定一下什么不是混合云环境也很重要。
混合云不仅仅是私有云和公有云的组合。它不仅是按需将工作负载从on-prem到off-prem的功能。混合云是资源的统一配置和管理,可以在多个环境(公有云、私有云或边缘环境)中以一致的方式交付和使用服务。
按照定义,由这么多IT公司实施的私有-公有云部署并不是混合云环境,因为资源的配置和管理是通过多个控制台和窗格执行的。为各种服务提供具有多种配置和管理工具的多重云的激增,加剧了IT部门经常遇到的云疲劳,并导致从云中返回应用程序和数据。
我们是如何造成这种云疲劳的?
……太长不再贴入

10.使用getclob配合truncate部分读取数据库中的longtext类型字段(clob大数据对象)
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="**************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;int id=2;String sqlquery="select name,note from userclob where id=?";//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);   //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery);//创建预处理对象pstatement.setInt(1, id);resultSet=pstatement.executeQuery();if (resultSet.next()) {String name=resultSet.getString(1);System.out.println("姓名:"+name);Clob clob=(Clob) resultSet.getClob(2);String note=clob.getSubString(1,(int)clob.length());clob.truncate(100);//只能读100个字符的内容System.out.println("读取部分内容");note=clob.getSubString(1,(int)clob.length());System.out.println("内容:"+note.toString());}     //关闭连接resultSet.close();pstatement.close();connection.close();}}

结果:
姓名:李逍遥
读取部分内容
内容:混合云如今很流行。几乎每个IT公司都声称已部署了解决方案,但实际上实现的却很少。相反,它们拥有与多个云实例进行某种程度集成的私有云。

在接下来的文章中,作者将尝试阐明使混合云环境混合的组成,以

11.读取longblob类型的字段(处理二进制大数据)

创建数据库表

create table userblob(id int auto_increment primary key,name varchar(30) not null,photo longblob
)


d盘上存储一张图片

写入数据

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="*************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;String name="蓝凤凰";String sqlinsert="insert into  userblob(name,photo) values (?,?)";//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlinsert);//创建预处理对象File file=new File("D:"+File.separator+"photo.jpg");InputStream input=new FileInputStream(file);pstatement.setString(1, name);//设置第1列的内容pstatement.setBinaryStream(2, input,(int)file.length());//设置输入流pstatement.executeUpdate();//更新数据库System.out.println("已经完成写入操作");pstatement.close();connection.close();}}
12.读取longblob类型的字段(处理二进制大数据)
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="***************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;int id=1;String sqlquery="select name,photo from userblob where id=?";       //通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery);//创建预处理对象pstatement.setInt(1,id);resultSet=pstatement.executeQuery();//执行查询if (resultSet.next()) {String name=resultSet.getString(1);System.out.println("姓名"+name);InputStream inputStream=resultSet.getBinaryStream(2);File file=new File("D:"+File.separator+"loadphoto.jpg");OutputStream output=null;output=new FileOutputStream(file);int temp=0;while ((temp=inputStream.read())!=-1) {output.write(temp); }inputStream.close();}pstatement.close();connection.close();}}

结果:
姓名蓝凤凰
d盘目录下:

13.使用getBlob读取longblob类型的字段(处理二进制大数据)
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="**************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;int id=1;String sqlquery="select name,photo from userblob where id=?";        //通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery);//创建预处理对象pstatement.setInt(1,id);resultSet=pstatement.executeQuery();//执行查询if (resultSet.next()) {String name=resultSet.getString(1);System.out.println("姓名"+name);Blob blob=resultSet.getBlob(2);File file=new File("D:"+File.separator+"loadphoto2.jpg");OutputStream output=null;output=new FileOutputStream(file);output.write(blob.getBytes(1, (int)blob.length()));output.close();}pstatement.close();connection.close();}}

结果:
姓名蓝凤凰
d盘目录下

13.可滚动的结果集

实际开发中可滚动结果集耗费内存较多,谨慎使用

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="******************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;String sqlquery="select id,name,password,age,sex,birthday from user";       //通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//创建预处理对象,获取一个可修改的结果集resultSet=pstatement.executeQuery();//执行查询resultSet.absolute(1);//第2条数据   print(resultSet,1);System.out.println("输入第1条数据");resultSet.beforeFirst();//向前1条数据print(resultSet,1);System.out.println("跑到记录最后");resultSet.afterLast();print(resultSet, -1);//关闭连接resultSet.close();pstatement.close();connection.close();  }public static void print(ResultSet rs,int re) throws Exception{if (re>0) {rs.next();//顺序查}else {rs.previous();//逆序查}int id=rs.getInt(1);String name=rs.getString(2);String password=rs.getString(3);int age=rs.getInt(4);String sex=rs.getString(5);java.util.Date date=rs.getDate(6);System.out.println("编号:"+id+" 姓名:"+name+" 密码:"+password+" 年龄:"+age+" 性别:"+sex+" 出生年月:"+date);System.out.println("***************");}
}

结果:
编号:2 姓名:穆念慈 密码:munianci 年龄:17 性别:女 出生年月:2002-06-14


输入第1条数据
编号:1 姓名:不戒和尚 密码:bujieheshang 年龄:33 性别:男 出生年月:1969-03-18


跑到记录最后
编号:16 姓名:达摩老祖 密码:damolaozu 年龄:93 性别:男 出生年月:1919-03-17


14.使用结果集插入数据
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="*******";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;String sqlquery="select id,name,password,age,sex,birthday from user";      //通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//创建预处理对象,活得可更新的结果集resultSet=pstatement.executeQuery();//执行查询//移动到插入的一行resultSet.moveToInsertRow();//设置插入的内容resultSet.updateString("name", "曲洋");resultSet.updateString("password", "quyang");resultSet.updateInt("age", 33);resultSet.updateString("sex", "男");resultSet.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));//转换成sqlDate//真正提交数据resultSet.insertRow();//关闭连接resultSet.close();pstatement.close();connection.close();}
}

结果:

15.使用结果集更新数据
public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="***************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;String sqlquery="select id,name,password,age,sex,birthday from user where id=?";      //通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlquery,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//创建预处理对象,活得可更新的结果集pstatement.setInt(1, 15);resultSet=pstatement.executeQuery();//执行查询resultSet.last();//到最后一行resultSet.updateString("name", "左冷禅");resultSet.updateString("password", "zuolingchan");resultSet.updateInt("age", 53);resultSet.updateString("sex", "男");resultSet.updateDate("birthday",new java.sql.Date(new java.util.Date().getTime()));//转换成sqlDate//真正提交数据resultSet.updateRow();//关闭连接resultSet.close();pstatement.close();connection.close();}
}

结果:

16.使用结果集删除数据

都要将指针移到最后一行
这些操作不如直接使用prepratedStatement效率高

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="*****************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;String sqlquery="select id,name,password,age,sex,birthday from user where id=?";        //通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库     pstatement=connection.prepareStatement(sqlquery,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//创建预处理对象,活得可更新的结果集        pstatement.setInt(1, 15);       resultSet=pstatement.executeQuery();//执行查询resultSet.last();//到最后一行 resultSet.deleteRow();//关闭连接resultSet.close();pstatement.close();connection.close();}
}

结果:左冷禅不见了

17.批处理操作

两个方法:
addBatch()//更新批处理
excuteBatch()//执行批处理

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="***************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;String sqlinsert="insert into  user(name,password,age,sex,birthday) values (?,?,?,?,?)";//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER); //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库pstatement=connection.prepareStatement(sqlinsert,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//创建预处理对象,活得可更新的结果集for (int i = 0; i < 6; i++) {pstatement.setString(1, "桃谷六仙"+i);pstatement.setString(2, "taoguliuxian"+i);pstatement.setInt(3, 26);pstatement.setString(4, "男");pstatement.setDate(5,new java.sql.Date(new java.util.Date().getTime()));//转换成sqlDatepstatement.addBatch();//加入批处理,等待执行}int temp[]=pstatement.executeBatch();System.out.println("更新了"+temp.length+"条数据");//关闭连接pstatement.close();connection.close();}
}

结果:
更新了6条数据

17.事务操作

如果想要操作事务的话,则必须按照以下步骤完成:
1、取消掉自动提交:每次执行数据库更新的时候实际上发出SQL命令后就已经提交上去了
2、开始事务
3、进行一系列的操作
4、如果操作全部合格,则提交事务
5、如果发现一个地方有问题,则可以进行回滚
6、或者设置一个SavePoint保存事务的提交点

jdbc中的事务处理
1、取消掉Connection中设置的自动提交方式为:conn.setAutoCommit(false);
2、如果批处理操作成功,则执行提交事务:conn.commit();
3、如果操作失败,则肯定会引发异常,在异常处理中让事务回滚:conn.rollback();
4、如果需要,可以设置Savepoint:Savepoint sp=conn.setSavepoint();

18.DatabaseMetaData数据库元数据

读取版本号、主键等

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="****************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象ResultSet resultSet=null;DatabaseMetaData dmd=null;//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);   //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库dmd=(DatabaseMetaData) connection.getMetaData();System.out.println("数据库名称:"+dmd.getDatabaseProductName());//获得数据库名称System.out.println("数据库名称:"+dmd.getDatabaseMajorVersion());//获取数据库主版本号System.out.println("数据库名称:"+dmd.getDatabaseMajorVersion()+"."+dmd.getDatabaseMinorVersion());//获取数据库主、次版本号resultSet=dmd.getPrimaryKeys(null, null, "user");while (resultSet.next()) {System.out.println("表类别:"+resultSet.getString(1));System.out.println("表模式:"+resultSet.getString(2));System.out.println("表名称:"+resultSet.getString(3));System.out.println("列名称:"+resultSet.getString(4));System.out.println("主键序列号:"+resultSet.getString(5));System.out.println("主键名称:"+resultSet.getString(6));}//关闭连接connection.close();}
}

结果:
数据库名称:MySQL
数据库名称:8.0
表类别:mysql
表模式:null
表名称:user
列名称:Host
主键序列号:1
主键名称:PRIMARY
表类别:mysql
表模式:null
表名称:user
列名称:User
主键序列号:2
主键名称:PRIMARY
表类别:test0306
表模式:null
表名称:user
列名称:id
主键序列号:1
主键名称:PRIMARY

读取结果集元数据

public class BinaryDemo {//定义Mysql数据库驱动程序public static final String DBDRIVER="com.mysql.cj.jdbc.Driver";//定义mysql数据库的连接地址public static final String DBURL="jdbc:mysql://localhost:3306/test0306?serverTimezone=UTC";//定义用户名public static final String DBUSER="root";//定义密码public static final String DBPASSWORD="************";public static void main(String[] args) throws Exception {//创建数据库连接Connection connection=null;//数据库操作对象PreparedStatement pstatement=null;ResultSet resultSet=null;ResultSetMetaData rsmd=null;//通过反射加载数据库驱动并连接数据库,创建预处理对象Class.forName(DBDRIVER);  //反射加载数据库驱动connection=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);//连接数据库 String sqlquery="select id,name,password,age,sex,birthday from user";        pstatement=connection.prepareStatement(sqlquery);rsmd=(ResultSetMetaData) pstatement.getMetaData();System.out.println("一共返回"+rsmd.getColumnCount()+"列数据");if (rsmd.isAutoIncrement(1)) {System.out.println(rsmd.getColumnName(1)+"列是自动增长列");}//关闭连接resultSet.close();connection.close();}
}

结果:
一共返回6列数据
id列是自动增长列

李兴华java开发实战经典---Java数据库编程相关推荐

  1. java web开发实战经典 源码_李兴华 java_web开发实战经典 源码 完整版收集共享

    李兴华 java_web开发实战经典 源码 完整版收集共享 01f8a7  在  2018-11-07 20:41:33  上传  10.92 MB 第1章 JAVA WEB开发简介 1.1.WEB发 ...

  2. 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网

    资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...

  3. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

    资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...

  4. 吃一堑长一智!java开发实战经典答案百度云

    第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率. 三面主管面 ...

  5. Java开发实战经典 目录

    目录 第1部分  Java基础程序设计 第1章  Java概述及开发环境搭建 2 视频讲解:35分钟 1.1  认识Java 2 1.1.1  什么是Java 2 1.1.2  Java语言的特点 3 ...

  6. 2021年Java开发实战!java培训视频网站

    K8S:深入浅出Kubernetes(理论+实战) Kubernetes(k8s)是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌 ...

  7. Java开发实战!java环境搭建是什么意思

    前言 设计模式是我们编程道路上绕不开的一环,用好了设计模式能够让代码拥有良好的维护性.可读性以及扩展性,它仿佛就是"优雅"的代名词,各个框架和库也都能见到它的身影. 正是因为它有种 ...

  8. 李兴华java开发实战经典---新IO

    1.Buffered缓冲技术基本概述 position,limit,capacity三个变量完成了缓冲区的操作代码 position:表示下一个缓冲区读取或写入的操作指针,每向缓冲区中写入数据的时候此 ...

  9. 李兴华java开发实战经典-枚举

    1.枚举的作用 class Color{private String name;public static final Color RED=new Color("红色");publ ...

  10. GitHub上标星75k+超牛的《Java面试突击版》,java开发实战经典第二版答案

    运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1.自我介绍.(你可千万这样介绍: "我叫某某,性别,来自哪里,学校是哪个,自己爱干什么" ...

最新文章

  1. MySQL 存储过程传参之in, out, inout 参数用法
  2. 经典的导航二级式导航菜单增强版
  3. 2019与下一个十年:我们将要放弃的和将要拥抱的
  4. php打开gd和mysql_PHP怎么开启mysql, gd, curl, mbstring支持?
  5. 自从掌握了Selenium自动化测试框架设计,我在公司都横着走!
  6. 定制iOS 7中的导航栏和状态栏
  7. tcpdump/editcap等工具保存文件时名称中自定义添加日期/时间
  8. 慎用 supportedRuntime
  9. 疫情期间,世界顶尖艺术学院-伦敦艺术大学开启教学新模式
  10. 计算机系统 I 第二章 逻辑门与逻辑函数化简 学习笔记
  11. Redis雪崩效应以及解决方案
  12. 图解通信原理与案例分析-14:“大哥大”与1G模拟蜂窝移动通信案例--频率调制与频分多址FDMA
  13. flashpaper java_FlashPaper API 说明
  14. python三国演义人物出场_Python教你查询《三国演义》书籍人物出场次序
  15. 虾米音乐关停:网友泪崩 一代人的青春落幕
  16. 2023年武汉市中等职业学校技能大赛 “网络搭建与应用”
  17. 关于荧光染料(FITC、RB罗丹明、Cy3,Cy3.5,Cy5,Cy5.5,Cy7,Cy7.5)
  18. 短期目标:三月、四月、五月
  19. Microbalze Vitis bug:cannot suspend TCF error report Stalled on memory access
  20. Jetpack:Lifecycle 和 LiveData

热门文章

  1. Kali-linux:nmap命令
  2. 数字ic验证工程师面试题|ic验证面试常问88道
  3. 【知识梳理】《Kafka权威指南》知识梳理
  4. Messenger Group Redesign - 缓解群组社交压力设计思考
  5. .NET面试题精简版
  6. 《深入浅出通信原理》连载
  7. 永磁直驱风机matlab模型,直驱永磁最大功率捕捉matlab仿真建模模型(风力发电)...
  8. 大神总结的一套PCB学习方法! 真得很受用!
  9. matlab数字仿真实验,matlab数值仿真
  10. 俄罗斯方块源代码 java_俄罗斯方块 Java程序源代码 在eclipse上运行