一、JDBC
一、CRUD(增删改查)
C:增加Create R查询(Retrieve) U更新(Update) D删除(Delete)
在JDBC中,增加,删除,修改,操作都基本一样,只是传递不同SQL语句,最后使用execute()方法执行SQL语句
查询,使用executeQuery()方法执行SQL语句。
1、使用Statement来执行SQL语句
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class TestJDBC{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
}catch(ClassNotFoundException e){
e.printStackTrace();
} try(
Connection c=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8","root","root");//建立连接数据库
Statement s=c.createStatement();
){
String strSql="delete from demo where id=6";
//执行删除语句
s.execute(strSql);
String sql="select * from user where name='"+name+"' and password='"+password+"'";
//执行查询语句,并把结果集返回给ResultSet
ResultSet rs=s.executeQuery(sql);
if(rs.next()){//从结果集获取到账号密码
System.out.println("账号密码正确!");
}
else{
System.out.println("账号密码错误!");
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
2、使用PreparedStatement来执行SQL语句(采用预编译,性能比Statement快,能防止SQL注入)
区别:能够设定参数,指定相应的值,而不是Statement那样使用字符串拼接
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; public class TestJDBC{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
}catch(ClassNotFoundException e){
e.printStackTrace();
}
String strSql="insert into hero values(null,?,?,?)";
try(
Connection c=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8","root","root");//建立连接数据库
PreparedStatement ps=c.prepareStatement(strSql);
){
//设置strSql问号的参数
ps.setString(1,"temo");
ps.setFloat(2,22.0f);
ps.setInt(3,59);
//执行sql
ps.execute();
}catch(SQLException e){
e.printStackTrace();
}
}
}
二、数据库连接池
连接池原理
- 有多个线程,每个线程都需要连接数据库执行SQL语句,那么每个线程都会创建数据库连接,并在使用完之后关闭,由于创建连接和关闭连接过程是比较消耗时间的,多线程的时候,系统就会很卡顿,而一个数据库同时支持连接总数也是有限的,如果多线程并发量很大,那么数据库连接的总数就会被消耗完,那么后续线程连接数据库就会失败。
- 数据库连接池,在使用之前,就会创建好一定数量的连接,如果有任何线程需要连接,就会在连接池中借用,而不是自己创建。使用完毕后,又把这个连接归还给连接池供下一次使用或者其他线程使用。
- 加入发成多线程并发情况,连接池里的连接被用光了,那么其他线程就会等待,知道有连接被归还回来,再继续使用整个过程,这些连接都不会被关闭,而是不断的被循环使用,从而节约了启动和关闭连接的时间。
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ConnectionPool {
List<Connection> cs = new ArrayList<Connection>();
int size;
public ConnectionPool(int size) {
this.size = size;
init();
}
public void init() {
//这里恰恰不能使用try-with-resource的方式,因为这些连接都需要是"活"的,不要被自动关闭了
try {
Class.forName("com.mysql.jdbc.Driver");
for (int i = 0; i < size; i++) {
Connection c = DriverManager
.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root", "admin");
cs.add(c);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized Connection getConnection() {
while (cs.isEmpty()) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Connection c = cs.remove(0);
return c;
}
public synchronized void returnConnection(Connection c) {
cs.add(c);
this.notifyAll();
}
}
一、JDBC的更多相关文章
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- JDBC增加删除修改
一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...
- JDBC简介
jdbc连接数据库的四个对象 DriverManager 驱动类 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- FineReport如何用JDBC连接阿里云ADS数据库
在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...
- JDBC基础
今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...
- Spring学习记录(十四)---JDBC基本操作
先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...
随机推荐
- UVA1025 城市里的间谍
#include<iostream> #include<cstdio> #include<memory.h> using namespace std; #defin ...
- HDU 5726 GCD(RMQ+二分)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5726 题意:给出一串数字,现在有多次询问,每次询问输出(l,r)范围内所有数的gcd值,并且输出有多 ...
- [转][c++][跨平台]c++跨平台开发小结
转自:https://blog.csdn.net/dj0379/article/details/53577135 linux编程与windows编程的差异之处: 1. 文件与目录的大小写以及路径分隔符 ...
- Codeforces 920G - List Of Integers
920G - List Of Integers 思路:容斥+二分 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...
- android 趟坑记
又是一个伤感的故事,但阿古好像已经习以为常了. 大半年的辛苦又泡汤了,故事是这样. 帝都某高端小区,封闭局域网,做一个可视对讲+门禁的APP,之前那一版因为使用了商业代码,又不想花钱,于是找阿古换一个 ...
- Python学习笔记之参数解析
python提供了两种方法进行命令行的参数解析,分别是getopt和optparse类中的模块OptionParser,下面分别详细了解这两个模块: 1.getopt模块 首先复习C语言的命令行解析: ...
- MySQL Server and Server-Startup Programs
1. mysqld-The MySQL Server mysqld,also known as mysql server, is the main program that does most of ...
- 最简单的TTcpServer与TTcpClient通信实例-Delphi
unit TcpSCDemo;//最简单的TTcpServer与TTcpClient通信实例-Delphi //Borland推出TTcpServer与TTcpClient作为主要的网络通信控件,意味 ...
- 【转】 聚类算法-Kmeans算法的简单实现
1. 聚类与分类的区别: 首先要来了解的一个概念就是聚类,简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它“这个东西 ...
- 取代iframe框架
一.frameset1. 属性①border设置框架的边框粗细.②bordercolor设置框架的边框颜色.③frameborder设置是否显示框架边框.设定值只有0.1:0 表示不要边框,1 表示要 ...