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