一、JDBC(java database connectivity)
1、介绍
JDBC(Java Database Connectivity)是基于JAVA语言拜访数据库的一种技术。
Jdbc
Java访问控制数据库外面数据的一套标准接口
java面向对象编程
面向接口编程
▪ JDBC(Java Data Base Connectivity,java数据库连贯)是一种用于执行SQL语句的Java API,能够为多种关系数据库提供对立拜访,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此能够构建更高级的工具和接口,使数据库开发人员可能编写数据库应用程序,同时,JDBC也是个商标名。
▪ JDBC的设计思维:由SUN公司(JCP)提供拜访数据库的接口,由数据库厂商提供对这些接口的实现,程序员编程时都是针对接口进行编程的。
▪ JDBC包含一套JDBC的API和一套程序员和数据库厂商都必须去恪守的标准。
java.sql包:提供拜访数据库根本的性能
javax.sql包:提供扩大的性能
▪ 数据库中间件
▪ JDBC能够做些什么?
连贯到数据库
在Java app中执行SQL命令
处理结果。
2、职责
1、java:客户端:接收数据、拼接sql、发送sql、剖析后果、返回后果browser
2、db:服务器:接管sql,剖析解决,返回后果给java
3、操作
3.1 面向接口编程java.sql.*
1、java.sql.Driver:-->驱动
2、java.sql.Connection:-->连贯
3、java.sql.Statement:-->动态解决块java.sql.PreparedStatement:-->预处理块4、java.sql.ResultSet:-->后果集
5、java.sql.ResultSetMetaData:-->后果集元数据
3.2 罕用数据库连贯形式
mysql:
--String Driver="com.mysql.jdbc.Driver"//驱动程序--String URL="jdbc:mysql://localhost:3306/db_name";//连贯的URL,db_name为数据库名称
--String Username="username";//用户名
----String Password="password";//明码
Class.forName(Driver);
--Connection conn = DriverManager.getConnection(URL,Username,Password);
Oracle:
--String Driver="oracle.jdbc.driver.OracleDriver";//连贯数据库的办法--String URL="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID
String Username="username"; //用户名
String Password="password"; //明码
Class.forName(Driver) ; //加载数据库驱动
Connection con=DriverManager.getConnection(URL,Username,Password);
PostgreSQL:
--String Driver="org.postgresql.Driver";//连贯数据库的办法--String URL="jdbc:postgresql://localhost/db_name"; //db_name为数据库名
--String Username="username"; //用户名
--String Password="password"; //明码
--Class.forName(Driver) ;
--Connection con=DriverManager.getConnection(URL,Username,Password);
DB2:
--String Driver="com.ibm.dbjdbc.app.DBDriver"; //连贯具备DB2客户端的Provider实例--//String Driver="com.ibm.dbjdbc.net.DBDriver"; //连贯不具备DB2客户端的Provider实例
--String URL="jdbc:db2://localhost:5000/db_name"; //db_name为数据库名
--String Username="username"; //用户名
--String Password="password"; //明码
--Class.forName(Driver) ;
Microsoft SQL Server :
--String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连贯SQL数据库的办法--String URL="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名
--String Username="username"; //用户名
--String Password="password"; //明码
--Class.forName(Driver).new Instance(); //加载数据可驱动
3.3 与数据库的连贯
建设连贯
◼ 指定数据库连贯的url,数据源的地位
◼ 应用DriverManager.getConnection(url);
◼ 例如:
String url=“jdbc:oracle:thin:@127.0.0.1:1521:orcl”;
Connection conn=DriverManager.getConnection(url);
或者:
Connection conn=DriverManager.getConnection(String
url , String user , String password)
3.4 获取数据库信息
3.5 动态解决块 Statement
▪ 一、动态解决块 Statement
▪ 1、特点: 动态sql语句
▪ 2、创立: 连贯.createStatement()
▪ 3、操作
▪ ddl --> execute(String sql)
▪ dml --> executeUpdate(String sql)
▪ select -->executeQuery(String sql)
3.6 查询数据库 (Statement)
- 创立Statement
◼ 用户执行sql语句,
◼ Statement stmt=conn.createStatement();
- 执行查问语句
◼ String sql=“select * from emp”
◼ ResultSet rs=stmt.executeQuery(sql);
◼ executeQuery()个别用于执行一个sql语句,返回一个后果集。
- 敞开Statement
- stmt.close()
3.7 检索后果集
后面讲了如何执行sql语句,返回了ResultSet类的对象,这里讲如何对ResultSet对
象进行解决ResultSet的根本解决办法
ResultSet对象包含一个由查问语句返回的一个表,这个表中蕴含所有的查问后果,依照行和列进行解决.
ResultSet对象维持一个指向以后行的指针.最后,这个指针指向第一行之前.ResultSet类的next()办法使这个指针移向下一行.第一次,应用next()办法,将指针指向后果集的第一行.next办法的返回值是一个boolean值,若为true,则胜利移向下一行.若返回false则没有下一行.getXXX办法能够从某一列中取得后果.其中XXX是jdbc中的java数据类型.如getInt();须要制订检索的列,或名称.
Statement stmt=conn.createStatement();
String sql=“select a,b,c from mytable”;
ResultSet rs=stmt.executeQuery(sql);
While (rs.next())
{
int i=rs.getInt(1);
String s=rs.getString(“a”);
}
3.8 查询数据库 (PreparedStatement)
Statement对象在每次执行sql语句时都将语句传给数据库,在屡次执行同一个语句时,效率比拟低.
Statement对象Sql注入引起平安问题能够应用PreparedStatement,应用数据库的预编译性能,速度能够进步很多.防止sql注入引起的平安问题
PreparedStatement对象的sql语句能够承受参数,每次执行时能够传递不同的参数.
3.8 预处理块 PreparedStatement
1、特点: 动静sql语句 但凡Statement 可能解决的 PreparedStatement都能解决 ,反之不肯定
2、创立: 连贯.prepareStatement(String sql)
3、操作1)存在参数,必须填充setXxx(int parameterIndex, Xxx x)
2)、ddl --> execute()
dml -->executeUpdate()
select -->executeQuery()
ps: 参数 指 值,不是用于关键字 和字段下面
select -->where sal=?
insert --> values(?)
update --> set sal=? where deptno=?
delete --> where sal=?
3.9 PreparedStatement
- 创立
– String sql=“select * from emp where ename=?”
– PreparedStatement ps=conn.prepareStatement(sql);
- 执行
◼ ps.setInt(1,”SMITH”);
◼ ResultSet rs=pstmt.executeQuery();
- 敞开
◼ ps.close();
3.10 获取后果集的信息
ResultsetMetaData:
▪ 能够获取后果集中 的列的名称,数据类型等.
▪ ResultsetMetaData rsmd=rs.getMetaData();
▪ getColumnCount();
▪ getColumnName(int column);
▪ getColumnType(int column); 返回int值
▪ getColumnTypeName(int column); 返回字符串
▪ isReadOnly(int column)
▪ isNullable(int column)
3.11 更新数据库
▪ 包含批改,更新和删除记录,创立和删除表,以及减少和删除列.对应于数据库insert,update,delete等.
▪ 对数据库的更新操作也是通过PreparedStatement对象实现的.
▪ 不应用executeQuery()办法,应用executeUpdate()办法.
▪ executeUpdate的返回值是它影响的记录的行数.
例如
String sql=“update Customer set address =‘Peking’ where lastname=‘Li’”
int i=Stmt.executeUpdate(sql)
返回更新的行数
3.12 操作jdbc步骤
1、抉择快递公司 -->抉择数据库 加载驱动
2、与快递公司建立联系(电话号码...) -->建设连贯 (连贯信息 user password url)
3、筹备包裹 快递员收包裹 -->筹备sql语句 抉择解决块 (Statement PreparedStatement )
4、打包 投递 -->填充参数 执行(ddl -->execute(sql) dml-->executeUpdate(sql) select-->executeQuery() )
5、签字 验收 -->剖析后果(ddl-->没有异样 dml-->记录数>0 select -->剖析后果集)
6、打发走人 -->开释资源
3.13 批处理
屡次执行数据更新操作时,能够应用批处理缩小连贯数据库次数,提高效率.
Statement批处理形式:
Statement st = conn.createStatement();
st.addBatch(更新语句1);
st.addBatch(更新语句2);
…..
st.executeBatch();
st.close();
倡议采纳PreparedStatement
3.14 PreparedStatement批处理
PreparedStatement批处理形式:
PreparedStatement ps = conn.preparedStatement(sql);
ps.setXXX(索引,参数值);
… …
ps.addbatch();
ps.executeBatch();
ps.close();