java基础之JDBC编程(mysql)

JDBC(java dadabase connection)

SQL分类

  • DDL:dadabase definition langnage:数据定义语言:create,alter,drop,truncate;
  • DML:databae manipulation langnage:数据操作语言:insert,update,delete
  • DCL:database controll langnage:数据控制怨言:grant(授权),revoke(回收权限)
     注意:delete和truncate的区别
delete:每次删除一行,并在日志事务系统中记录一项identity,需要提交事务,并可以回滚,如果有相应的触发器会触发触发器来执行,不影响表所占用的extent,高水线(high w2atermark)保持原位置不动。
truncate:只能一次性删除整个表中的所有数据行并保持表结构。因为是ddl语句,操作立即生效不需要提交事务,不能回滚,也不会触发trriger,它通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。这也是为什么delete完后怎增加的数据行会以删除前的数据行开始计数,而truncate是从1开始计数行数。
总之:truncate效率较delete更快,性能更好;如果没有备份切记不要使用truncate和drop删除表

修改表字段:

ddl:
alter table modify/add/drop id int not null
alter table drop index __.
注意:mysql删除约束使用drop,mysql默认唯一约束列为指定索引列

主键约束:逻辑主键用于标示每行记录,自增,id intauto_increament primary key

外键约束:一般是建表时建立外键约束,主表删除使用级联删除从表外键约束

create table A(id int);
create table B(b_id int) 
foreign key (b_id) reference A(id) 
on delete cascade --级联删除

索引:drop/create index column_name_index on table.

优点:查询速度快,相当于书的目录
缺点:系统开销,数据表记录修改后需要数据库系统维护索引;存储索引需要一定的存盘空间。

多表查询:

外连接:full join
左外连接: left join 左表的记录全部查询出来,右表没有匹配到的为null
右外连接:right join 右表的记录全部查询出来,左表没有匹配到的为null

注意:
左连接时on后面的条件对左表没有作用,除非使用where条件进行筛选才能对坐标有限制,但是对右边有筛选作用
例如:
A left B on  A=1 and B=1----会查出所有A的记录
A left B on   B=1  where A=1 ----会查出A=1的记录
右连接时on后面的条件对右表没有作用,除非使用where条件,但是对左边有筛选作用


JDBC基本编程步骤:
Class.forName("com.mysql.jdbc.Driver");//加载驱动

Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/databae_name","root","root");//建立连接

Preparedstatement pre=con.Preparedstatement("select * from user where id=?"); //进行预编译

ResultSet reult=pre.excute();//得到执行结果
(result.next())
{
System.out.println(result.getInt.....);
}
注意:
其中预编译PreparedStatement相比Statement优势如下:
  1. 预编译的语句,性能更好
  2. 无需拼装sql语句,编程简单
  3. 关键能够防止sql注入,安全性高

数据库连接池:
由于频繁的加载数据库驱动和连接数据库会消耗很大的内存,所以建议数据库连接池,预先创建一定的数量的数据库连接,当需要连接直接从池里面获取,使用完后关闭资源并回收连接至连接池中,供下次使用。

常用:区别见:点击打开链接

DBCP连接池,Apache公司开发的,tomcat里面使用的,但是不能自动清理无用的statement和resultset

C3P0连接池,可以自动清理不再使用的连接,自动清理statement和resultSet资源,hibernate和spring在使用

Druid连接池, 阿里出品,淘宝和支付宝专用数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个 SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。简单SQL语句用时10微秒以内,复杂SQL用时30微秒。通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值