JDBC:
1、JDBC简介:
在Java技术系列中,访问数据库的技术叫做JDBC,它提供了一系列的API,让Java语言编写的代码连接数据库,对数据库的数据进行添加、删除、修改和查询。
(1)、JDBC相关的API,存放在java.sql包中:
java.sql.Connection: 负责连接数据库
java.sql. Statement: 负责执行数据库SQL语句
java.sql.ResultSet: 负责存放查询结果
(2)、数据库驱动程序:
针对不同类型的数据库,JDBC机制中提供了“驱动程序”的概念。对于不同的数据库,程序只需要使用不同的驱动。
数据库连接方式:
A、数据库厂商驱动:
B、ODBC:
2、建立ODBC数据源:
在ODBC使用前,需要配置ODBC的数据源,让ODBC知道连接的具体数据库。
配置ODBC数据源:
3、JDBC操作:
JDBC操作的4个步骤:
(1)、通过JDBC连接到ODBC,并获取连接对象:
import java.sql.Connection;
import java.sql.DriverManager;
…….
Class.forName (“sun.jdbc.odbc.JdbcOdbcDriver”);
Connection con = DriverManager.getConnection (“jdbc: odbc:DSSchool”);
(2)、使用Statement接口运行SQL语句:
import java.sql.Statement;
……
Statement stat = con.CreateStatement();
stat.executeQuery(SQL语句);
stat.executeUpdate(SQL语句);
(3)、处理SQL语句运行结果:
(4)、关闭数据库连接:
stat.close ();
con.close ();
4、使用PreparedStatement和CallableStatement:
5、事务:
在银行转账时,要对数据库进行两个操作,即将一个账户的钱减少,将另一个账户的钱增多。但是由于操作的先后顺序,如果两个操作之间发生障碍,则会导致数据不一致。因此,需要设计一个事务,在两条语句都执行成功后,数据修改才会真正提交放入数据库,否则数据操作回滚。
例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Transaction{
public static void main(String[] args) throws Exception{
Connection con = null;
Try{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
con = DriverManager.getConnection(“jdbc:odbc:DSStudent”);
Statement stat = con.createStatement();
Con.setAutoCommit(false);//设置为不要自动提交
String sql1 = “UPDATE1”;
String sql2 = “UPDATE2”;
stat.executeUpdate(sql1);
stat.executeUpdate(sql2);
con.commit();//提交以上操作
} catch (Exception e){
Con.rollback();//回滚
} finally{
con.close();
}
}
}
6、使用厂商驱动进行数据库连接:
(1)、MS SQL Server:
Class.forName(“com.microsoft.jdbc.sqlserver.AQLServerDriver”);
Connection con = DriverManager.getConnection(
“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Student”,”sa”,”psw”);
(2)、Oracle:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection con = DriverManager.getConnection(
“jdbc:oracle:thin:@localhost:1521:Student”,”username”,”password”);
(3)、MySQL:
Class.forName(“com.mysql.jdbc.Driver”);
Connection con = DriverManager.getConnection(
“jdbc:mysql://localhost:3306/Student”,”username”,”password”);
7、使用连接池访问数据库:
在实际应用开发中,使用JDBC直接访问数据库中的数据,每一次数据访问请求,都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接数据库是一件既消耗资源又费时的工作,如果频繁发生,系统的性能必然急剧下降。数据库连接池是解决这个问题最常用的方法。
连接池是创建和管理数据库连接的缓冲技术,由于不处理事务时,数据库连接会闲置,因此,将其很好地管理起来,让闲置的连接被其他需要的线程使用,可以提高系统性能。其工作原理是,当一个线程需要用JDBC对数据库操作时,它从池中请求一个连接。当这个线程使用完这个连接,将其返回到连接池中,这样就可以被其他想使用该连接的线程使用。
主要操作:
(1)、服务器建立数据库连接池对象;
(2)、按照事先指定的参数创建初始数量的数据库连接,放入池中;
(3)、对于一个数据库访问请求,直接从从连接池中得到一个连接;
(4)、存取数据;
(5)、关闭数据库,释放所有数据库连接,放入池中。
访问连接池的过程:
(1)、确定连接目的地WebLogic的位置:
HashTable table = new HashTable();
Table.put(Context.INITIAL_CONTEXT_FACTORY,
“logic.jndi.WLInitialContextFactory”);
Table.put(Context.PROVIDER_URL,”t3://localhost:7001”);
(2)、确定连接目的地的WebLogic数据源的JNDI名称:
Context context = new InitialContext(table);
Object obj = context.lookup(“SStudent”);
ataSource ds =
ataSource)PortableRemoteObject.narrow(obj,DataSource.class);
(3)、根据DataSource对象获取连接,并访问数据库:
例:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Hashtable;
import java.naming.Context;
import java.naming.InitialContext;
import java.rmi.PorttableRemoteObject;
import java.sql.DataSource;
public TestPool{
public static void main(String[] args){
Hashtable table = new Hashtable();
table.put(Context.INITIAL_CONTEXT_FACTORY,
”weblogic.jndi.WLInitialContextFactory”);
table.put(Context.PROVIDER_URL,”t3://localhost:7001”);
Context context = new InitialContext(table);
Object obj = context.lookup(“DSStudent”);
DataSource ds = (DataSource)PortableRemoteObject.narrow(obj,DataSource.clss);
Connectioncon conn = ds.getConnection();
Statement stat = conn.CreateStatement();
ResultSet rs = stat.executeQuery(“SELECT stuname FROM T_Student”);
while(rs.next()){
System.out.print(rs.getString(“stuname”));
}
rs.close();
stat.close();
conn.close();
}
}