一、jdbc概述

所有的数据库供应商和工具开发商都认为,如果Java能够认为SQL访问提供一套“纯”Java API,同时提供一个驱动管理,以允许第三方驱动程序可以连接到特定的数据库,那它就会显得非常的有用。这样,数据库供应商就可以提供自己的驱动程序,将其插入到驱动管理器中。这将成为一种向驱动管理器注册第三方驱动程序的简单机制。

这种接口组织方式遵循了微软公司的非常成功的ODBC模式,ODBC为c语言访问数据库提供了一套编程接口。jdbc和odbc都基于同一个思想:根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动管理程序与实际的数据库进行通信。这意味着jdbc api是大部分程序员不得不调用的接口。

二、jdbc驱动类型

第一类:JDBC/ODBC桥,Java 8 已经不再使用了。

第二类:部分Java程序和部分本地代码。

第三类:纯Java客户端类库

第四类:纯Java类库

大部分数据供应商都会提供第三类或第四类。

三、结构化查询语言(SQL)

在这里举例用主流数据库mysql(整理了一份网上资料):

//配置好mysql环境,命令窗开打开mysqlmysql -uroot -p接着输入 password
//列出数据库show databases
//创建数据库create database 数据库名 charset utf8
//使用数据库use 数据库名
//创建表create table 表名 (ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, .......,.......,.......,
)
//
//查询表
show tables
//查询表结构
desc 表名  或者 show columns from 表名
//删除数据库
drop database niu
//查看创建数据库的语句
show create database databasename
//查看创建表的语句
show create table tablename#自增长
auto_increment
#非空
not null
#默认值
default 'xx'
#唯一
unique
#指定字符集
charset
#主键
primary key
#外键
增加两个表之间的联系
增:
#学生表
create table students(
id int auto_increment primary key,
name varchar(10) not null,
sex varchar(3) default '女',
address varchar(50),
phone int not null unique,
age,
);
#成绩表
create table scores(
id int auto_increnent primary key,
s_id int not null,
grade float not null,
);
删:
drop table tablename;
truncate tablename;#快速删除表
改:
alter table oldtable rename newtable; #改表名
alter table tablename modify name varchar(20);#改表结构
alter table tablename change name newname varchar(20);#改表结构
alter table tablename add age float after name;#新增字段的位置查:
show create table tablename ;#查看新建表语句
desc table;#查看表结构
show tables ;#查看所有表数据:
增
insert into student (name,money,sex,phone) values ('hk',10000,'男',188);
insert into student values('','小明',100,'',120);
删
turncate tablename; #删除整表数据,自增长id从头再来,快速,从磁盘直接删除,不可恢复
delete from student;
#删除整个表的数据,自增长继续
改
update student set money=100;#不指定条件,修改所有
update student set money=110 where name='hk';#只改hk
自动提交
取消自动提交   set @@autocommitt=0;select @@autocommitt=0;
#自动提交取消后,当前会话显示已经成功执行,其实后台并没有执行查:
select * from students limit 1,5; #从第几条开始,下面的x条,不包含开始的那一条
SELECT * from students limit 5;查询5条
SELECT id,stu_name,sex,money,phone from students;#指定查询的字段
SELECT * from students;#查询所有的数据
SELECT * from students where sex='男';#指定条件
SELECT * from students where sex='男' and money>100; #多个条件,必须同时满足
SELECT * from students where sex='男' or sex='未知' ; #多个条件,有一个满足即可
SELECT * from students where sex !='男'; #<>也是不等于
SELECT * FROM students where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like
SELECT * from students a where a.stu_name like '姚_';#_通配符表示任意一个单字符,姚字后面只能跟一个字
SELECT a.stu_name '学生名称',a.phone '学生电话' from students as a where a.stu_name='姚远';#给表起别名,as可以省略
SELECT * from students a where a.stu_name in ('牛牛','林倩','林远');# in
SELECT * from students a where a.money BETWEEN 1000 and 10000;#在什么什么之间的数据
SELECT * from students ORDER BY money desc;
#order by xxx desc,根据哪个字段继续排序,默认是升序,
降序是desc,升序asc
SELECT * from students a where a.addr = '' or a.addr is null; #查询字段为空的数据
SELECT DISTINCT a.money from students a ;#去重
SELECT COUNT(*) '学生人数' from students where sex='女'; #统计行数
SELECT MAX(a.money) 钱最多 from students a; #最大值
SELECT min(money) 钱最少 from students;#最小值
SELECT AVG(a.money) 平均多少钱 from students a; #平均数
SELECT sum(a.money) 总共多少钱 from students a;#总和
SELECT sex 性别,count(*) 人数 from students GROUP BY sex; #分组
SELECT
sex 性别,
count(*) 人数,
a.stu_name 名字FROM
students a  WHERE a.money > 300 GROUP BY a.id HAVING a.stu_name LIKE '姚%';
#如果group by后面有条件的话,必须得用having子句,having子句里面用到的字段必须出现在select后面,如果group by和order by一起用的话,order by必须写在group by后面
SELECT *,COUNT(*) from students GROUP BY sex,class; #多个字段进行分组SELECT id,stu_name from students UNION SELECT id,t_name from teacher;
#用来合并两条select语句的结果,两条select语句字段数量要一致,并且数据类型也要一致
union和union all的区别就是一个会去重一个不会多表关联:
SELECT * FROM USER a, accounts b WHERE
a.id = b.user_id
AND a.username = 'niuhy';
-- SELECT * from students a ,scores b where a.id=b.s_id; -- 多表关联
-- 两个表里面都存在的数据查出来
SELECT * from students a LEFT JOIN scores b on a.id=b.s_id;
-- LEFT JOIN会把左边表所有的数据都查出来,右边表有匹配的就查出来
SELECT * from students a RIGHT JOIN scores b on a.id=b.s_id;
-- RIGHT JOIN会把右边表所有的数据都查出来,左边表有匹配的就查出来
SELECT * from students a inner JOIN scores b on a.id=b.s_id;
-- INNER JOIN两边表里都匹配的数据才查到
子查询:
把一条sql的结果,作为另一条sql的条件
SELECT * from scores a where a.s_id = (SELECT id from students where stu_name='牛牛');把子查询当成一个表
SELECT
a.grade 成绩,
b.stu_name 学生名称,
b.id 学号
FROM
scores a,
( SELECT id,stu_name FROM students WHERE stu_name = '牛牛') b
WHERE
a.s_id = b.id;
数据库权限:
mysql数据的权限实质上都是在user表里控制的
1、grant
#所有的权限 所有数据库下面的所有表 用户 用户ip
grant all on *.* to 'andashu'@'localhost' IDENTIFIED BY '123456' with grant option;
密码 #有执行grant语句的权限
grant all on *.* to 'andashu'@'%' IDENTIFIED BY '123456' with grant option;
取消授权:
Revoke select on *.* from dba@localhost;
Revoke all on *.* from andashu@localhost;2、修改user表的数据
对user表进行增加、修改和删除
flush privileges;#刷新权限
备份数据库:
mysqldump -uroot -p123456 db > db.sql
mysqldump -uroot -p123456 -A > all.sql
恢复数据:
mysql -uroot -p123456 db < db.sql
存储过程:
批量的造数据
delimiter $$; #为了改结束符
CREATE PROCEDURE big_data1(num int)#代表要造多少条数据 100
BEGIN
DECLARE i int;
set i=0;
WHILE i<num do
insert into students (stu_name,money) VALUES (CONCAT('小明',i),20000);
#CONCAT的作用是连接不同类型的数据
#把字符串和数字拼接到一起
set i=i+1;
end WHILE;
End
$$;
delimiter;call big_data1(500); #调用

以上是比较常用的命令。

三、数据库编程简述

1.数据库基本都是配置Driver、URL、username、password,不同的数据库有着不同的数据驱动,写法却大同小异:

orcle数据库连接常见方法

1).普通SID方式
           jdbc:oracle:thin:usernam/password@x.x.x.1:1521:SID

2).普通ServerName方式
          jdbc:oracle:thin:username/password@//x.x.x.1:1522/ABCD

2.mysql数据库的常见连接步骤

  1.加载数据库驱动

    Class.forName("com.mysql.jdbc.Driver");

  2.建立数据库连接

   String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8; //防止插入中文到数据库会乱码String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);

  3.创建Statement对象

  • createStatement()方法——用于创建一个基本的Statement对象;
  • prepareStatement(String sql)方法——根据参数化的SQL语句创建一个预编译的PreparedStatement对象;
  • prepareCall(String sql)方法——根据SQL语句来创建一个CallableStatement对象,用于调用数据库的存储过程.
Statement stmt = conn.createStatement();

  4.执行SQL语句并访问结果集

String sql = "SELECT id,username FROM Userdetails";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{System.out.println(rs.getString(1) + " " + rs.getString("username"));
}

当使用getXXX()方法访问结果集中的数据时,可通过列索引或列名来获取游标所指行中的列数据

数据库编程(一)JDBC篇相关推荐

  1. java基础类库——java数据库编程,JDBC连接(原生数据库连接)(十)

    java数据库编程,JDBC连接(原生数据库连接) JDBC严格来讲不属于一门技术,它属于一种服务.所有的操作流程都是固定的.JDBC是java提供的数据库操作的一个标准(它就是一组相关的标准接口), ...

  2. MySQL数据库(Java的数据库编程:JDBC)

    作者:渴望力量的土狗 博客主页:渴望力量的土狗的博客主页 专栏:MySQL数据库 目录 什么是数据库编程: 什么是JDBC? JDBC工作原理: JDBC的使用及相关操作: JDBC开发案例: JDB ...

  3. java mysql数据库编程_java JDBC数据库(mysql)编程

    什么是JDBC • JDBC(Java Data Base Connectivity,Java数据库连接) • 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问 • 它由一组用 ...

  4. MySQL~Java的数据库编程:JDBC(JDBC的环境配置以及使用)

      目录 JDBC的环境配置 JDBC的使用步骤(Java操作数据库) 建立数据库连接 方式一:DriverManager 方式二:DataSource(数据源/数据库连接池) DataSource与 ...

  5. java数据库编程(JDBC)

    现在所有的项目开发过程之中都不可能离开数据库,现在Java提供的JDBC非常有用处,JDBC严格来讲并不是一项技术,它属于一种服务.服务的特点在于:所有的操作流程都是固定的. 监听 和 实例服务 记事 ...

  6. java获取hana接口数据,SAP Hana 数据库编程接口 - JDBC

    Hana JDBC 驱动 安装 SAP HANA Client 后,安装目录的 ngdbc.jar 就是 JDBC 数据库驱动.主要注意 url 的写法和 Driver 的名称 : Driver: c ...

  7. python 数据库编程,这篇是针对 mysql 的,滚雪球学Python第4季第13篇

    在第一季滚雪球学 python 中,我们已经接触了 python 操作 sqlite,本篇博客为你介绍 python 与 mysql 和 nosql 之间的故事. 在正式学习之前,先确保你电脑上已经安 ...

  8. MySQL数据库 --- Java的JDBC编程

    文章目录 Java的JDBC编程 1. 数据库编程的必备条件 2. MySQL驱动包的安装 3. idea 中 驱动包的部署 4. Java的数据库编程: JDBC 5. JDBC API 6. JD ...

  9. java数据库编程(二) 数据库操作

    关于数据库的连接方法已在java 数据库编程(一)JDBC连接Sql Server数据库一文中为大家介绍,还没有链接数据库的小伙伴请先点击查看. 今天首先为大家介绍一下数据库的连接及操作的核心类与接口 ...

最新文章

  1. SQL Server语句大全(增删改查数据、创建表、删除表、修改表)
  2. 《那些年啊,那些事——一个程序员的奋斗史》——42
  3. H3C认证路由交换互联网络专家
  4. 汇编语言mul指令_跟着开源软件学汇编语言:计算器
  5. 快速排序总结,Python版
  6. 0基础web开发 python_真零基础Python开发web
  7. NYOJ -1364 (第十一届河南省赛)
  8. 是你需要的前端编码风格吗?
  9. win10系统找不到telnet服务器,win10系统找不到Telnet服务的解决教程
  10. 2020NISP一级(模拟题一)
  11. 透明LED屏幕一平米多少钱?详解透明LED显示屏价格组成
  12. SpringBoot+Spock的熟悉之路(二):Spock,Mock和Mockitio的关系
  13. Winform发布wss
  14. 手机计算机的冷知识,冷知识:手机为什么能变得越来越智能?
  15. [转]鸡头,风尾,如何抉择,年终前跳槽的思考
  16. OpenLayers结合Turf实现空间运算
  17. 个推+mui+html5 +java完成消息推送
  18. SimpleDateFormat 原来支持自动转换日期顺延
  19. strcat字符串拼接函数
  20. Cocos2dx如何在visualStudio开发环境搭建及项目搭建,新手小白,请多多关照!!!

热门文章

  1. Cartographer 3d配置
  2. 材质 设计 价格,你的理想旗舰机配置究竟是啥?
  3. Mac下升级ruby至最新版本
  4. 如何对CAD绘图软件中的页面进行设置
  5. WebDriver概述
  6. 网易有道java面试题,网易有道-Java岗-一面面经
  7. 90%企业在探索的敏捷开发怎么做?极狐GitLab总结了这些逻辑与流程
  8. day4 dadadasdasd
  9. 算法笔记 P103 例题:【PAT A1025】PAT Ranking
  10. mac下netstat