diff --git a/JDBC_Review/.classpath b/JDBC_Review/.classpath
new file mode 100644
index 0000000..85d1e6b
--- /dev/null
+++ b/JDBC_Review/.classpath
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/JDBC_Review/.project b/JDBC_Review/.project
new file mode 100644
index 0000000..9ae9e0a
--- /dev/null
+++ b/JDBC_Review/.project
@@ -0,0 +1,31 @@
+
+
+ JDBC_Review
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git a/JDBC_Review/.settings/.jsdtscope b/JDBC_Review/.settings/.jsdtscope
new file mode 100644
index 0000000..92e666d
--- /dev/null
+++ b/JDBC_Review/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/JDBC_Review/.settings/org.eclipse.jdt.core.prefs b/JDBC_Review/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/JDBC_Review/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/JDBC_Review/.settings/org.eclipse.wst.common.component b/JDBC_Review/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..7bfe8fb
--- /dev/null
+++ b/JDBC_Review/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/JDBC_Review/.settings/org.eclipse.wst.common.project.facet.core.xml b/JDBC_Review/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..b52a19e
--- /dev/null
+++ b/JDBC_Review/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/JDBC_Review/.settings/org.eclipse.wst.jsdt.ui.superType.container b/JDBC_Review/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/JDBC_Review/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/JDBC_Review/.settings/org.eclipse.wst.jsdt.ui.superType.name b/JDBC_Review/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/JDBC_Review/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/JDBC_Review/WebContent/META-INF/MANIFEST.MF b/JDBC_Review/WebContent/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/JDBC_Review/WebContent/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/c3p0-config.xml b/JDBC_Review/WebContent/WEB-INF/classes/c3p0-config.xml
new file mode 100644
index 0000000..d22e72e
--- /dev/null
+++ b/JDBC_Review/WebContent/WEB-INF/classes/c3p0-config.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ com.mysql.jdbc.Driver
+ jdbc:mysql://127.0.0.1:3306/test?characterEncode=UTF-8
+ root
+ 123456
+
+
+ 5
+
+ 10
+
+ 10
+
+ 50
+
+
+ 20
+
+ 5
+
+
+
+
\ No newline at end of file
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/cms/domain/Customer.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/cms/domain/Customer.class
new file mode 100644
index 0000000..dd65520
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/cms/domain/Customer.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/CriteriaCustomer.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/CriteriaCustomer.class
new file mode 100644
index 0000000..f591ba7
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/CriteriaCustomer.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/CustomerDao.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/CustomerDao.class
new file mode 100644
index 0000000..9421a1d
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/CustomerDao.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/Dao.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/Dao.class
new file mode 100644
index 0000000..b665d7e
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/Dao.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/impl/CustomerDaoImpl.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/impl/CustomerDaoImpl.class
new file mode 100644
index 0000000..afc8981
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dao/impl/CustomerDaoImpl.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/QR.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/QR.class
new file mode 100644
index 0000000..07fd457
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/QR.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/RsHandler.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/RsHandler.class
new file mode 100644
index 0000000..3136bed
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/RsHandler.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl$1.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl$1.class
new file mode 100644
index 0000000..6738d12
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl$1.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl.class
new file mode 100644
index 0000000..3193548
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/entity/Customer.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/entity/Customer.class
new file mode 100644
index 0000000..25b4470
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/entity/Customer.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/servlet/CustomerServlet.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/servlet/CustomerServlet.class
new file mode 100644
index 0000000..f730f52
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/servlet/CustomerServlet.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdao/AccountDao.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdao/AccountDao.class
new file mode 100644
index 0000000..195b005
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdao/AccountDao.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdao/AccountDao1.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdao/AccountDao1.class
new file mode 100644
index 0000000..4078387
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdao/AccountDao1.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdemo/TestDemo.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdemo/TestDemo.class
new file mode 100644
index 0000000..3b4c562
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdemo/TestDemo.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdemo/TestDemo1.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdemo/TestDemo1.class
new file mode 100644
index 0000000..78d7b22
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/testdemo/TestDemo1.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/BaseServlet.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/BaseServlet.class
new file mode 100644
index 0000000..3790d8a
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/BaseServlet.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/DBUtils.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/DBUtils.class
new file mode 100644
index 0000000..a31c0c0
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/DBUtils.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils.class
new file mode 100644
index 0000000..83a252d
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils1.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils1.class
new file mode 100644
index 0000000..652e31d
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils1.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils2.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils2.class
new file mode 100644
index 0000000..789d872
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/JdbcUtils2.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/TxQueryRunner.class b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/TxQueryRunner.class
new file mode 100644
index 0000000..38f4abc
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/classes/com/cyc/mvcapp/utils/TxQueryRunner.class differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/c3p0-0.9.5.2-sources.jar b/JDBC_Review/WebContent/WEB-INF/lib/c3p0-0.9.5.2-sources.jar
new file mode 100644
index 0000000..5dd2790
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/c3p0-0.9.5.2-sources.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/c3p0-0.9.5.2.jar b/JDBC_Review/WebContent/WEB-INF/lib/c3p0-0.9.5.2.jar
new file mode 100644
index 0000000..579cedd
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/c3p0-0.9.5.2.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7-javadoc.jar b/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7-javadoc.jar
new file mode 100644
index 0000000..dcfb8e5
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7-javadoc.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7-sources.jar b/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7-sources.jar
new file mode 100644
index 0000000..faea98e
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7-sources.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7.jar b/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7.jar
new file mode 100644
index 0000000..b30458e
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/commons-dbutils-1.7.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/commons-logging-1.2.jar b/JDBC_Review/WebContent/WEB-INF/lib/commons-logging-1.2.jar
new file mode 100644
index 0000000..93a3b9f
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/commons-logging-1.2.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/jstl.jar b/JDBC_Review/WebContent/WEB-INF/lib/jstl.jar
new file mode 100644
index 0000000..a02abec
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/jstl.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/mchange-commons-java-0.2.11-sources.jar b/JDBC_Review/WebContent/WEB-INF/lib/mchange-commons-java-0.2.11-sources.jar
new file mode 100644
index 0000000..eac96d2
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/mchange-commons-java-0.2.11-sources.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/mchange-commons-java-0.2.11.jar b/JDBC_Review/WebContent/WEB-INF/lib/mchange-commons-java-0.2.11.jar
new file mode 100644
index 0000000..88f1d47
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/mchange-commons-java-0.2.11.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/mysql-connector-java-5.1.44-bin.jar b/JDBC_Review/WebContent/WEB-INF/lib/mysql-connector-java-5.1.44-bin.jar
new file mode 100644
index 0000000..2f2e32d
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/mysql-connector-java-5.1.44-bin.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/lib/standard.jar b/JDBC_Review/WebContent/WEB-INF/lib/standard.jar
new file mode 100644
index 0000000..bc528ac
Binary files /dev/null and b/JDBC_Review/WebContent/WEB-INF/lib/standard.jar differ
diff --git a/JDBC_Review/WebContent/WEB-INF/web.xml b/JDBC_Review/WebContent/WEB-INF/web.xml
new file mode 100644
index 0000000..5fb8381
--- /dev/null
+++ b/JDBC_Review/WebContent/WEB-INF/web.xml
@@ -0,0 +1,20 @@
+
+
+ JDBC_Review
+
+ index.html
+ index.htm
+ index.jsp
+ default.html
+ default.htm
+ default.jsp
+
+
+ CustomerServlet
+ com.cyc.mvcapp.servlet.CustomerServlet
+
+
+ CustomerServlet
+ *.do
+
+
\ No newline at end of file
diff --git a/JDBC_Review/account.sql b/JDBC_Review/account.sql
new file mode 100644
index 0000000..346e283
--- /dev/null
+++ b/JDBC_Review/account.sql
@@ -0,0 +1,52 @@
+-- MySQL dump 10.16 Distrib 10.1.19-MariaDB, for Win32 (AMD64)
+--
+-- Host: localhost Database: localhost
+-- ------------------------------------------------------
+-- Server version 10.1.19-MariaDB
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `account`
+--
+
+DROP TABLE IF EXISTS `account`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `account` (
+ `id` int(4) NOT NULL AUTO_INCREMENT,
+ `name` varchar(30) NOT NULL,
+ `balance` double NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Dumping data for table `account`
+--
+
+LOCK TABLES `account` WRITE;
+/*!40000 ALTER TABLE `account` DISABLE KEYS */;
+INSERT INTO `account` VALUES (1,'jia',2004),(2,'yi',1992);
+/*!40000 ALTER TABLE `account` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2017-12-15 20:03:37
diff --git a/JDBC_Review/customers.sql b/JDBC_Review/customers.sql
new file mode 100644
index 0000000..e2777dc
--- /dev/null
+++ b/JDBC_Review/customers.sql
@@ -0,0 +1,43 @@
+-- MySQL dump 10.13 Distrib 5.5.20, for Win32 (x86)
+--
+-- Host: localhost Database: shop
+-- ------------------------------------------------------
+-- Server version 5.5.20
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `customers`
+--
+
+DROP TABLE IF EXISTS `customers`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `customers` (
+ `c_id` int(11) NOT NULL AUTO_INCREMENT,
+ `c_name` char(50) NOT NULL,
+ `c_add` char(50) NOT NULL,
+ `c_city` char(50) DEFAULT NULL,
+ `c_zip` char(50) DEFAULT NULL,
+ `c_contact` char(50) DEFAULT NULL,
+ `c_email` char(255) DEFAULT NULL,
+ PRIMARY KEY (`c_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1009 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2016-04-14 17:02:52
diff --git a/JDBC_Review/readme b/JDBC_Review/readme
new file mode 100644
index 0000000..9d104ee
--- /dev/null
+++ b/JDBC_Review/readme
@@ -0,0 +1,6 @@
+1.ͻϵͳСĿ
+2.dbutils jarʹüԭ--QueryRunnerʹ
+3.MVC˼javaеӦ
+4.MySQLݿɾIJ
+5.JDBCӦӣرգԤ...
+6.JdbcUtilsĸд + + ThreadLocal
\ No newline at end of file
diff --git a/JDBC_Review/src/c3p0-config.xml b/JDBC_Review/src/c3p0-config.xml
new file mode 100644
index 0000000..d22e72e
--- /dev/null
+++ b/JDBC_Review/src/c3p0-config.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+ com.mysql.jdbc.Driver
+ jdbc:mysql://127.0.0.1:3306/test?characterEncode=UTF-8
+ root
+ 123456
+
+
+ 5
+
+ 10
+
+ 10
+
+ 50
+
+
+ 20
+
+ 5
+
+
+
+
\ No newline at end of file
diff --git a/JDBC_Review/src/com/cyc/mvcapp/dbutils/QR.java b/JDBC_Review/src/com/cyc/mvcapp/dbutils/QR.java
new file mode 100644
index 0000000..9fdb9c1
--- /dev/null
+++ b/JDBC_Review/src/com/cyc/mvcapp/dbutils/QR.java
@@ -0,0 +1,105 @@
+package com.cyc.mvcapp.dbutils;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+/**
+ * ģdbutils jar
+ * @author cyc
+ *
+ * @param
+ */
+public class QR {
+
+ private DataSource dataSource;
+
+ public QR() {
+
+ }
+
+ public QR(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ public int update(String sql, Object...args) {
+ Connection conn = null;
+ PreparedStatement psmt = null;
+ int affected_row = 0;
+ try {
+ conn = dataSource.getConnection();
+ psmt = conn.prepareStatement(sql);
+ initParams(psmt, args);
+ affected_row = psmt.executeUpdate();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ if (psmt != null) {
+ try {
+ psmt.close();
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ return affected_row;
+ }
+
+ private void initParams(PreparedStatement psmt, Object...args) throws SQLException {
+ for (int i = 0; i < args.length; i++) {
+ psmt.setObject(i+1, args[i]);
+ }
+ }
+
+ public T query(String sql, RsHandler rh, Object...args) {
+ Connection conn = null;
+ PreparedStatement psmt = null;
+ T result = null;
+ try {
+ conn = dataSource.getConnection();
+ psmt = conn.prepareStatement(sql);
+ initParams(psmt, args);
+ ResultSet rs = psmt.executeQuery();
+ result = rh.handler(rs);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ throw new RuntimeException(e.getMessage(), e);
+ } finally {
+ if (psmt != null) {
+ try {
+ psmt.close();
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/JDBC_Review/src/com/cyc/mvcapp/dbutils/RsHandler.java b/JDBC_Review/src/com/cyc/mvcapp/dbutils/RsHandler.java
new file mode 100644
index 0000000..c3c5063
--- /dev/null
+++ b/JDBC_Review/src/com/cyc/mvcapp/dbutils/RsHandler.java
@@ -0,0 +1,12 @@
+package com.cyc.mvcapp.dbutils;
+
+import java.sql.ResultSet;
+
+/**
+ * ѽתҪת
+ * @author cyc
+ * @param
+ */
+public interface RsHandler {
+ public T handler(ResultSet rs);
+}
diff --git a/JDBC_Review/src/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl.java b/JDBC_Review/src/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl.java
new file mode 100644
index 0000000..eaf4df1
--- /dev/null
+++ b/JDBC_Review/src/com/cyc/mvcapp/dbutils/impl/CustomerQrImpl.java
@@ -0,0 +1,99 @@
+package com.cyc.mvcapp.dbutils.impl;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.dbutils.QueryRunner;
+import org.apache.commons.dbutils.handlers.BeanHandler;
+import org.apache.commons.dbutils.handlers.BeanListHandler;
+import org.apache.commons.dbutils.handlers.MapHandler;
+import org.apache.commons.dbutils.handlers.MapListHandler;
+import org.apache.commons.dbutils.handlers.ScalarHandler;
+import org.junit.Test;
+
+import com.cyc.mvcapp.dbutils.QR;
+import com.cyc.mvcapp.dbutils.RsHandler;
+import com.cyc.mvcapp.entity.Customer;
+import com.cyc.mvcapp.utils.JdbcUtils;
+
+public class CustomerQrImpl {
+
+ public void addCustomer(Customer cs) {
+ QR qr = new QR<>(JdbcUtils.getDataSource());
+ String sql = "INSERT INTO customer(id, name, address, phone) VALUES(null, ?, ?, ?)";
+ Object[] args = {cs.getName(), cs.getAddress(), cs.getPhone()};
+
+ qr.update(sql, args);
+ }
+
+ public Customer findCustomerById(int id) {
+ QR qr = new QR<>(JdbcUtils.getDataSource());
+ String sql = "SELECT * FROM Customer WHERE id = ?";
+ Customer cs = null;
+ RsHandler rh = new RsHandler() {
+
+ @Override
+ public Customer handler(ResultSet rs) {
+ // TODO Auto-generated method stub
+ Customer customer = null;
+ try {
+ if (rs.next()) {
+ customer = new Customer();
+ customer.setName(rs.getString("name"));
+ customer.setAddress(rs.getString("address"));
+ customer.setPhone(rs.getString("phone"));
+ }
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return customer;
+ }
+ };
+ cs = qr.query(sql, rh, id);
+ return cs;
+ }
+
+ @Test
+ public void test() throws SQLException {
+ /*Customer cs = new Customer();
+ cs.setAddress("");
+ cs.setName("Kark");
+ cs.setPhone("18159876543");
+
+ addCustomer(cs);*/
+
+ /*Customer cs = findCustomerById(1);
+ System.out.println(cs.getName());*/
+
+ QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
+ /*String sql = "SELECT * FROM customer WHERE id = ?";
+ Object param = 1;
+ //javabeanڵԱͱֶһ
+ Customer cs = qr.query(sql, new BeanHandler<>(Customer.class), param);
+ System.out.println(cs.getName());*/
+
+ /*String sql = "SELECT * FROM customer";
+ List list = qr.query(sql, new BeanListHandler(Customer.class));
+ System.out.println(list);*/
+
+ /*String sql = "SELECT * FROM customer WHERE id = ?";
+ Object param = 1;
+ Map map = qr.query(sql, new MapHandler(), param);
+ System.out.println(map);*/
+
+ /*String sql = "SELECT * FROM customer";
+ List