------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
JDBC简介
JDBC使得java程序员可以利用相同的代码访问不同的数据库。这是通过利用JDBC驱动程序作为Java代码和关系数据库之间的翻译程序而实现的,一种语言就有一种翻译,jdbc驱动程序就相当于一种翻译。
每种数据库都需要一个不同的JDBC的驱动程序然而事实如此,当今世界上的所有的数据库都有JDBC数据库驱动程序,JDBC驱动程序也可以来自第三方,所以数据库可能会有几个版本的JDBC驱动程序,比如想在流行的数据库Oracle,服务器端就有一个数据库驱动程序JDBC,还有一个已经优化过用来处理存储过程的。
Java发行包也包括一个默认的JDBC-ODBC驱动程序当可以通过ODBC连接到数据库时,它便可以连接到某个数据库,这证明,Java一面世就让他得到广泛的接受
从技术上来讲有四种JDBC驱动程序他们简单的称做:
1:Type1,这是一个JDBC-ODBC桥梁,促使通过一个ODBC驱动程序访问数据库,这类驱动程序很慢,只适合用于没其他JDBC驱动程序可用的情况。
2:Type2,,这个类型部分使用native-API编写,部分使用java编写。这类驱动程序利用数据库的clientAPI来连接数据库。
3:Type3,这类驱动程序会将JDBC调用翻译成中间件供应商的协议,然后再有中间件服务器翻译成数据库访问协议。
4:Type,这类驱动程序是用java编写的,直接连接到数据库
访问数据库的五个步骤:
1:加载要连接的数据库的JDBC驱动程序
2:获取一个数据库连接
3:创建一个表示某一条SQL语句的java.sql.Statement实例
4:根据需要创建一个java.sql.ResultSet对象,用来保存数据库返回的数据
5:关闭数据库以释放资源。
如何加载JDBC驱动程序?
JDBC驱动程序是由java.sql.driver接口表示的他定义了一个JDBC驱动程序和需要连接到数据库任意java类之间的一个契约,JDBC驱动程序经常被部署成一个jar包,你需要确定的是java程序运行的时候,类路径中有这个驱动程序文件
加载一个驱动程序要用到JAVA.LANG.CLASS类的forName静态方法
class.forname("数据库类型")
加载一个JDBC驱动程序的时候会自动在java.sql.DriverDmanger对象中为他注册,以便该对象能过找到驱动程序创建连接
如何建立数据库连接?
数据库连接推动了java代码和关系数据库之间的通信。java.sql.Connection接口是连接对象的模版,利用java.sql.DriverManager类的gerconnection静态方法获取一个连接,这个方法会在内存中查找加载的JDBC驱动程序,并返回一个java.sql.Connection对象,下面是常用的gerConnection重载方法的签名:
Connection getConnection(String url)
Connection gerConnection(String url String username String password)
第一个是连接不需要用户名和密码验证的数据库
第二个是连接需要用户名和密码验证的数据库,第二个方法可以取代第一个方法,只要将后面的用户名和密码都是为null,方法中第一个参数的是指数据库的位置以及要连接的数据库,第二个参数和第三个参数是数据库的用户名和密码。
数据库连接url地址的格式,不同的数据库,连接格式也有所不同,下面是三中苏据库种连接URL的格式:
Oracle数据库>jdbc:oracle:thin:@localhost:1521:sid
SqlServer数据库>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid
MySql数据库>jdbc:mysql://localhost:3306/sid
如何创建Statement对象?
java.sql.Statement表示一条SQL语句,可以通过调用java.sql.connection对象中的createStatement方法来获得一个Statement。
Statement statement =connection.createStatement();接着调用Statement对象中的一个方法并传递一条SQL语句 ,如果SQL语句要获取数据,就要使用executeQuery方法,否则使用executeUpdate。下面是使用方法:
ResultSet executeQuery(String sql);
int executeUpdate(String sql);
以上这两个方法都是接受喊SQL语句的String参数。SQL语句不需要用数据库语句终结符作为结尾,因为不同数据库语句终结符是不同的例如,oracle用的是一个分号,Sybase则是用单词go表示结束,数据库驱动程序会自动提供适当的语句终止符,在JDBC代码中不需要出现。
executeUpdate方法执行的是创建,更新,修改数据库表,这个方法返回的是INSERT,UPDATE,DELETE语句的行数,或者为不返回任何内容的SQL语句 返回为0;
executeQuetr方法执行的是一个返回数据的查询语句,返回的是一个包含指定查询的结果集,注意他不会返回null值
如何创建一个ResultSet对象?
ResrltSet是从Statement返回的一个数据库表的表示方法,ResultSte对象保存的是指向当前数据行的第一个光标的位置,光标第一次返回时,他位于第一行之前,为了访问ResultSet第一行中的数据,必须调用ResultSet对象中的next方法
next方法将光标移到下一行并返回true或者false,如果当前行有效返回true如果当前没有更多的行则返回false,ResultSet对象中提供了很多方法来来获取里面的数据例如gerInt(),getLong()等等
如何关闭JDBC对象?
JDBC里面设计到了很多对象,我们使用了这写对象我们要及时资源,这里提供了一些关闭资源的方法:
Connection,close()
statement.close()
resuleSet.cose();
下面是数据库操作的代码演示:
package it.com.jichu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DButil {
public static Connection getConnection(){
Connection conn=null;
String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=bishe";
String userName="sa";
String userPwd="1";
try
{
Class.forName(driverName);
System.out.println("数据库驱动成功");
}catch(Exception e){
e.printStackTrace();
System.out.println("数据库驱动失败");
}
try{
conn=DriverManager.getConnection(dbURL,userName,userPwd);
System.out.println("数据库连接成功");
}catch(Exception e)
{
e.printStackTrace();
System.out.print("数据库连接失败");
}
return conn;
}
public static String search(String username,String password){
String result=null;
Connection con=getConnection();
Statement st=null;
ResultSet rs=null;
System.out.print(username);
System.out.print(password);
try {
st=con.createStatement();
rs=st.executeQuery("select username from users where username='"+username+"' and password="+password+"");
//System.out.print(rs);
if(rs.next()){
result=new String(rs.getString(1).getBytes("ISO8859-1"),"GBK");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(st!=null){
st.close();
st=null;
}
} catch (Exception e) {
// TODO Auto-generated catch block6
e.printStackTrace();
}
if(con!=null){
try {
con.close();
con=null;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.print(result);
return result;
}
public int add(String username,String password){
int num=0;
Connection con=null;
Statement st=null;
con=getConnection();
System.out.println(password);
System.out.println(username);
String sql="insert into users(username,password)values('"+username+"',"+password+")";
try {
st=con.createStatement();
num=st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
st.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
System.out.println(num);
return num;
}}
java有自己的数据库访问和数据库操作技术,称做JDBC,相关功能类放在java.sql包中。