(十八)JDBC优化使用(一)
一、将增删改方法合并,优化代码
第十七篇的UserPOImpl.java类代码可以进行优化,因为增删改方法用的都是同一种执行方法executeUpdate(),对十七篇的例子进行优化如下:
2.1 搭建实验环境
A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。
B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):

2.2 创建一个web工程,并导入数据库驱动包。

2.3 编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。

UserPO.java
package po;
public class UserPO {
private String userName;
private String passWd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWd() {
return passWd;
}
public void setPassWd(String passWd) {
this.passWd = passWd;
}
}
解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。
2.4 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。

- UserPOI.java
package dao; import java.util.List; import po.UserPO; public interface UserPOI {
public boolean addUser(UserPO user); //增
public boolean delUser(String userName); //删
public boolean uptUser(UserPO user); //修改
public List<UserPO> gets(); //查
}
- UserPOImpl.java()
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) { //增加 String sql="insert into user values('"+user.getUserName()+"','"+user.getPassWd()+"') ";
return cud(sql);
} public boolean delUser(String userName) { //删除 String sql="delete from user where userName='"+userName+"'"; return cud(sql);
} public boolean uptUser(UserPO user){ //修改
String sql="update user set passWd='"+user.getPassWd()+"'where userName='"+user.getUserName()+"'";
return cud(sql);
} public List<UserPO> gets() { //查找全部
List<UserPO> list=new ArrayList<UserPO>();
Connection conn=null;
Statement stat=null;
ResultSet res=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
stat=conn.createStatement();
res=stat.executeQuery("select * from user");
while(res.next()){ //不能是if
UserPO user=new UserPO();
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
list.add(user); } } catch (Exception e) { e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && stat.isClosed()){
stat.close();
}
if(res!=null && res.isClosed()){
res.close();
}
}catch(Exception e){
e.printStackTrace();
} } return list;
} public boolean cud(String sql){ //增删改方法合并
boolean flag=false;
Connection conn=null;
Statement stat=null;
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD=""; try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(URL,USER,PASSWORD);
stat=conn.createStatement(); int res=stat.executeUpdate(sql);
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && !stat.isClosed()){
stat.close();
}
}catch(Exception e){
e.printStackTrace();
}
} return flag;
} }
解析: 把增删改方法合并为cud方法,使代码更简便。
2.5 创建测试类进行测试。
- UserTest.java
package test; import java.util.List; import org.junit.Test; import dao.userPOImpl;
import po.UserPO; public class UserTest {
@Test
public void UserPOTest(){
userPOImpl im=new userPOImpl(); UserPO user=new UserPO();
user.setUserName("张三");
user.setPassWd("123");
im.addUser(user);
} @Test
public void userPOget(){
userPOImpl im=new userPOImpl();
List<UserPO> list=im.gets();
for(int i=0;i<list.size();i++)
System.out.println(list.get(i).getUserName()); } @Test
public void delUserTest(){
userPOImpl im=new userPOImpl();
im.delUser("张三");
}
@Test
public void uptUserTest(){
userPOImpl im=new userPOImpl();
UserPO user=new UserPO();
user.setUserName("张三");
user.setPassWd("456");
im.uptUser(user);
}
}
二、使用预处理prepareStatement语句优化
2.1 编写javabean
UserPO.java
package po;
public class UserPO {
private String userName;
private String passWd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWd() {
return passWd;
}
public void setPassWd(String passWd) {
this.passWd = passWd;
}
}
2.2 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。
- UserPOI.java
1 package dao;
2
3 import java.util.List;
4
5 import po.UserPO;
6
7 public interface UserPOI {
8 public boolean addUser(UserPO user); //增
9 public boolean delUser(String userName); //删
10 public boolean uptUser(UserPO user); //修改
11 public List<UserPO> gets(); //查
12 }
- 一般我们专门编写一个DBUtil工具类,以实现数据库的各种操作方法:
DButils.java
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.List; public class DButils {
public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
Connection conn=null;
PreparedStatement stat=null;
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD=""; try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(URL,USER,PASSWORD);
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && !stat.isClosed()){
stat.close();
}
}catch(Exception e){
e.printStackTrace();
}
} return flag;
}
}
- 编写实现类(UserPOImpl.java)
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) { //增加 String sql="insert into user values(?,?)";
18 List<Object> list=new ArrayList<Object>();
19 list.add(user.getUserName());
20 list.add(user.getPassWd());
21 return DButils.cud(sql,list);
} public boolean delUser(String userName) { //删除 String sql="delete from user where userName=?";
27 List<Object> list=new ArrayList<Object>();
28 list.add(userName);
29 return DButils.cud(sql,list);
} public boolean uptUser(UserPO user){ //修改
String sql="update user set passWd=? where userName=?";
35 List<Object> list=new ArrayList<Object>();
36 list.add(user.getPassWd());
37 list.add(user.getUserName());
38 return DButils.cud(sql,list); } public List<UserPO> gets() { //查找全部
List<UserPO> list=new ArrayList<UserPO>();
Connection conn=null;
Statement stat=null;
ResultSet res=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
stat=conn.createStatement();
res=stat.executeQuery("select * from user");
while(res.next()){ //不能是if
UserPO user=new UserPO();
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
list.add(user); } } catch (Exception e) { e.printStackTrace();
}finally{
try{
if(conn!=null && !conn.isClosed()){
conn.close();
}
if(stat!=null && stat.isClosed()){
stat.close();
}
if(res!=null && res.isClosed()){
res.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
return list;
}
}
2.3 创建测试类进行测试。
- UserTest.java
1 package test;
2
3 import java.util.List;
4
5 import org.junit.Test;
6
7 import dao.userPOImpl;
8 import po.UserPO;
9
10 public class UserTest {
11 @Test
12 public void UserPOTest(){
13 userPOImpl im=new userPOImpl();
14
15 UserPO user=new UserPO();
16 user.setUserName("张三");
17 user.setPassWd("123");
18 im.addUser(user);
19 }
20
21 @Test
22 public void userPOget(){
23 userPOImpl im=new userPOImpl();
24 List<UserPO> list=im.gets();
25 for(int i=0;i<list.size();i++)
26 System.out.println(list.get(i).getUserName());
27
28 }
29
30 @Test
31 public void delUserTest(){
32 userPOImpl im=new userPOImpl();
33 im.delUser("张三");
34 }
35 @Test
36 public void uptUserTest(){
37 userPOImpl im=new userPOImpl();
38 UserPO user=new UserPO();
39 user.setUserName("张三");
40 user.setPassWd("456");
41 im.uptUser(user);
42 }
43 }
- 本例中的DBUtils代码可以优化为:
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List; public class DButils { /**
* 单例模式
*
*/
public static Connection conn=null;
static{
/*
* 把常量和公用的放在static块里加载
* */
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD=""; try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(URL,USER,PASSWORD);
}catch(Exception e){
e.printStackTrace();
} } public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
PreparedStatement stat=null;
try{
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
close(conn, stat, null);
} return flag;
} /**
* 关闭流
* @param conn 数据库连接
* @param stat 预处理指令
* @param res 返回结果集
*/
public static void close(Connection conn,PreparedStatement stat,ResultSet res){
try{
if(conn!=null && !conn.isClosed()){
conn.close();
if(stat!=null && !stat.isClosed()){
stat.close();
}
if(res!=null && !res.isClosed()){
res.close();
}
}
}catch(Exception e){
e.printStackTrace();
} } }
三、使用连接池优化jdbc
- 上个例子的DBUtils可以优化为:
package dao; import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DButils { /**
* 连接池
*/
static ComboPooledDataSource dateSource;
static{
dateSource=new ComboPooledDataSource();
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD="";
final String DRIVER="com.mysql.jdbc.Driver";
try {
dateSource.setDriverClass(DRIVER);
dateSource.setJdbcUrl(URL);
dateSource.setUser(USER);
dateSource.setPassword(PASSWORD);
dateSource.setMaxPoolSize(100);
dateSource.setMinPoolSize(10);
dateSource.setMaxStatements(10000);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
} /**
* 单例模式
*/
// public static Connection conn=null;
// static{
// /*
// * 把常量和公用的放在static块里加载
// * */
// final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
// final String USER="root";
// final String PASSWORD="";
//
// try{
// Class.forName("com.mysql.jdbc.Driver");
// conn=DriverManager.getConnection(URL,USER,PASSWORD);
// }catch(Exception e){
// e.printStackTrace();
// }
//
// } public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
PreparedStatement stat=null;
Connection conn=null;
try{
conn=dateSource.getConnection();
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
close(conn, stat, null);
} return flag;
} /**
* 关闭流
* @param conn 数据库连接
* @param stat 预处理指令
* @param res 返回结果集
*/
public static void close(Connection conn,PreparedStatement stat,ResultSet res){
try{
if(conn!=null && !conn.isClosed()){
conn.close();
if(stat!=null && !stat.isClosed()){
stat.close();
}
if(res!=null && !res.isClosed()){
res.close();
}
}
}catch(Exception e){
e.printStackTrace();
} } }
- 使用C3P0连接池需要导入相应的jar包。
四、优化总结
4.1 搭建实验环境
A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。
B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):

4.2 创建一个web工程,并导入数据库驱动包。

4.3 编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。

UserPO.java
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package po;public class UserPO { private String userName; private String passWd; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWd() { return passWd; } public void setPassWd(String passWd) { this.passWd = passWd; } } |
解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。
4.4 创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类和工具类。

- UserPOI.java
package dao; import java.util.List; import po.UserPO; public interface UserPOI {
public boolean addUser(UserPO user); //增
public boolean delUser(String userName); //删
public boolean uptUser(UserPO user); //修改
public List<UserPO> gets(); //查全部
public UserPO getByName(String userName); //按名字查人
}
- UserPOImpl.java()
package dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import po.UserPO; public class userPOImpl implements UserPOI { public boolean addUser(UserPO user) { //增加 String sql="insert into user values(?,?)";
List<Object> list=new ArrayList<Object>();
list.add(user.getUserName());
list.add(user.getPassWd());
return DButils.cud(sql,list);
} public boolean delUser(String userName) { //删除 String sql="delete from user where userName=?";
List<Object> list=new ArrayList<Object>();
list.add(userName);
return DButils.cud(sql,list);
} public boolean uptUser(UserPO user){ //修改
String sql="update user set passWd=? where userName=?";
List<Object> list=new ArrayList<Object>();
list.add(user.getPassWd());
list.add(user.getUserName());
return DButils.cud(sql,list); } public List<UserPO> gets() { //查找全部 String sql="select * from user";
return DButils.get(sql, null);
} public UserPO getByName(String userName){ //按名字找人
String sql="select * from user where userName=?";
List<Object> list=new ArrayList<Object>();
list.add(userName);
return (DButils.get(sql, list).size()==1)?DButils.get(sql, list).get(0):null; }
}
DButils.java
package dao; import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import com.mchange.v2.c3p0.ComboPooledDataSource; import po.UserPO; public class DButils { /**
* 连接池
*/
static ComboPooledDataSource dateSource;
static{
dateSource=new ComboPooledDataSource();
final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
final String USER="root";
final String PASSWORD="";
final String DRIVER="com.mysql.jdbc.Driver";
try {
dateSource.setDriverClass(DRIVER);
dateSource.setJdbcUrl(URL);
dateSource.setUser(USER);
dateSource.setPassword(PASSWORD);
dateSource.setMaxPoolSize(100);
dateSource.setMinPoolSize(10);
dateSource.setMaxStatements(10000);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
} /**
* 单例模式
*/
// public static Connection conn=null;
// static{
// /*
// * 把常量和公用的放在static块里加载
// * */
// final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
// final String USER="root";
// final String PASSWORD="";
//
// try{
// Class.forName("com.mysql.jdbc.Driver");
// conn=DriverManager.getConnection(URL,USER,PASSWORD);
// }catch(Exception e){
// e.printStackTrace();
// }
//
// } public static boolean cud(String sql,List<Object> list){ //增删改方法合并
boolean flag=false;
PreparedStatement stat=null;
Connection conn=null;
try{
conn=dateSource.getConnection();
stat=conn.prepareStatement(sql); //对sql语句进行预处理 if(list!=null){
for(int i=0;i<list.size();i++){ //对list中存放的?里的值循环,并对sql中的?赋值
stat.setObject(i+1, list.get(i));
}
} int res=stat.executeUpdate(); //执行预处理语句指令
flag=(res>0)?true:false; }catch(Exception e){
e.printStackTrace();
}finally{
close(conn, stat, null);
} return flag;
} /**
* 关闭流
* @param conn 数据库连接
* @param stat 预处理指令
* @param res 返回结果集
*/
public static void close(Connection conn,PreparedStatement stat,ResultSet res){
try{
if(conn!=null ){
conn.close();
if(stat!=null ){
stat.close();
}
if(res!=null ){
res.close();
}
}
}catch(Exception e){
e.printStackTrace();
} } /**
* 获取连接池中的连接
*/
public static Connection getConn(){
try {
return dateSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} /**
* 数据库查找
* @param sql
* @param list
* @return
*/
public static List<UserPO> get(String sql,List<Object> list){
List<UserPO> users=new ArrayList<UserPO>(); Connection conn=getConn();
PreparedStatement stat=null;
ResultSet res=null;
try {
stat=conn.prepareStatement(sql); //sql语句预处理 if(list!=null){
for(int i=0;i<list.size();i++){
stat.setObject(i+1, list.get(i)); //预处理语句?赋值
}
} res=stat.executeQuery(); //执行sql语句
UserPO user=null;
while(res.next()){
user=new UserPO();
user.setUserName(res.getString("userName"));
user.setPassWd(res.getString("passWd"));
users.add(user);
} } catch (SQLException e) {
e.printStackTrace();
}finally{
close(conn,stat,res);
}
return users;
}
}
2.5 创建测试类进行测试。
- UserTest.java


1 package test;
2
3 import java.util.List;
4
5 import org.junit.Test;
6
7 import dao.userPOImpl;
8 import po.UserPO;
9
10 public class UserTest {
11 @Test
12 public void UserPOTest(){
13 userPOImpl im=new userPOImpl();
14
15 UserPO user=new UserPO();
16 user.setUserName("张三");
17 user.setPassWd("123");
18 im.addUser(user);
19 }
20
21 @Test
22 public void userPOget(){
23 userPOImpl im=new userPOImpl();
24 List<UserPO> list=im.gets();
25 for(int i=0;i<list.size();i++)
26 System.out.println(list.get(i).getUserName());
27
28 }
29
30 @Test
31 public void delUserTest(){
32 userPOImpl im=new userPOImpl();
33 im.delUser("张三");
34 }
35 @Test
36 public void uptUserTest(){
37 userPOImpl im=new userPOImpl();
38 UserPO user=new UserPO();
39 user.setUserName("张三");
40 user.setPassWd("456");
41 im.uptUser(user);
42 }
43 }

(十八)JDBC优化使用(一)的更多相关文章
- 燕十八MySQL优化学习笔记
观察 show status; 里面的这三个参数;Queries Threads_connected Threads_running判断周期性变化 -------------------------- ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...
- 我的MYSQL学习心得(十六) 优化
我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 最全的MySQL基础【燕十八传世】
1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- NeHe OpenGL教程 第二十八课:贝塞尔曲面
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- COS访谈第十八期:陈天奇
COS访谈第十八期:陈天奇 [COS编辑部按] 受访者:陈天奇 采访者:何通 编辑:王小宁 简介:陈天奇,华盛顿大学计算机系博士生,研究方向为大规模机器学习.他曾获得KDD CUP 20 ...
- Java进阶(三十八)快速排序
Java进阶(三十八)快速排序 前言 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 ...
随机推荐
- Spring Boot 项目在 IntelliJ IDEA 中配置 DevTools 实现热部署(macOS 系统)
要配置的内容: 1.Preference -> Build, Execution, Deployment -> Complier -> Build project automatic ...
- canvas圆形进度条(逆时针)
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- Robot Framework--变量
Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}, @{LIST} 和 &{DICT} 来定义. 此外, 环境变量可以直接使用语法 %{ENV ...
- java疑问
1. new String("abc")究竟创建几个对象? 答: 一个或两个, 如果常量池中原来有"abc", 那么只创建一个对象; 如果常量池中原来没有&qu ...
- sqlplus、exp、imp不是内部或外部命令,也不是可运行的程序
oracle 想exp导出数据库,参考网上的作业,进入CMD命令,黑屏后输入命令出现EXP后出现EXP不能内部或外部命令. 网上找到下列解决方法 摘自:http://blog.csdn.net/suz ...
- PHP 函数运行的内存
函数在运行期间占用的内存,在运行结束后会被回收.但是还有问题不明白,函数内部的echo在函数执行结束后还占用内存吗??? //PHP 函数执行完内存就会被收回 function test() { ec ...
- Mongodb 查询优化(慢查询Profiling)
开启慢查询Profiling Profiling级别说明 0:关闭,不收集任何数据. 1:收集慢查询数据,默认是100毫秒. 2:收集所有数据 1.通过修改配置文件开启Profiling 修改启动mo ...
- Redis学习之一--基础知识
一.定义 REmote DIctionary Server(Redis) 是一个以字典结构存储数据的key-value存储系统:使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化 ...
- 块状链表 codevs 2333弹飞绵羊
块状链表,分块处理,先预处理每一个点跳到下一个块 跳到哪,步数.然后修改的时候,修该那一个块即可 #include<cstdio>#include<cmath>int a[20 ...
- Pycharm使用常见问题
Pycharm下载 下载链接:https://www.jetbrains.com/pycharm/download/ 分为专业版和社区版,社区版也能满足学习需求 Pycharm专业版激活 使用前请将& ...