java——数据库操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java——数据库操作相关的知识,希望对你有一定的参考价值。

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 [email protected]

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

以上是关于java——数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.IllegalStateException:onSaveInstanceState On Activity Backpress 后无法执行此操作(不使用任何片段)

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

java代码在片段活动中不起作用

java 代码片段【JAVA】

在Android中,如何将数据从类传递到相应的布局/片段文件?