(1)JDBC至数据库的通信路径
(2)访问数据库的方法步骤
JDBC URL的一般语法为:
jdbc: subprotocol :other stuff 即jdbc:<子协议>:<子名称>
其中, subprotocol用于指明连接到数据库的特定驱动程序。othe ruff 参数的格式随所使用的subprotocol不同而不同。如果要了解具体格式,可以查阅数据库供应商提供的相关文档。
1)找到所要使用的JDBC驱动程序类的名称,如:
org.postgresql.Driver
下载相应的DB驱动
2)将这个驱动包含在classpath中,或使用-classpath命令行启动数据库程序。
3)连接数据库。
a) 注册驱动程序
DriverManager类用于选择数据库驱动程序和创建新的数据库连接,连接后会返回一个Connection对象。不过,只有在驱动管理器中注册过的驱动程序才可以被激活。
jdbc.drivers属性包含了一系列驱动程序的类名,驱动管理器会在启动时注册这些驱动程序。可以用通过方法调用来设置系统属性,比如:
System .setProperty("jdbcc.drivers" ,"org. postgresql.Driver") . 也可以同时添加多个驱动程序,只要用冒号将它们隔开即可.
b) 打开数据库连接
String url = "jdbc: postgresql :COREJAVA";
Stri ng username = "dbuser";
String password =secret ;
Connection conn = DriverManager.getConnection(url , username, password);
4)用sql语句对数据库进行操作(省略了异常处理)
执行sql语句之前,首先要创建一个Statement对象
Statement stat=conn.createStatement();
stat.execute(“CREATE TABLE Greetings(Message CHAR(20))”);
stat.execute(“INSERT INTO Breetings VALUES(‘Hello,World!’)”);
ResultSet result=stat.executeQuery(“SELECT * FROM Greetings”);
result.next(); //默认指针在第一条记录之前
System.out.println(result.getString(1));
stat.execute(“DROP TABLE Greetings”);
conn.close(); //断开连接
说明:executeUpdate方法既可以执行诸如INSERT,UPDATE和DELETE之类的操作,也可以执行诸如CREATE TABLE和DROP TABLE之类数据定义命令。但是,执行SELECT查询时必须使用executeQuery方法。execute方法可以执行任意的SQL语句。
操作ACCESS数据库的代码如下:
public Connection getConnToAccess()
{
try{
AccessDriver = getPara("AccessDriver");
AccessURL = getPara("AccessURL");
AccessPath = getPara("AccessPath");
AccessURL=AccessURL+AccessPath;
Class.forName(AccessDriver).newInstance();
conn = DriverManager.getConnection(AccessURL);
}catch(Exception e){
//e.printStackTrace();
//return "操作数据库出错,请仔细检查" ;
//System.err.println(e.getMessage());
}
return conn;
}
其中AccessDriver=sun.jdbc.odbc.JdbcOdbcDriver
AccessURL=jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=
AccessPath=F:/Program Files/apache-tomcat-6.0.18/webapps/news/WEB-INF/DreamNews.mdb
查询是:
Connection Conn = DBConn.getConn();
Statement stmt = Conn.createStatement(1004,1007);
String sql = "select * from BigClass order by BigClassID";
ResultSet rs = stmt.executeQuery(sql);
整理成DBtest.jsp如下:
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>ACCESS数据库访问测试</title>
</head>
<body>
<%@ page language="java" import="java.sql.*"%>
<%!
Connection con=null;
%>
<%
try
{ // 加载、注册JDBC驱动器类
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 建立到数据库连接,如果设置了用户名和密码还要指出用户名和密码
con=DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:/ZQ/java source/Data_base/db_Test.mdb");
//在数据库中创建表
}
catch(SQLException ex)
{
while(ex!=null)
{
ex.printStackTrace();
ex=ex.getNextException();
}
}
// catch(IOException ex)
// { ex.printStackTrace();}
Statement stmt=con.createStatement();
ResultSet result=stmt.executeQuery("SELECT * FROM news");
result.next();
%>
<h2>读取的第一条新闻为:<%=result.getString("cont")%></h2>
</body>
</html>
注意,当操作数据库时,如果已经通过access打开的所将操作的库、表,则会出错。