博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java——数据库操作
阅读量:6234 次
发布时间:2019-06-21

本文共 3914 字,大约阅读时间需要 13 分钟。

1.JDBC的驱动程序有几种

1>JDBC-ODBC

依靠ODBC驱动器和数据库通信,将ODBC二进制代码加载到使用该驱动程序的客户机上

2>本地API

把客户机的API上的JDBC调用转换为Oracle,DB2或其他DBMS的调用

3>JDBC网络驱动程序

将JDBC转换为与DBMS无关的网络协议,又被某个服务器转换为一种DBMS协议。

4>本地协议驱动

将JDBC直接转换为DBMS所使用的网络协议,允许客户机上直接调用DBMS服务器

2.存储过程

调用无参数的存储过程

create procedure insertProcedure as begin insert into tb values('');end;

DriverManager.getConnection().prepareCall("{call insertProcedure()}");//调用存储过程

调用有参数的存储过程

create procedure validateSelect

@userName varchar(20)

as select * from tb where name=@userName

DriverManager.getConnection().prepareCall("{call validateSelect('mr')}");调用存储过程

3.

数据:数据库存储的基本对象,包括数字文字图形图像等

数据库:有组织有共享的数据集合

数据库管理系统:数据库系统核心软件,在操作系统支持下操作。数据定义,数据操作,运行管理,建立维护等

数据库系统:引入数据库后的系统,包括数据库,数据库管理系统

4.Statement和PreparedStatement区别

Statement用于执行静态SQL,必须事先准备好

PreparedStatement表示预编译,解析编译,放命令缓冲区。运行同一个PreparedStatement对象时,只解析不编译,减少编译次数

5.事务处理

setAutoCommit()事务自动提交

rollback()事务回滚

commit()事务手动提交

6.获得表结构

connection----createStatement()----executeQuery()----

getMetaData()----getColumnCount()----

                          getColumnName(i)

                         getColumnTypeName(i)

ResultSetMetadata   获取关于ResultSet对象中列出的类型和属性的信息

ResultSet  保存查询数据的结果集

7.数据库存储图片

SQL Server:Image

MySQL:Blob img=rs.getBlob("picture")---new Image(img.getBytes(1,(int)img.length()))

in=FileInputStream(new File(filepath))

setBinaryStream(2,in,(int)new File(filepath).length())

8.SQL优化

1>主键长度不要太长

2>长度固定的字符字段应使用char或者nchar

3>长度不固定----varchar或者nvarchar

4>对可有可无的字段应该给出一个默认值

5>对查询频率高的字段建立索引

6>避免使用like,in,exists,not,<>,!>,!<等

7>避免where中使用函数

8>使用join和子查询时,优先考虑join

9>少用distinct,order by,联合查询union all少用union

10>尽量使用存储过程

9.MYSQL中文乱码

1>设置数据表及其字段的编码为utf-8

2>指定数据连接字符串的参数,指定向MYSQL数据库服务器发送SQL语句的编码方式一样为utf-8

10.statement----connection.createStatement()

statement.executeUpdate()        statement.executeQuery()

 insert into table(name,price) values ('','')                            while(rs.next())rs.getInt(1),rs.getFloat(3),rs.getString().trim()

11.纯文本存入和读取数据库

存入:

数据表中存储大文本文件的列设置为TEXT类型,fileChooser.getSelectedFile().getAbsolutePath()

                 setFileFilter(filter)

insert into tb_text (text) values (?)

connecttion.prepareStatement(sql).setAsciiStream(1,in,(int)file.length()).executeUpdate()

通过流将数据传到数据库,流既可以是java流对象,也可以是实现标准接口的子类

读取:

select text from tb_text 

conn.prepareStatement(sql).executeQuery().next().getAsciiStream(1)

                                           ResultSet             InputStream in--BufferReader(new InputStreamReader(in))----readLine()

12.获取数据库中所以表

JDBC中的DatabaseMetaData对象,getTables(要检索的类别名称,模式名称,要检索的表名称,表类型的类别)

connection.getMetaData()----getTables(null,null,"%",{"TABLE"})----rs.getString(3)用户表名称

DatabaseMetaData                ResultSet             

Oracle :select table_name from user_tables

13.如何实现MYSQL的备份与恢复

备份:mysqldump-----Runtime类输入cmd命令,执行mysqldump

String back="mysqldump -u"+username+" -p"+password+""+database;

Process p=Runtime.getRuntime().exec("cmd.exe /c"+back);

new BufferedReader(new InputStreamReader(p.getInputStream(),"utf-8"))--readLine

new OutputStreamWriter(new FileOutputStream(path),"utf-8")---writer(sb.toString())

 

恢复:从备份文件中读取SQL语句,并使用runtime类向当前环境输入cmd命令,并执行MySQL命令

String back="mysqldump -u"+username+" -p"+password+""+database;

Process p=Runtime.getRuntime().exec("cmd.exe /c"+back);

p.getOutputSream()

new BufferedReader(new InputStreamReader(new FIleInputSTream(pt),"utf-8"))----readLine

new BufferedWriter(new OutputStreamWriter(p.getOutputStream(),"utf-8"))

14.多表连接查询

A,B公共部分C

1>等值连接查询(内连接)table1 inner join table2 on 

只返回所有匹配的行,包括重复列,都存在的才查询出来----C

2>外连接(left join ,right join)table1 right join table2 on 

对内连接的扩展,查询完整性,不丢失数据

left join:A+C

right join:B+C

3>完全连接--full join

A+B,不符合条件的数据,左右表相应列填上null值

(union all保留重复列)select * from tb_dept union select * from tb_dept1

15.日期存储

java的Date——>数据库的datetime

conn.prepareStatement()---setTimestamp(1,new Timestamp(format.parse(String).getTime()))----executeupdate()

conn.createStatement().executeQuery("select * from tb_date")----getMetaData().getColumnCount()

new Timestamp(rs.getDate(1).getTime()).toString().subString(0,10)

Oracle:todate

SQL Server:CONVERT

转载于:https://www.cnblogs.com/xuexinyan/p/5221113.html

你可能感兴趣的文章
InnoDB透明页压缩与稀疏文件
查看>>
阅读SSM项目之scm【第二篇】
查看>>
聊聊springmvc中controller的方法的参数注解
查看>>
AspectJ 学习笔记
查看>>
GRU神经网络
查看>>
【log4】window用于设置小程序的状态栏、导航条、标题、窗口背景色。
查看>>
gpexpand分析
查看>>
前端每周清单第 44 期: 2017 JS 调查报告、REST 接口实时化、ESM 的过去与未来
查看>>
IP、UDP初探
查看>>
分布式系统中常见技术解决的问题是什么?
查看>>
WWDC 2018:理解崩溃以及崩溃日志
查看>>
「 iOS知识小集 」2018 · 第 40 期
查看>>
太极越狱重大安全后门
查看>>
一步一步学ROP之linux_x86篇
查看>>
【译】Ruby2.6的JIT功能,编译和解释型语言的相关说明
查看>>
架构设计知识梳理(2) Flux
查看>>
Android当内存监控到阈值时应该怎么办?
查看>>
阿里云宣布与国内规模最大的汽车企业上汽集团合作
查看>>
调试js碰到循环断点(debugger),应该怎么做?
查看>>
JB的测试之旅-网站的响应式与自适应
查看>>