JDBC(Java Data Base Connectivity) java数据连接
可以为多种数据库,提供统一访问,它由一组用java语言编写的类和接口组成,也是java访问数据库的规范。
mysql数据库驱动程序jar包
选 connector/j/ 下载
导入mysql数据库驱动程序jar包
file->project structure->modules->添加 jars or directories ->选择目标.jar
增删改 executeUpdate
String driverName = "com.mysql.jdbc.Driver";
//数据库地址 jdbc:mysql://主机IP:端口号/数据库名字
String url = "jdbc:mysql://localhost:3306/david2018_db";
String user = "root";
String password = "1234";
try {
//1.注册驱动
Class.forName(driverName);
//2.连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
//3.获得执行对象
Statement stat = conn.createStatement();
//4.执行insert语句
String sql = "insert into users (uname,uaddress,tel) values ('baidawei','changpingqu','18755488125')";
int result = stat.executeUpdate(sql);
System.out.println("插入"+result+"条数据");
//5.释放资源
stat.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
查询数据 executeQuery
String driverName = "com.mysql.jdbc.Driver";
//数据库地址 jdbc:mysql://主机IP:端口号/数据库名字
String url = "jdbc:mysql://localhost:3306/david2018_db";
String user = "root";
String password = "1234";
try {
//1.注册驱动
Class.forName(driverName);
//2.连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
//3.获得执行对象
Statement stat = conn.createStatement();
//4.执行select语句
String sql = "select * from users";
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
System.out.print(rs.getInt("uid"));
System.out.print(rs.getString("uname"));
System.out.println(rs.getString("uaddress"));
}
//5.释放资源
rs.close();
stat.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
PrepareStatement预编译 防 or 1=1 sql注入
String driverName = "com.mysql.jdbc.Driver";
//数据库地址 jdbc:mysql://主机IP:端口号/数据库名字
String url = "jdbc:mysql://localhost:3306/david2018_db";
String user = "root";
String password = "1234";
try {
//1.注册驱动
Class.forName(driverName);
//2.连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
//3.获得执行对象
Statement stat = conn.createStatement();
//4.执行select语句
//String id = "5";
//String sql = "select * from users where uid > " + id;
String sql = "select * from users where uid > ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setObject(1,5); //从1开始
ResultSet rs = pst.executeQuery(); //这里是pst的executeQuery()无参方法
while(rs.next()){
System.out.print(rs.getInt("uid"));
System.out.print(rs.getString("uname"));
System.out.println(rs.getString("uaddress"));
}
//5.释放资源
rs.close();
stat.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
修改操作
//4.执行update语句
String sql = "update users set uname = ? where uid = ?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setObject(1,"david");
pst.setObject(2,7);
int result = pst.executeUpdate();
System.out.println(result);
封装JDBCUtils工具类
import java.sql.*;
public class JDBCUtils {
private JDBCUtils(){}
private static Connection con ;
static{
try{
String driverName = "com.mysql.jdbc.Driver";
//数据库地址 jdbc:mysql://主机IP:端口号/数据库名字
String url = "jdbc:mysql://localhost:3306/david2018_db";
String user = "root";
String password = "1234";
//1.注册驱动
Class.forName(driverName);
//2.连接数据库
con = DriverManager.getConnection(url, user, password);
}catch(Exception ex){
throw new RuntimeException(ex+"数据库连接失败");
}
}
public static Connection getConnection(){
return con;
}
public static void close(Connection con,Statement stat){
if(stat!=null){
try{
stat.close();
}catch(SQLException ex){}
}
if(con!=null){
try{
con.close();
}catch(SQLException ex){}
}
}
public static void close(Connection con,Statement stat , ResultSet rs){
if(rs!=null){
try{
rs.close();
}catch(SQLException ex){}
}
if(stat!=null){
try{
stat.close();
}catch(SQLException ex){}
}
if(con!=null){
try{
con.close();
}catch(SQLException ex){}
}
}
}
测试工具类
public static void main(String[] args) {
Connection con = JDBCUtils.getConnection();
PreparedStatement pst = null;
try {
pst = con.prepareStatement("select * from users");
ResultSet rs = pst.executeQuery();
List<users> list = new ArrayList<users>();
while (rs.next()) {
users u = new users();
u.uid = rs.getInt("uid");
u.uname = rs.getString("uname");
u.uaddress = rs.getString("uaddress");
u.utel=rs.getString("tel");
list.add(u);
}
for(users u : list){
System.out.println(u.toString());
}
JDBCUtils.close(con, pst, rs);
} catch (SQLException e) {
e.printStackTrace();
}
}
配置文件
src目录下新建database.properties文件
driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/david2018_db
user=root
password=1234
加载配置文件
//类加载器
InputStream in = 当前类名.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro = new Properties();
pro.load(in);
String driverName = pro.getProperty("driverName");
String url = pro.getProperty("url");
String user = pro.getProperty("user");
String password = pro.getProperty("password");
连接mysql方法
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class JDBCUtilsConfig {
private static Connection con;
static {
InputStream in = JDBCUtilsConfig.class.getClassLoader().getResourceAsStream("database.properties");
Properties pro = new Properties();
try {
pro.load(in);
String driverName = pro.getProperty("driverName");
String url = pro.getProperty("url");
String user = pro.getProperty("user");
String password = pro.getProperty("password");
Class.forName(driverName);
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getCon() {
return con;
}
}
DBUtils
简化JDBC开发
下载DBUtils jar包
command+; 导入jar包
QueryRunner.update 增删改
新增:
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "insert into users (uname,uaddress,tel) values (?,?,?)";
Object[] params = {"davidddd","bj","15156156156156"};
int result = qr.update(con,sql,params);
System.out.println("添加"+result+"条数据");
DbUtils.closeQuietly(con);
修改:
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "update users set uname = ?,uaddress = ? where uid = ?";
Object[] params = {"david1","sh",8};
int result = qr.update(con,sql,params);
System.out.println("修改"+result+"条数据");
DbUtils.closeQuietly(con);
删除:
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "delete from users where uid = ?";
int result = qr.update(con,sql,8);
System.out.println("删除"+result+"条数据");
DbUtils.closeQuietly(con);
QueryRunner.query 查询
查询:
ArrayHandler 返回第一行Object[]
ArrayListHandler 返回List<Object[]>
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "select * from users where uid > ?";
List<Object[]> result = qr.query(con,sql,new ArrayListHandler(),1);
for(Object[] obj : result){
for(Object o : obj){
System.out.println(o);
}
}
DbUtils.closeQuietly(con);
BeanHandler 返回第一行JavaBean对象
BeanListHandler 返回List JavaBean对象
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "select * from users where uid > ?";
List<users> result = qr.query(con,sql,new BeanListHandler<users>(users.class),1);
for(users u : result){
System.out.println(u);
}
DbUtils.closeQuietly(con);
ColumnListHandler 返回List Object对象 按列查询
ScalarHandler 返回第一条数据 适合count
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "select count(*) from users where uid > ?";
Long count = qr.query(con,sql,new ScalarHandler<Long>(),1);
System.out.println(count);
DbUtils.closeQuietly(con);
MapHandler 返回第一个Map对象 key value
MapListHandler 返回ListMap对象
Connection con = JDBCUtilsConfig.getCon();
QueryRunner qr = new QueryRunner();
String sql = "select * from users where uid > ?";
List<Map<String, Object>> result = qr.query(con,sql,new MapListHandler(),1);
for(Map<String,Object> map : result){
System.out.println(map.get("uid"));
}
DbUtils.closeQuietly(con);
连接池
共享Connection,避免频繁创建连接、释放连接操作。
用连接池来管理Connection,可以重复使用COnnection,不用我们自己创建Connection,
通过连接池来创建Connection对象,关闭也不会真正的关闭连接,而是吧Connection归还给它,连接池就可以再利用这个对象了。
DBCP
数据库连接池是apache上的一个Java连接池项目,DBCP所依赖的jar包
dbcp.jar poll.jar logging.jar 这三个jar包
导入jar包 command+;
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/david2018_db");
dataSource.setUsername("root");
dataSource.setPassword("1234");
dataSource.setInitialSize(10);//初始化连接数
dataSource.setMaxIdle(5); //最大空闲
dataSource.setMinIdle(1); //最小空闲
Connection con = dataSource.getConnection();
QueryRunner qr = new QueryRunner(dataSource);
String Sql = "select * from users";
List<users> list = qr.query(Sql,new BeanListHandler<users>(users.class));
for(users u : list){
System.out.println(u.uname);
}
- 29_Java_数据库_第29天(JDBC、DBUtils)_讲义
今日内容介绍 1.JDBC 2.DBUtils 01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Conne ...
- 数据库(JDBC、DBUtils)
JDBC(Java DataBase Connection) 今日内容介绍 u SQL语句查询 u JDBC 第1章 JDBC 1.1 JDBC概述 JDBC(Java Data Base Conn ...
- java基础(29):JDBC、DBUtils
1. JDBC 1.1 JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...
- JDBC及DBUtils
1.JDBC2.DBUtils ###01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Connectivi ...
- pache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC ...
- java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
转自:https://zhangkunnan.iteye.com/blog/2040462 前言 Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servlet. ...
- jdbc框架-dbutils的简单使用
jdbc框架-dbutils的简单使用 dbutils:是apache组织的一个工具类,jdbc的框架,更方便我们使用 使用步骤: 1.导入jar包(commons-dbutils-1.4.jar) ...
- Hibernate和JDBC、EJB比较
参考:http://m.blog.csdn.net/article/details?id=7228061 一.Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App S ...
- 面试问到:JDBC、hibernate、ibati
一.JDBC.Connection(连接) 优点:运行高效.快捷. 缺点:代码多.异常多.不支持跨平台. 二.ibatis 1.根据jdbc的基本建立连接. 2.通过anntation+xml.jav ...
随机推荐
- Emotiv脑电设备与RDS机器人仿真初步测试
Emotiv脑电设备与RDS机器人仿真初步测试 在脑电设备相关算法进行真实机器人测试前,有必要进行大量仿真验证算法,节约开发时间. 这里给我启发的Emotiv使用所参考的一些网址. 官网:https: ...
- 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)
demo 1 #include <iostream> #include <cstdio> using namespace std; //template <typenam ...
- SpriteBuilder中节点的%位置移动
在SpriteBuilder中可以将一个节点的位置设为%形式,这意味着在不同的屏幕尺寸中,该节点会定位在相对同一个位置. 比如x和y分别为 50%和50%的位置,在各种屏幕中都会定位到屏幕的中心. 但 ...
- redis简介(keeper实时报表的基本部分)
网上有一篇介绍Redis的文章,由浅入深地讲解了Redis:http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html.强烈建议对 ...
- OpenCV——PS滤镜,毛玻璃特效
程序完成 "毛玻璃" 特效, 不过边缘没有处理,使得最终的图像有黑边. 不过,有了黑边,感觉效果也不错,所以这个bug 没有管. #ifndef PS_ALGORITHM_H_IN ...
- 安卓笔记--intent传值不更新问题
今天在学习安卓的过程中,遇到一个问题,就是用intent进行多次传值的话, 他永远是第一次的值 后来发现,intent接收数据被写到了onCreat();方法中,这时候finish();到上一个Act ...
- 面试之路(27)-链表中倒数第K个结点
代码的鲁棒性: 所谓的鲁棒性是指能够判断输入是否合乎规范,能对不和规范的程序进行处理. 容错性是鲁棒性的一个重要体现. 防御性编程有助于提高鲁棒性. 切入正题,我可不是标题党: 链表倒数第k个节点 列 ...
- Hadoop Bloom Filter 使用
1.Bloom Filter 默认的 BloomFilter filter =new BloomFilter(10,2,1); // 过滤器长度为10 ,用2哈希函数,MURMUR_HASH (1) ...
- How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub
How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub (我是如何拒绝微软30w的诱惑,专注于GitHub事业) 当我老 ...
- html5中新增的元素和废除的元素
一.新增的结构元素 1.section元素表示页面中的一个内容区块,比如章节.页眉.页脚或页面中的其他部分.它可以与h1.h2.h3.h4.h5.h6等元素结合起来使用,标示文档结构. h5中的代码事 ...