您的位置:首页 > 数据库

JDBC连接数据库概述

2015-11-02 16:10 411 查看
直接介绍JDBC连接数据库的流程及其原理

创建一个以JDBC连接数据库的程序,包含7个步骤

1、加载JDBC数据库驱动

在连接数据库之前,首先要加载想要连接的数据库的驱动,就是数据库厂商提供的jar包,将它加载到JVM(Java虚拟机)中,这通过java.lang.Class类的静态方法forName(StringclassName)实现。

例如:

01try{

03//加载MySql的驱动类
04//不同的数据库提供的驱动包是不一样的,在下面大家将会看到常用的驱动类。
05Class.forName("com.mysql.jdbc.Driver");
06System.out.println("成功加载驱动");

08}catch(ClassNotFoundExceptione){

10System.out.println("找不到驱动程序类,加载驱动失败!");

12e.printStackTrace();

14}
成功加载后,会将Driver类的实例注册到DriverManager类中,我们在下一步中,就可以直接调用类中的方法。

2、提供JDBC连接的URL

•连接URL定义了连接数据库时的协议、子协议、数据源标识。

•书写形式:协议:子协议:数据源标识

协议:在JDBC中总是以jdbc开始

子协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端口。

Stringurl="jdbc:mysql://127.0.0.1:3301/shopcar";//数据库连接字符串
Stringusename="root";
Stringpassword="123456";


3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。

•使用DriverManager的getConnectin(Stringurl,Stringusername,Stringpassword)方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

try{
Connectionconn=DriverManager.getConnection(url,usename,password);//创建Connection连接

}catch(SQLExceptionse){
System.out.println("数据库连接失败!");
se.printStackTrace();
}


4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

具体的实现方式:

1Statementstmt=con.createStatement();
2PreparedStatementpstmt=con.prepareStatement(sql);
3CallableStatementcstmt=con.prepareCall("{CALLdemoSp(?,?)}");


5、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate

和execute

1、ResultSetexecuteQuery(StringsqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

2、intexecuteUpdate(StringsqlString):用于执行INSERT、UPDATE或

DELETE语句以及SQLDDL语句,如:CREATETABLE和DROPTABLE等

3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

具体实现的代码:

1ResultSetrs=stmt.executeQuery("SELECT*FROM...");
2introws=stmt.executeUpdate("INSERTINTO...");
3booleanflag=stmt.execute(Stringsql);

6、处理结果

两种情况:

1、执行更新返回的是本次操作影响到的记录数。

2、执行查询返回的结果是一个ResultSet对象。

•ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。

•使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){
Stringname=rs.getString("name");
Stringpass=rs.getString(1);//此方法比较高效
}



(列是从左到右编号的,并且从列1开始)

7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

1、关闭记录集

2、关闭声明

3、关闭连接对象

if(rs!=null){//关闭记录集
try{
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}

if(srmt!=NULL){//关闭申明
try{
  stmt.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}

if(conn!=null){//关闭连接对象
try{
  conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}


总结:在此,完整的演示一个连接数据库的实例

try{
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动,注册到驱动管理器
Stringurl="jdbc:mysql://127.0.0.1:3301/shopcar";//数据库连接字符串
Stringusename="root";
Stringpassword="123456";
Connectionconn=DriverManager.getConnection(url,usename,password);//创建Connection连接
//statement用来执行SQL语句
Statementstmt=conn.createStatement();
//结果集
ResultSetrs=stmt.executeQuery("select*from`goods1`");
//student为你表的名称
while(rs.next()){
application.setAttribute("id",rs.getString("id"));
application.setAttribute("goods_name",rs.getString("goods_name"));
application.setAttribute("goodspic",rs.getString("goodspic"));
application.setAttribute("goods_pri",rs.getString("goods_pri"));
application.setAttribute("goods_name_en",rs.getString("goods_name_en"));
/*Stringid=(rs.getString("id"));
Stringgoods_name=(rs.getString("goods_name"));
Stringgoodspic=(rs.getString("goodspic"));
Stringgoods_pri=(rs.getString("goods_pri"));
Stringgoods_name_en=(rs.getString("goods_name_en"));*/
%>
<tr>
<td><%=application.getAttribute("id")%></td>
<td><imgsrc="<%=application.getAttribute("goodspic")%>"><%=application.getAttribute("goods_name")%></td>
<td>¥<%=application.getAttribute("goods_pri")%></td>
<td><inputtype="text"name="<%=application.getAttribute("goods_name_en")%>"id=""value=""placeholder="0"></td>
</tr>
<%

}

}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}


<%
try{
Class.forName("com.mysql.jdbc.Driver");
Stringurl="jdbc:mysql://127.0.0.1:3301/test";
Stringusername="root";
Stringpassword="123456";
Connectionconn=DriverManager.getConnection(url,username,
password);

PreparedStatementpreStmt=conn
.prepareStatement("SELECTname,passwordFROMuserWHEREnamelike?");

Stringpram=request.getParameter("parm");
preStmt.setString(1,"%"+pram+"%");//给参数(?)赋值
ResultSetrs=preStmt.executeQuery();//执行SQL语句
%>
<label>顾客信息</label>
<tableborder="1">
<tr>
<td>姓名:</td>
<td>密码:</td>
</tr>

<%
while(rs.next()){
Stringname=newString(rs.getString("name").getBytes(
"iso-8859-1"));
name+=newString(rs.getString("password").getBytes(
"iso-8859-1"));
%>
<tr>
<%--<td><%=newString(rs.getString("name")).getBytes("iso-8859-1")%></td>--%>
<td><%=rs.getString("name")%></td>
<td><%=rs.getString("password")%></td>
</tr>
<%
}
%>
</table>

<%
}catch(SQLExceptione){
e.toString();
}finally{
if(rs!=null)
try{
rs.close();
}catch(SQLExceptione){
out.print(e.toString());
}finally{
try{
if(preStmt!=null)
preStmt.close();
}catch(SQLExceptione){
e.toString();
}finally{
try{
if(conn!=null)
conn.close();
}catch(SQLExceptione){
e.toString();
}
}
}
}
%>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: