package cn.itcast.jdbctemplate;

 import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate; import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map; /*
* 1. 要求 JdbcTemplate
* 2. jdbcUtils工具类直接拿来用(druid.properties)
* 3. 插入员工数据(完整的)
* 4. 删除员工数据(按照员工编号删除)
* 5. 修改员工数据(修改李逵的工资、奖金、部门)
* 6. 查询所有工资大于20000万的员工, 按工资降序排列
* 7. 查询所有在 2007-5-1 之后入职的员工
* 8. 按部门分组,统计每组的人数
*
* 分析:
* 1.使用jdbctemplate+druid来进行测试,准备一个DataSource对象,来创建JdbcTemplate对象
*
* */
public class JdbcTemplate_Test {
private JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidJdbcUtils.getDataSource());
/**
* 插入员工数据(完整的)
*/
@Test
public void test1(){
Employee emp = new Employee();
emp.setId(1015);
emp.setEname("小白龙");
emp.setJobId(4);
emp.setMgr(1004);
emp.setJoindate(new Date());
emp.setSalary(new BigDecimal(3000));
emp.setBonus(new BigDecimal(8000));
emp.setDeptId(20); String sql = "insert into emp(id, ename, job_id, mgr, joindate, salary, bonus, dept_id) values(?,?,?,?,?,?,?,?)"; int rows = jdbcTemplate.update(sql, emp.getId(), emp.getEname(), emp.getJobId(), emp.getMgr(),
emp.getJoindate(), emp.getSalary(), emp.getBonus(), emp.getDeptId());
System.out.println(rows);
} /**
* 删除员工数据(按照员工编号删除)
*/
@Test
public void test2(){
String sql = "delete from emp where id = ?";
int rows = jdbcTemplate.update(sql, 1015);
System.out.println(rows);
} /**
* 修改员工数据(修改李逵的工资、奖金、部门)
*/
@Test
public void test3(){
String sql = "update emp set salary = ?, bonus = ?, dept_id = ? where ename = ? ";
int rows = jdbcTemplate.update(sql, 2000, 2000, 20, "李逵");
System.out.println(rows);
} /**
* 查询所有工资大于20000万的员工, 按工资降序排列
*/
@Test
public void test4(){
// TimeZone.setDefault(TimeZone.getTimeZone("GMT+10:00"));数据库是Date类型的,这里修改默认时区根本不影响结果。
String sql = "select id, ename, job_id as jobId, mgr, joindate, salary, bonus, dept_id as deptId from emp where salary > ? ";
List<Employee> employeeList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class), 20000);
employeeList.forEach(System.out::println);
} /**
* 按部门分组,统计每组的人数
*/
@Test
public void test5(){
String sql = "select\n" +
"\tcount(t1.id) as employee_num, t2.id as id, t2.dname as dname\n" +
"FROM\n" +
"emp as t1\n" +
"right join \n" +
"dept as t2\n" +
"on \n" +
"t1.dept_id = t2.id\n" +
"GROUP BY\n" +
"t2.id";
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(sql);
mapList.forEach(System.out::println);
}
}

JdbcTemplate操作员工表

 package cn.itcast.jdbctemplate;

 import com.alibaba.druid.pool.DruidDataSourceFactory;

 import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DruidJdbcUtils {
//DataSource对象
private static DataSource dataSource; static {
try {
//加载配置
Properties props = new Properties();
props.load(DruidJdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //创建德鲁伊连接池
dataSource = new DruidDataSourceFactory().createDataSource(props);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} //获取连接池
public static DataSource getDataSource(){
return dataSource;
} //获取连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
} //DML语句释放资源
public static void release(Statement stmt, Connection conn){
/* if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}*/
release(null, stmt, conn);
} //查询语句释放资源
public static void release(ResultSet rs, Statement stmt, Connection conn){
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();
}
}
}
}

DruidJbctUtils数据库连接工具类

 package cn.itcast.jdbctemplate;

 import java.math.BigDecimal;
import java.util.Date; /*
CREATE TABLE emp (
id INT PRIMARY KEY, -- 员工id
ename VARCHAR(50), -- 员工姓名
job_id INT, -- 职务id
mgr INT , -- 上级领导
joindate DATE, -- 入职日期
salary DECIMAL(7,2), -- 工资
bonus DECIMAL(7,2), -- 奖金
dept_id INT, -- 所在部门编号
);
*/
public class Employee {
private Integer id;
private String ename;
private Integer jobId;
private Integer mgr;
private Date joindate;
private BigDecimal salary;
private BigDecimal bonus;
private Integer deptId; public Employee() {
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getEname() {
return ename;
} public void setEname(String ename) {
this.ename = ename;
} public Integer getJobId() {
return jobId;
} public void setJobId(Integer jobId) {
this.jobId = jobId;
} public Integer getMgr() {
return mgr;
} public void setMgr(Integer mgr) {
this.mgr = mgr;
} public Date getJoindate() {
return joindate;
} public void setJoindate(Date joindate) {
this.joindate = joindate;
} public BigDecimal getSalary() {
return salary;
} public void setSalary(BigDecimal salary) {
this.salary = salary;
} public BigDecimal getBonus() {
return bonus;
} public void setBonus(BigDecimal bonus) {
this.bonus = bonus;
} public Integer getDeptId() {
return deptId;
} public void setDeptId(Integer deptId) {
this.deptId = deptId;
} @Override
public String toString() {
return "Employee{" +
"id=" + id +
", ename='" + ename + '\'' +
", jobId=" + jobId +
", mgr=" + mgr +
", joindate=" + joindate +
", salary=" + salary +
", bonus=" + bonus +
", deptId=" + deptId +
'}';
}
}

Employee实体

 package utils;

 import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties; public class JDBCUtils {
//连接参数
private static String driver;
private static String url;
private static String user;
private static String password; static{
try {
//读取配置
Properties props = new Properties();
//方式一
// props.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
//方式二
ClassLoader cl = JDBCUtils.class.getClassLoader();
URL resource = cl.getResource("jdbc.properties");
//D:/Code/IdeaProject/IdeaCode/javaweb-T1/out/production/jdbc-day01/jdbc.properties
System.out.println(resource.getPath());
props.load(new FileReader(resource.getPath())); //赋值
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password"); //加载驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} //获取连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
} //释放资源
public static void release(Statement stmt, Connection conn){
release(null, stmt, conn);
} public static void release(ResultSet rs, Statement stmt, Connection conn){
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();
}
}
}
}

JdbcUtils简单版工具类

 package conn;

 import utils.JDBCUtils;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class ConnAndSql {
public static void main(String[] args) throws SQLException {
long start = System.currentTimeMillis();
Connection conn = JDBCUtils.getConnection();
long end = System.currentTimeMillis(); System.out.println("获取连接:" + (end - start)); start = System.currentTimeMillis();
String sql = "select * from account";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.executeQuery();
end = System.currentTimeMillis(); System.out.println("执行sql:" + (end - start)); /*
获取连接:543
执行sql:18
*/
}
}

获取连接的时间花费远远超出了执行sql的时间,,需要使用池技术,管理连接。

 package pro01.service;

 import pro01.dao.EmployeeDao;
import pro01.domain.Employee; import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.List;
import java.util.Scanner; public class EmployeeMain {
private static EmployeeDao employeeDao = new EmployeeDao(); private static final String prompt = "user>"; public static void main(String[] args) {
//显式主界面,并给出提示
showMain(); Scanner sc = new Scanner(System.in);
while(true){ System.out.print(prompt); String line = sc.nextLine();
switch (line.trim().toLowerCase()){
case "1" :
findAllProc();break;
case "2" :
deleteProc();break;
case "3" :
insertProc();break;
case "4" :
updateProc();break;
case "5" :
showMain();break;
case "exit" :
return;
default:
System.out.println("输入有误,请重新输入!");
}
}
} private static void showMain() {
System.out.println("1 查询所有员工信息");
System.out.println("2 删除员工");
System.out.println("3 新增员工");
System.out.println("4 修改员工信息");
System.out.println("5 显示主界面");
System.out.println("exit 退出程序");
} private static void updateProc() {
//请输入要修改的员工编号
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的员工编号");
System.out.print(prompt); //获取id
String idStr = sc.nextLine();
Integer id = null;
try{
id = Integer.parseInt(idStr);
} catch (NumberFormatException e){
System.out.println("输入有误");
return;
} //根据id,查找用户,判断是否存在
Employee employee = employeeDao.findById(id);
if(employee == null){
System.out.println("员工不存在");
return;
} //封装修改条件
employee = new Employee();
employee.setId(id); //姓名
System.out.println("请输入员工姓名");
System.out.print(prompt);
String name = sc.nextLine();
if(!"".equals(name.trim())){
employee.setName(name);
} //薪水
System.out.println("请输入员工薪水");
System.out.print(prompt);
String salaryStr = sc.nextLine();
if(!"".equals(salaryStr.trim())){
try{
BigDecimal salary = new BigDecimal(salaryStr);
employee.setSalary(salary);
}catch (NumberFormatException e){
System.out.println("输入的薪水应该是数字");
return;
}
} boolean isSuccess = false;
try {
isSuccess = employeeDao.updateById(employee);
} catch (SQLException e) {
System.out.println("数据库错误");
return;
}
if(isSuccess){
System.out.println("更新成功");
}else{
System.out.println("更新失败");
}
} private static void insertProc() {
Scanner sc = new Scanner(System.in);
//员工编号
System.out.println("请输入员工编号:");
System.out.print(prompt);
String idStr = sc.nextLine();
int id;
try{
id = Integer.parseInt(idStr);
} catch (NumberFormatException e) {
System.out.println("员工编号输入错误,只能是正数");
return;
}
//员工姓名
System.out.println("请输入员工姓名:");
System.out.print(prompt);
String name = sc.nextLine();
//员工薪资
System.out.println("请输入员工薪资:");
System.out.print(prompt);
String salaryStr = sc.nextLine();
BigDecimal salary = null;
try{
salary = new BigDecimal(salaryStr);
}catch (NumberFormatException e){
System.out.println("工资必须为有效的数字");
return;
} Employee employee = new Employee();
employee.setId(id);
employee.setName(name);
employee.setSalary(salary); boolean isSuccess = false;
try {
isSuccess = employeeDao.add(employee);
} catch (SQLException e) {
System.out.println("数据库错误");
return;
}
if(isSuccess){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
} private static void deleteProc() {
//请输入要删除的员工编号
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的员工编号");
System.out.print(prompt); //获取id
String idStr = sc.nextLine();
int id;
try{
id = Integer.parseInt(idStr);
} catch (NumberFormatException e){
System.out.println("输入有误");
return;
} //根据id,查找用户,判断是否存在
Employee employee = employeeDao.findById(id);
if(employee == null){
System.out.println("员工不存在");
return;
} //如果用户存在,则删除用户
boolean isSuccess = employeeDao.deleteById(id);
if(isSuccess){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
} private static void findAllProc() {
List<Employee> list = employeeDao.findAll(); System.out.println("员工编号\t员工姓名\t员工薪资");
list.forEach(e->{
System.out.println(e.getId() + "\t\t" + e.getName() + "\t\t" + e.getSalary());
});
}
}

cmdCRUD 主界面

 package pro01.domain;

 import java.math.BigDecimal;

 /*
create table employee(
id int primary key auto_increment,
name varchar(50),
salary DECIMAL
);
*/
public class Employee {
private Integer id;
private String name;
private BigDecimal salary; public Employee() {
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public BigDecimal getSalary() {
return salary;
} public void setSalary(BigDecimal salary) {
this.salary = salary;
}
}

cmdCRUD 员工类

 package pro01.dao;

 import pro01.domain.Employee;

 import java.sql.*;
import java.util.ArrayList;
import java.util.List; public class EmployeeDao {
/**
* 查询全部员工信息
* @return
*/
public List<Employee> findAll() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3307/jdbc_db";
String user = "root";
String password = "root"; Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; List<Employee> employeeList = new ArrayList<>();
try {
//连接
conn = DriverManager.getConnection(url, user, password);
//语句
String sql = "select * from employee";
pstmt = conn.prepareStatement(sql);
//执行
rs = pstmt.executeQuery();
while(rs.next()){
//读取记录数据,封装为Employee对象
Employee emp = new Employee();
emp.setId(rs.getInt("eid"));
emp.setName(rs.getString("ename"));
emp.setSalary(rs.getBigDecimal("salary")); //将员工添加到集合
employeeList.add(emp);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return employeeList;
} public Employee findById(int id) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3307/jdbc_db";
String user = "root";
String password = "root"; Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; Employee employee = null;
try {
//连接
conn = DriverManager.getConnection(url, user, password);
//语句
String sql = "select * from employee where eid = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
//执行
rs = pstmt.executeQuery();
if(rs.next()){
//读取记录数据,封装为Employee对象
employee = new Employee();
employee.setId(rs.getInt("eid"));
employee.setName(rs.getString("ename"));
employee.setSalary(rs.getBigDecimal("salary"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return employee;
} public boolean deleteById(int id) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3307/jdbc_db";
String user = "root";
String password = "root"; Connection conn = null;
PreparedStatement pstmt = null;
try{
//获取连接对象
conn = DriverManager.getConnection(url, user, password);
//获取语句
String sql = "delete from employee where eid = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
//执行
int count = pstmt.executeUpdate();
//如果条数大于0,表示删除成功
return count > 0 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
} finally{
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return false;
} public boolean add(Employee employee) throws SQLException {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3307/jdbc_db";
String user = "root";
String password = "root"; Connection conn = null;
PreparedStatement pstmt = null;
try{
//获取连接对象
conn = DriverManager.getConnection(url, user, password);
//获取语句
String sql = "insert into employee(eid, ename, salary) values(?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, employee.getId());
pstmt.setString(2,employee.getName());
pstmt.setBigDecimal(3, employee.getSalary());
//执行
int count = pstmt.executeUpdate();
//如果条数大于0,表示删除成功
return count > 0 ? true : false;
} finally{
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} public boolean updateById(Employee employee) throws SQLException {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3307/jdbc_db";
String user = "root";
String password = "root"; Connection conn = null;
PreparedStatement pstmt = null;
try{
//获取连接对象
conn = DriverManager.getConnection(url, user, password);
//获取语句
ArrayList<Object> args = new ArrayList<>();
StringBuilder sb = new StringBuilder(); if(employee.getName() != null){
sb.append(",ename=? ");
args.add(employee.getName());
}
if(employee.getSalary() != null){
sb.append(",salary=? ");
args.add(employee.getSalary());
} int argsNum = args.size();
if(argsNum == 0){
return false;
}
String sql = "update employee set " + sb.deleteCharAt(0).toString() + "where eid=? "; pstmt = conn.prepareStatement(sql); for (int i = 0; i < argsNum; i++) {
pstmt.setObject(i + 1, args.get(i));
}
pstmt.setObject(argsNum + 1, employee.getId());
//执行
int count = pstmt.executeUpdate();
//如果条数大于0,表示删除成功
return count > 0 ? true : false;
} finally{
if(pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

cmdCRUD 数据库操作类employeeDao

黑马学习连接池 druid JdbcTemplate c3p0 池技术的更多相关文章

  1. 数据库连接池 - (druid、c3p0、dbcp)

    概述: 在这里所谓的数据库连接是指通过网络协议与数据库服务之间建立的TCP连接.通常,与数据库服务进行通信的网络协议无需由应用程序本身实现. 原因有三: 实现复杂度大,需要充分理解和掌握相应的通信协议 ...

  2. 数据库连接池 Druid和C3p0

    datasource.properties数据源 #数据源 datasource.peoperties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc: ...

  3. spring下,druid,c3p0,proxool,dbcp四个数据连接池的使用和配置

    由于那天Oracle的数据连接是只能使用dbcp的数据库连接池才连接上了,所以决定试一下当下所有得数据库连接池连接orcale和mysql,先上代码 配置文件的代码 #================ ...

  4. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  5. java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  6. DataSource - 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  7. 数据库连接池优化配置(druid,dbcp,c3p0)

    主要描述了数据库连接池参数配置的准则,针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置. 考虑因素 1:当前连接DB的规模   2:并发情况 3:执行db的响应时间 配置考虑 1 ...

  8. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明.RP

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  9. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明(转)

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

随机推荐

  1. Java中Exception的种类

    通常来讲,Java中的异常会被分为三种: Error: 这种异常被设计成不被捕获,因为这种异常产生于JVM自身. Runtime Exception: 运行时异常往往与环境有关,编译时无法检查,并且可 ...

  2. 问题:Oracle to_date;结果:oracle常用的时间格式转换

    oracle常用的时间格式转换 1:取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; T ...

  3. mysql:mysql Access denied for user root@

    最近用本地Navicat连接集群的mysql,报了上述的错误,我认为是权限问题 之前试过赋权限给所有人,但是我这边还是连接不上,无奈,试试只分给我一个IP 开始:mysql -uroot -p //先 ...

  4. SpringBoot表单验证

    需求:年龄在18岁以下的女生不能注册 处理器中的写法: 实体类中的写法:

  5. JAVA基础知识总结14(String、StringBuffer、StringBuilder)

    1.String字符串: java中用String类进行描述.对字符串进行了对象的封装.这样的好处是可以对字符串这种常见数据进行方便的操作.对象封装后,可以定义N多属性和行为. 如何定义字符串对象呢? ...

  6. jQuery-图片的放大镜显示效果(不需要大小图) ,放大镜图层显示在图片左右侧,不适用table

    放大镜图层显示在图片的一侧,但当图片嵌套到table里,放大镜图层位置就有误,此方法只适用于没有table 错误原因: 原来的写法是图片相对于Td 的位置,而不是图片的真实位置,所以两张图片的坐标是一 ...

  7. transient关键字的理解

    谈到这个transient这个关键字,我们应该会立马想到序列化这个过程:什么是序列化?什么又是反序列化呢?序列化就是将对象转化内成二进制,而反序列化就是就二进制文件转换成对象的过程.一旦变量使用了tr ...

  8. css 层叠式样式表(3)

    样式分类 大小 -- 调整div大小,长 width,高 height.长可以直接100%横向沾满屏幕,高不可以. 背景 background-color  背景色 background-image ...

  9. SQL server2008无法收缩日志

    SQL server2008无法收缩日志,错误信息为: 1:由于最小日志空间要求,无法收缩日志文件 2:无法收缩日志文件 2 (XXX_log),因为该文件结尾的逻辑日志文件正在使用 描述: 用的是网 ...

  10. (转)C++中使用C代码

    昨晚看书的时候碰到一个问题,在C++中如何调用C代码...于是查了一下资料...发现了一个大神写的文章挺好的. -------------------------------------------- ...