文档库 最新最全的文档下载
当前位置:文档库 › Java的数据库连接编程(JDBC)技术档

Java的数据库连接编程(JDBC)技术档

Java的数据库连接编程(JDBC)技术档
Java的数据库连接编程(JDBC)技术档

Java的数据库连接编程(JDBC)技术

[知识要点]:JDBC、JDBC的工作原理,访问数据库的方法、Statement、PreparedStatement、CallableStatement,ResultSet等对象的编程使用

9.1基本知识

9.1.1 JDBC

Java DataBase Connectivity(Java 数据库连接技术),它是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口(API--它是一种可用于执行SQL语句的Java API,即由一组用Java语言编写的类与接口所组成)。

有了JDBC从而可以使Java程序员用Java语言来编写完整的数据库方面的应用程序。另外也可以操作保存在多种不同的数据库管理系统中的数据,而与数据库管理系统中数据存储格式无关。同时Java语言的与平台的无关性,不必在不同的系统平台下编写不同的数据库应用程序。

9.1.2 JDBC设计的目的

(1)ODBC:微软的ODBC是用C编写的,而且只适用于Windows平台,无法实现跨平台地操作数据库。

(2)SQL语言:SQL尽管包含有数据定义、数据操作、数据管理等功能,但它并不是一个完整的编程语言,而且不支持流控制,需要与其它编程语言相配合使用。

(3)JDBC的设计:由于Java语言具有健壮性、安全、易使用并自动下载到网络等方面的优点,因此如果采用Java语言来连接数据库,将能克服ODBC局限于某一系统平台的缺陷;将SQL语言与Java语言相互结合起来,可以实现连接不同数据库系统,即使用JDBC可以很容易地把SQL语句传送到任何关系型数据库中。

(4)JDBC设计的目的:它是一种规范,设计出它的最主要的目的是让各个数据库开发商为Java程序员提供标准的数据库访问类和接口,使得独立于DBMS的Java应用程序的开发成为可能(数据库改变,驱动程序跟着改变,但应用程序不变)。

9.1.3 JDBC的主要功能

(1)创建与数据库的连接;(2)发送SQL语句到任何关系型数据库中;(3)处理数据并查询结果。

编程实例:

try

{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //(1)创建与数据库的连接

Connection

con=DriverManager.getConnection("jdbc:odbc:DatabaseDSN","Login","Password");

Statement stmt=con.createStatement();

ResultSet rs=stmt.executeQuery("select * from DBTableName");//(2)发送SQL语句到数据库中

while(rs.next())

{ String name=rs.getString("Name") ; //(3)处理数据并查询结果。

int age=rs.getInt("age");

float wage=rs.getFloat("wage");

}

rs.close(); //(4)关闭

stmt.close();

con.close();

}

catch(SQLException e)

{ System.out.println("SQLState:"+ e.getSQLState());

System.out.println("Message:" + e.getMessage());

System.out.println("Vendor:" + e.getErrorCode());

}

9.1.4 JDBC与ODBC的对比

(1)ODBC是用C语言编写的,不是面向对象的;而JDBC是用Java编写的,是面向对象的。

(2)ODBC难以学习,因为它把简单的功能与高级功能组合在一起,即便是简单的查询也会带有复杂的任选项;而JDBC的设计使得简单的事情用简单的做法来完成。

(3)ODBC是局限于某一系统平台的,而JDBC提供Java与平台无关的解决方案。

(4)但也可以通过Java来操作ODBC,这可以采用JDBc-ODBC桥接方式来实现(因为Java不能直接使用ODBC,即在Java中使用本地C的代码将带来安全缺陷)。

9.1.5 JDBC驱动程序的类型

目前比较常见的JDBC驱动程序可分为以下四个种类:

(1)JDBC-ODBC桥加ODBC驱动程序

JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。

JDBC-ODBC 桥接方式利用微软的开放数据库互连接口(ODBC API)同数据库服务器通讯,客户端计算机首先应该安装并配置ODBC driver 和JDBC-ODBC bridge两种驱动程序。

(2)本地API

这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。

这种驱动方式将数据库厂商的特殊协议转换成Java代码及二进制类码,使Java 数据库客户

方与数据库服务器方通信。例如:Oracle用SQLNet协议,DB2用IBM 的数据库协议。数据库厂商的特殊协议也应该被安装在客户机上。

(3)JDBC网络纯Java驱动程序

这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。

这种方式是纯Java driver。数据库客户以标准网络协议(如HTTP、SHTTP)同数据库访问服务器通信,数据库访问服务器然后翻译标准网络协议成为数据库厂商的专有特殊数据库访问协议(也可能用到ODBC driver)与数据库通信。对Internet 和Intranet 用户而言这是一个理想的解决方案。Java driver 被自动的,以透明的方式随Applets自Web服务器而下载并安装在用户的计算机上。

(4)本地协议纯Java驱动程序

这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。

这种方式也是纯Java driver。数据库厂商提供了特殊的JDBC协议使Java数据库客户与数据库服务器通信。然而,将把代理协议同数据库服务器通信改用数据库厂商的特殊JDBC driver。这对Intranet 应用是高效的,可是数据库厂商的协议可能不被防火墙支持,缺乏防火墙支持在Internet 应用中会存在潜在的安全隐患。

9.2 JDBC的工作原理

JDBC的设计基于X/Open SQL CLI(调用级接口)这一模型。它通过定义出一组API 对象和方法以用于同数据库进行交互。

在Java程序中要操作数据库,一般应该通过如下几步(利用JDBC访问数据库的编程步骤):

(1)加载连接数据库的驱动程序Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

(2)创建与数据源的连接

String url="jdbc:odbc:DatabaseDSN";

Connection con=DriverManager.getConnection(url,"Login","Password");

(3)查询数据库:创建Statement对象并执行SQL语句以返回一个ResultSet对象。

Statement stmt=con.createStatement();

ResultSet rs=stmt.executeQuery("select * from DBTableName");

(4)获得当前记录集中的某一记录的各个字段的值

String name=rs.getString("Name");

int age=rs.getInt("age");

float wage=rs.getFloat("wage");

(5)关闭查询语句及与数据库的连接(注意关闭的顺序先rs再stmt最后为con)

rs.close();

stmt.close();

con.close();

9.3 JDBC的结构

JDBC主要包含两部分:面向Java程序员的JDBC API及面向数据库厂商的JDBC Drive API。

(1)面向Java程序员的JDBC API:Java程序员通过调用此API从而实现连接数据库、执行SQL语句并返回结果集等编程数据库的能力,它主要是由一系列的接口定义所构成。java.sql.DriveManager:该接口主要定义了用来处理装载驱动程序并且为创建新的数据库连接提供支持。

java.sql.Connection:该接口主要定义了实现对某一种指定数据库连接的功能。

java.sql.Statement:该接口主要定义了在一个给定的连接中作为SQL语句执行声明的容器以实现对数据库的操作。它主要包含有如下的两种子类型。

java.sql.PreparedStatement:该接口主要定义了用于执行带或不带IN 参数的预编译SQL 语句。

java.sql.CallableStatement:该接口主要定义了用于执行数据库的存储过程的雕用。java.sql.ResultSet:该接口主要定义了用于执行对数据库的操作所返回的结果集。

(2)面向数据库厂商的JDBC Drive API:数据库厂商必须提供相应的驱动程序并实现JDBC API所要求的基本接口(每个数据库系统厂商必须提供对DriveManager、Connection、Statement、ResultSet等接口的具体实现),从而最终保证Java程序员通过JDBC实现对不同的数据库操作。

9.4数据库应用的模型

(1)两层结构(C/S):在此模型下,客户端的程序直接与数据库服务器相连接并发送SQL语句(但这时就需要在客户端安装被访问的数据库的JDBC驱动程序),DBMS服务器向客户返回相应的结果,客户程序负责对数据的格式化。

client端ODBC/JDBC Server端(DBMS)

或数据库专用协议

主要的缺点:受数据库厂商的限制,用户更换数据库时需要改写客户程序;受数据库版本的限制,数据库厂商一旦升级数据库,使用该数据库的客户程序需要重新编译和发布;对数据库的操作与处理都是在客户程序中实现,使客户程序在编程与设计时较为复杂。

(2)三(或多)层结构(B/S):在此模型下,主要在客户端的程序与数据库服务器之间增加了一个中间服务器(可以采用C++或Java语言来编程实现),隔离客户端的程序与数据库服务器。客户端的程序(可以简单为通用的浏览器)与中间服务器进行通信,然后由中间服务器处理客户端程序的请求并管理与数据库服务器的连接。

客户端程序HTTP RMI CORBA 中间服务器JDBC 数据库服务器

9.5通过JDBC 实现对数据库的访问

(1)引用必要的包

import java.sql.*; //它包含有操作数据库的各个类与接口

(2)加载连接数据库的驱动程序类

为实现与特定的数据库相连接,JDBC必须加载相应的驱动程序类。这通常可以采用Class.forName()方法显式地加载一个驱动程序类,由驱动程序负责向DriverManager登记注册并在与数据库相连接时,DriverManager将使用此驱动程序。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

注意:这条语句直接加载了sun公司提供的JDBC-ODBC Bridge驱动程序类。

(3)创建与数据源的连接

String url="jdbc:odbc:DatabaseDSN";

Connection con=DriverManager.getConnection(url,"Login","Password");

注意:采用DriverManager类中的getConnection()方法实现与url所指定的数据源建立连接并返回一个Connection类的对象,以后对这个数据源的操作都是基于该Connection类对象;但对于Access等小型数据库,可以不用给出用户名与密码。

String url="jdbc:odbc:DatabaseDSN";

Connection con=DriverManager.getConnection(url);

System.out.println(con.getCatalog()); //取得数据库的完整路径及文件名

JDBC借用了url语法来确定全球的数据库(数据库URL类似于通用的URL),对由url 所指定的数据源的表示格式为

jdbc::[ database locator]

jdbc---指出要使用JDBC

subprotocal---定义驱动程序类型

database locator---提供网络数据库的位置和端口号(包括主机名、端口和数据库系统名等) jdbc:odbc://https://www.wendangku.net/doc/9c528956.html,:port/databasefile

主协议jdbc 驱动程序类型为odbc,它指明JDBC管理器如何访问数据库,该例指名为采用JDBC-ODBC桥接方式;其它为数据库的位置表示。

例如:装载mySQL JDBC驱动程序

Class.forName("org.gjt.mm.mysql.Driver ");

String url

="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&chara cterEncoding=8859_1"

//testDB为你的数据库名

Connection conn= DriverManager.getConnection(url);

例如:装载Oracle JDBC OCI驱动程序(用thin模式)

Class.forName("oracle.jdbc.driver.OracleDriver ");

String url="jdbc:oracle:thin:@localhost:1521:orcl";//orcl为你的数据库的SID

String user="scott";

String password="tiger";

Connection conn= DriverManager.getConnection(url,user,password);

注意:也可以通过con.setCatalog("MyDatabase")来加载数据库。

例如:装载DB2驱动程序

Class.forName("com.ibm.db2.jdbc.app.DB2Driver ")

String url="jdbc:db2://localhost:5000/sample";

//sample为你的数据库名

String user="admin";

String password="";

Connection conn= DriverManager.getConnection(url,user,password);

例如:装载MicroSoft SQLServer驱动程序

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver ");

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";

//pubs为你的数据库的

String user="sa";

String password="";

Connection conn= DriverManager.getConnection(url,user,password);

(4)查询数据库的一些结构信息

这主要是获得数据库中的各个表,各个列及数据类型和存储过程等各方面的信息。根据这些信息,从而可以访问一个未知结构的数据库。这主要是通过DatabaseMetaData类的对象来实现并调用其中的方法来获得数据库的详细信息(即数据库的基本信息,数据库中的各个表的情况,表中的各个列的信息及索引方面的信息)。

DatabaseMetaData dbms=con.getMetaData();

System.out.println("数据库的驱动程序为"+dbms.getDriverName());

(5)查询数据库中的数据:

在JDBC中查询数据库中的数据的执行方法可以分为三种类型,分别对应Statement (用于执行不带参数的简单SQL语句字符串),PreparedStatement(预编译SQL语句)和CallableStatement(主要用于执行存储过程)三个接口。

9.5.1、实现对数据库的一般查询Statement

1、创建Statement对象(要想执行一个SQL查询语句,必须首先创建出Statement对象,它封装代表要执行的SQL语句)并执行SQL语句以返回一个ResultSet对象,这可以通过Connection类中的createStatement()方法来实现。

Statement stmt=con.createStatement();

2、执行一个SQL查询语句,以查询数据库中的数据。Statement接口提供了三种执行SQL语句的方法:executeQuery()、executeUpdate() 和execute()。具体使用哪一个方法由SQL 语句本身来决定。

方法executeQuery 用于产生单个结果集的语句,例如SELECT 语句等。

方法executeUpdate 用于执行INSERT、UPDATE或DELETE 语句以及SQL DDL(数据定义语言)语句,例如CREATE TABLE 和DROP TABLE。INSERT、UPDATE 或DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATE TABLE 或DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

方法execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。一般不会需要该高级功能。

下面给出通过Statement类中的executeQuery()方法来实现的代码段。executeQuery()方

法的输入参数是一个标准的SQL查询语句,其返回值是一个ResultSet类的对象。

ResultSet rs=stmt. executeQuery ("select * from DBTableName");

要点:

①JDBC在编译时并不对将要执行的SQL查询语句作任何检查,只是将其作为一个String类对象,直到驱动程序执行SQL查询语句时才知道其是否正确。对于错误的SQL查询语句,在执行时将会产生SQLException。

②一个Statement对象在同一时间只能打开一个结果集,对第二个结果集的打开隐含着对第一个结果集的关闭。

③如果想对多个结果集同时操作,必须创建出多个Statement对象,在每个Statement 对象上执行SQL查询语句以获得相应的结果集。

④如果不需要同时处理多个结果集,则可以在一个Statement对象上顺序执行多个SQL 查询语句,对获得的结果集进行顺序操作。

import java.sql.*;

public class ResultSetTest

{ public static void main(String args[])

{ try

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con=DriverManager.getConnection("jdbc:odbc:studlist");

Statement stmt=con.createStatement();

ResultSet rs1=stmt.executeQuery("select name from student");

ResultSet rs2=stmt.executeQuery("select age from student");

//此时rs1已经被关闭

while(rs2.next())

{

System.out.println(rs2.getObject(1));

}

rs2.close();

stmt.close();

con.close();

}

catch(Exception e)

{

System.out.println(e);

}

}

}

注意:

此时显示出的将是姓名还是年龄?(将显示的是rs2的结果集的内容,即学生的年龄,因为采用JDBC-ODBC方式的驱动程序时,并且是采用同一个Statement对象,它只会保留最新的结果集,rs1中的内容将会被新的结果集所取代)。

3、关闭Statement对象:每一个Statement对象在使用完毕后,都应该关闭。

stmt.close();

9.5.2、预编译方式执行SQL语句PreparedStatement

由于Statement对象在每次执行SQL语句时都将该语句传给数据库,如果需要多次执行同一条SQL语句时,这样将导致执行效率特别低,此时可以采用PreparedStatement对象来封装SQL语句。如果数据库支持预编译,它可以将SQL语句传给数据库作预编译,以后每次执行该SQL语句时,可以提高访问速度;但如果数据库不支持预编译,将在语句执行时才传给数据库,其效果类同于Statement对象。

另外PreparedStatement对象的SQL语句还可以接收参数,可以用不同的输入参数来多次执行编译过的语句,较Statement灵活方便(详见后文介绍)。

1、创建PreparedStatement对象:从一个Connection对象上可以创建一个PreparedStatement对象,在创建时可以给出预编译的SQL语句。

PreparedStatement pstmt=con.prepareStatement("select * from DBTableName");

2、执行SQL语句:可以调用executeQuery()来实现,但与Statement方式不同的是,它没有参数,因为在创建PreparedStatement对象时已经给出了要执行的SQL语句,系统并进行了预编译。

ResultSet rs=pstmt.executeQuery(); // 该条语句可以被多次执行

3、关闭PreparedStatement

pstmt.close(); //其实是调用了父类Statement类中的close()方法

9.5.3、执行存储过程CallableStatement

CallableStatement类是PreparedStatement类的子类,因此可以使用在PreparedStatement 类及Statement类中的方法,主要用于执行存储过程。

1、创建CallableStatement对象:使用Connection类中的prepareCall方法可以创建一个CallableStatement对象,其参数是一个String对象,一般格式为:

不带输入参数的存储过程“{call 存储过程名()}”。

带输入参数的存储过程“{call存储过程名(?, ?)}”

带输入参数并有返回结果参数的存储过程“{? = call 存储过程名(?, ?, ...)}”

CallableStatement cstmt=con.prepareCall("{call Query1()}");

2、执行存储过程:可以调用executeQuery()方法来实现。

ResultSet rs=cstmt.executeQuery();

3、关闭CallableStatement

cstmt.close(); //其实是调用了父类Statement类中的close()方法

9.5.4、ResultSet对象

①执行完毕SQL语句后,将返回一个ResultSet类的对象,它包含所有的查询结果。但对ResultSet类的对象方式依赖于光标(Cursor)的类型,而对每一行中的各个列,可以按任何顺序进行处理(当然,如果按从左到右的顺序对各列进行处理可以获得较高的执行效率);

ResultSet类中的Course方式主要有:

ResultSet.TYPE_FORW ARD_ONL Y(为缺省设置):光标只能前进不能后退,也就是只

能从第一个一直移动到最后一个。

ResultSet.TYPE_SCROLL_SENSITIVE:允许光标前进或后退并感应到其它ResultSet的光标的移动情形。

ResultSet.TYPE_SCROLL_INSENSITIVE:允许光标前进或后退并不能感应到其它ResultSet的光标的移动情形。

ResultSet类中的数据是否允许修改主要有:

ResultSet.CONCUR_READ_ONL Y(为缺省设置):表示数据只能只读,不能更改。

ResultSet.CONCUR_UPDA TABLE:表示数据允许被修改。

可以在创建Statement或PreparedStatement对象时指定ResultSet的这两个特性。Statement

stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONL Y,ResultSet.CONCUR_READ_ON L Y);

PreparedStatement pstmt=con.PrepareStatement("insert into bookTable values (?,?,?)",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

②ResultSet类的对象维持一个指向当前行的指针,利用ResultSet类的next()方法可以移动到下一行(在JDBC中,Java程序一次只能看到一行数据),如果next()的返回值为false,则说明已到记录集的尾部。另外JDBC也没有类似ODBC 的书签功能的方法。

③利用ResultSet类的getXXX()方法可以获得某一列的结果,其中XXX代表JDBC中的Java数据类型,如getInt()、getString()、getDate()等。访问时需要指定要检索的列(可以采用int值作为列号(从1开始计数)或指定列(字段)名方式,但字段名不区别字母的大小写)。

while(rs.next())

{ String name=rs.getString("Name"); //采用“列名”的方式访问数据

int age=rs.getInt("age");

float wage=rs.getFloat("wage");

String homeAddress=rs.getString(4); //采用“列号”的方式访问数据

}

9.5.5、数据转换

利用ResultSet类的getXXX()方法可以实现将ResultSet中的SQL数据类型转换为它所返回的Java数据类型。

9.5.6、NULL结果值

要确定给定结果值是否是JDBC NULL,必须先读取该列,然后使用ResultSet.wasNull 方法检查该次读取是否返回JDBC NULL。

当使用ResultSet.getXXX方法读取JDBC NULL时,方法wasNull将返回下列值之一:(1)Javanull值

对于返回Java对象的getXXX方法(例如getString、getBigDecimal、getBytes、getDate、getTime、getTimestamp、getAsciiStream、getUnicodeStream、getBinaryStream、getObject等)。(2)零值:对于getByte、getShort、getInt、getLong、getFloat和getDouble。

(3)false值:对于getBoolean

9.5.6、获得结果集中的结构信息

利用ResultSet类的getMetaData()方法来获得结果集中的一些结构信息(主要提供用来描述列的数量、列的名称、列的数据类型。利用ResulSetMetaData类中的方法)。ResultsetMetaData rsmd=rs.getMetaData();

rsmd.getColumnCount(); //返回结果集中的列数

rsmd.getColumnLabel(1); //返回第一列的列名(字段名)

例如:

Statement stmt=con.createStatement();

ResultSet rs=stmt.executeQuery("select * from TableName");

for(int i=1; i<=rs.getMetaData().getColumnCount(); i++) //跟踪显示各个列的名称{ System.out.print(rs. getColumnName (i)+"\t");

}

while(rs.next())

{ //跟踪显示各个列的值

for(int j=1; j<=rs.getMetaData().getColumnCount(); j++)

{ System.out.print(rs.getObject(j)+"\t");

}

}

9.6更新数据库

前面主要介绍如何实现对数据库的查询操作,但在许多应用中需要实现对数据库的更新,这主要涉及修改、插入和删除等(即SQL语句中的Insert、Update、Delete、Creat、Drap等)。仍然通过创建Statement对象来实现,但不再调用executeQuery()方法,而是使用executeUpdate()方法。

要点 :正确区分Statement类中的executeQuery()、execute()和executeUpdate()方法的用法:(1)

executeQuery() 执行一般的SQL查询语句(即SELECT语句)并返回Resultset对象;(2)execute()可以执行各种SQL查询语句,并可能返回多个结果集(这一般主要发生在执行了返回多个结果集的存储过程时),此时可以采用Resultset类的getResultSet()来获得当前的结果集;(3)executeUpdate()执行对数据库的更新的SQL语句或DDL语句。

9.6.1 对表中的记录进行操作

对一个表中的记录可以进行修改、插入和删除等操作,分别对应SQL的Update、Insert、Delete操作;executeUpdate()方法的输入参数仍然为一个String对象(即所要执行的SQL语句),但输出参数不是ResultSet对象,而是一个整数(它代表操作所影响的记录行数)。Statement stmt=con.createStatement();

stmt.executeUpdate("Update bookTable set Title='Java2' where Author='zhang'");

stmt.executeUpdate("Delete from bookTable where Author='zhang'");

stmt.executeUpdate("Insert into bookTable(BookID,Author,Title) values(1,'Li Ming','Java2')"); //未给出的列,其值为NULL

程序实例:对数据库中的表进行更新操作并显示操作前后的结果

import java.sql.*;

public class DBUpdateSetTest

{ public static void main(String args[])

{ try

{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con=DriverManager.getConnection("jdbc:odbc:studlist");

Statement stmt=con.createStatement();

ResultSet rs=stmt.executeQuery("select * from student");

System.out.println("Result before executeUpdate");

while(rs.next())

{

System.out.println(rs.getString("name"));

System.out.println(rs.getString("age"));

}

stmt.executeUpdate("Update student set name='Yang' where id=0");

stmt.executeUpdate("Delete from student where id=2");

stmt.executeUpdate("Insert into student(id,name,age,sex) values(2,'zhang',30,true)");

rs=stmt.executeQuery("select * from student");

System.out.println("Result After executeUpdate");

while(rs.next())

{

System.out.println(rs.getString("name"));

System.out.println(rs.getString("age"));

}

rs.close();

stmt.close();

con.close();

}

catch(Exception e)

{

System.out.println(e);

}

}

}

9.6.2 创建和删除表

创建和删除一个表主要对应于SQL的Create Table和Drop Table语句。这可以通过Statement对象的executeUpdate()方法来完成。

①创建表

Statement stmt=con.createStatement();

stmt.executeUpdate("create table TableName(ID integer, Name V ARCHAR(20), Age integer)");

stmt.executeUpdate("Insert into TableName(ID, Name, Age) values(1,'Yang Ming',30)");

②删除表

Statement stmt=con.createStatement();

stmt.executeUpdate("Drop Table TableName");

9.6.3 增加和删除表中的列

对一个表的列进行更新操作主要是使用SQL的ALTER Table语句。对列所进行的更新操作会影响到表中的所有的行。

①增加表中的一列

Statement stmt=con.createStatement();

stmt.executeUpdate("Alter Table TableName add Column Address VarChar(50)");

stmt.executeUpdate("Update TableName set Address='Beijing,China' where ID=1");

②删除表中的一列

Statement stmt=con.createStatement();

stmt.executeUpdate("Alter Table TableName Drop Column Address");

stmt.executeQuery("Select * from TableName");

9.6.4 利用PreparedStatement对象实现数据更新

同SQL查询语句一样,对数据更新语句时也可以在PreparedStatement对象上执行。使用PreparedStatement对象,只需传递一次SQL语句,可以多次执行它,并且可以利用数据库的预编译技术,提高执行效率。另外也可以接受参数。

PreparedStatement pstmt=con.prepareStatement("Update TableName set Address='Beijing,China' where ID >1");

pstmt.executeUpdate();

9.7参数的输入与输出

要实现使用SQL语句的输入与输出参数,必须在PreparedStatement类的对象上进行操作;同时由于CallableStatement类是PrepareStatement类的子类,所以在CallableStatemen对象上的操作也可以使用输入与输出参数;其主要的编程原理是在生成CallableStatement或PreparedStatement类的对象时,可以在SQL语句中指定输入或输出参数,在执行这个SQL 语句之前,要对输入参数进行赋值。

(1)使用PreparedStatement类的对象

通过prepareStatement类的对象可以实现在查询语句与数据更新语句方面都可以设置输入参数。

具体的方法是在SQL语句中用“?”标明参数,在执行SQL语句之前,使用setXXX 方法给参数赋值,然后使用executeQuery()或executeUpdate()来执行这个SQL语句。每次执行SQL语句之前,可以给参数重新赋值。

setXXX方法用于给相应的输入参数进行赋值,其中XXX是JDBC的数据类型,如:Int、String等。setXXX方法有两个参数,第一个是要赋值的参数在SQL语句中的位置,SQL 语句中的第一个参数的位置为1,第二个参数的位置为2;setXXX方法的第二个参数是要传递的值,如100、“Peking”等,随XXX的不同而为不同的类型。

PreparedStatement pstmt=con.prepareStatement("Update TableName set Name=? where

ID=?");

pstmt.setString(1,"zhang Hua"); //设置第一个参数(Name)为“zhang Hua”

for(int i=1;i<3;i++)

{ pstmt.setInt(2,i); //设置第二个参数(ID)为1,2

pstmt.executeUpdate();

}

要点:最终实现Update TableName set Name=zhang Hua where ID=1 与Update TableName set Name=zhang Hua where ID=2的效果。

(2)使用CallableStatement对象

如果要求调用数据库的存储过程,要使用CallableStatement对象。另外还有些存储过程要求用户输入参数,这可以在生成CallableStatement对象的存储过程调用语句中设置输入参数。在执行这个存储过程之前使用setXXX方法给参数赋值,然后再执行这个存储过程。

CallableStatement cstmt=con.prepareCall("{call Query(?)}"); //Query为存储过程名

cstmt.setString(1,"输入参数"); //为存储过程提供输入参数

ResultSet rs=cstmt.executeQuery();

(3)接收输出参数

某些存储过程可能会返回输出参数,这时在执行这个存储过程之前,必须使用CallableStatement的registerOutParameter方法首先登记输出参数,在registerOutParameter方法中要给出输出参数的相应位置以及输出参数的SQL数据类型。在执行完存储过程以后,必须使用getXXX方法来获得输出参数的值。并在getXXX方法中要指出获得哪一个输出参数(通过序号来指定)的值。

实例:存储过程getTestData有三个输入参数并返回一个输出参数,类型分别为V ARCHAR。在执行完毕后,分别使用getString()方法来获得相应的值。

CallableStatement cstmt = con.prepareCall(“{? = call getTestData (?,?,?)}”);

cstmt.setString(1,Value); //设置输入参数

cstmt.setInt(2,Value);

cstmt.setFloat(3,Value);

cstmt.registerOutParameter(1,java.sql.Types.VARCHAR); //登记输出参数

ResultSet rs = cstmt.executeQuery(); //执行存储过程

rs.getString(1); //获得第一个字段的值

String returnResult=cstmt.getString(1); //获得返回的输出参数的值

要点:由于getXXX方法不对数据类型作任何转换,在registerOutParameter方法中指明数据库将返回的SQL数据类型,在执行完存储过程以后必须采用相应匹配的getXXX方法来获得输出参数的值。

9.8批量处理JDBC语句提高处理速度

有时候JDBC运行得不够快,这可以使用数据库相关的存储过程。当然,作为存储过程的一个替代方案,可以试试使用Statement 的批量处理特性以提高速度。

存储过程的最简单的形式就是包含一系列SQL语句的过程,将这些语句放在一起便于在同一个地方管理也可以提高速度。Statement 类可以包含一系列SQL语句,因此允许在同一个数据库事务执行所有的那些语句而不是执行对数据库的一系列调用。

使用批量处理功能涉及下面的两个方法:

addBatch(String) 方法

executeBatch方法

如果你正在使用Statement 那么addBatch 方法可以接受一个通常的SQL语句,或者如果你在使用PreparedStatement ,那么也可以什么都不向它增加。

executeBatch 方法执行那些SQL语句并返回一个int值的数组,这个数组包含每个语句影响的数据的行数。

注意:如果将一个SELECT语句或者其他返回一个ResultSet的SQL语句放入批量处理中就会导致一个SQLException异常。

关于java.sql.Statement 的简单范例可以是:

con = DriverManager.getConnection(url,"myLogin", "myPassword");

con.setAutoCommit(false);

stmt = con.createStatement();

stmt.addBatch("INSERT INTO student " + "V ALUES(4,'Yang',20,True)");

stmt.addBatch("INSERT INTO student " + "V ALUES(5,'li',20,True)");

stmt.addBatch("INSERT INTO student " + "V ALUES(6,'zhang',20,True)");

stmt.addBatch("INSERT INTO student " + "V ALUES(7,'wang',20,True)");

stmt.addBatch("INSERT INTO student " + "V ALUES(8,'liu',20,True)");

int [] updateCounts = stmt.executeBatch();

https://www.wendangku.net/doc/9c528956.html,mit();

con.setAutoCommit(true);

PreparedStatement 有些不同,它只能处理一部分SQL语法,但是可以有很多参数,因此重写上面的范例的一部分就可以得到下面的结果:

// 注意这里没有删除语句

PreparedStatement stmt = conn.prepareStatement(

"INSERT INTO student V ALUES(?,?,?,?)"

);

User[ ] users = ...;

for(int i=0; i< i++)>

stmt.setInt(1, users[i].getID());

stmt.setString(2, users[i].getName());

stmt.setInt(3, users[i].getAge());

stmt.setBoolean(4, users[i].getSex());

stmt.addBatch( );

}

int[ ] counts = stmt.executeBatch();

如果你不知道你的语句要运行多少次,那么这是一个很好的处理SQL代码的方法。在不使用批量处理的情况下,如果添加50个用户,那么性能就有影响,如果某个人写了一个脚本添加一万个用户,程序可能变得很糟糕。添加批处理功能就可以帮助提高性能,而且在后面的那种情况下代码的可读性也会更好。

Java中连接MySql数据库的几种方法

JDBC Java中JDBC定义了java与各种sql数据库之间的编程接口,JDBC API是一个统一的标准应用程序编程接口,这样可以屏蔽异种数据库之间的差异。 JDBC的工作原理 JDBC与ODBC(OpenData Base Connectivity,开放式数据库连接)的作用非常类似,它在应用程序和数据库之间起到了桥梁的作用。ODBC使用的特别广泛,在java中还提供了JDBC-ODBC桥,能够在JDBC与ODBC之间进行转换,这样可以通过ODBC屏蔽不同种数据库之间的差异。在JDK的包java.sql.*中定义了一系列的类、接口、异常以及这些类和接口中定义的属性和方法,java的开发人员通过一定的规则调用java.sql.*中的API就可以实现对数据库管理系统的访问。 JDBC的四种驱动 1.JDBC-ODBC Bridge JDBC-ODBC Bridge可以访问一个ODBC数据源,但在执行Java程序的机器上必须安装ODBC驱动,并作出配置,它的调用方式如下图: 因为中间有个JDBC-ODBC,所以影响了执行效率。 配置ODBC数据源的方法如下(以Mysql为例): 第一步,打开控制面板—>管理工具--->数据源(ODBC) 选择系统DSN,这一项默认应该是空的,我这里是已经配置好了一个数据源。

第二步,点击添加 第三步,选择Mysql的ODBC驱动,点击完成。 注:MySQL的ODBC驱动在系统中一般是找不到的,因为它不是系统默认自带的驱动,所以,我们要自己安装我们所需要的MySQL的ODBC驱动。安装步骤如下: ①.下载安装包,https://www.wendangku.net/doc/9c528956.html,/downloads/connector/odbc/ ②.我们下载与自己系统相应的ODBC驱动 这里我们选择

Java 实现连接sql server 2000(JDBC数据库访问例子)

第一种:通过ODBC连接数据库 JAVA语言的跨平台的工作能力(Write Once ,Run Anywhere)、优秀的图像处理能力(我相信现在没有那种语言可以超过JAVA在网络上的图形处理能力)、网络通信功能、通过JDBC数据库访问技术等等,让我们谁都不可否认JAVA语言是SUN公司对于计算机界的一个巨大的贡献。笔者可以描述这样一个场景:有一天你上网完全可以不用IE 或者NETSCAPE,上网就像是玩游戏,你可以获得游戏那么精美的图像和互动的感觉,如果你玩过UO,也许你就知道那种感觉了,但是JAVA做成的东西一定会超过UO的,因为不单单是游戏,也不是单单是浏览器,如果你愿意(要你有钱,有时间,有优秀的JAVA人才)你可以把所有的这一切用Java完全集成出来!!!我不是夸大JAVA的功能,大家可以访问一下 https://www.wendangku.net/doc/9c528956.html,的那个社区程序,你就能找到一种感觉了:相信我没有说什么假话。好了,不说废话了,现在我向你介绍JAVA的数据库访问技术 ----JDBC数据库访问技术(你可千万不要搞成ODBC了!)。 JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我也不知道是不是真的),而且现在的JDBC 3.0据Sun 说也能访问Execel等电子表格程序! JDBC对于数据库的访问有四种方式,我们这里只是介绍两种: 第一种是通过ODBC做为“桥”(Bridge)对数据库访问,第二种是直接对数据库访问。 我们先来看看第一种JDBC<-->ODBC访问的流程: JDBC Driver Mannager->JDBC<->ODBC桥->ODBC->数据库客户机驱动库->数据库服务器->返回查询结果,在这种访问中值的我们注意的是虽然JAVA是"Write Once ,Run Anywhere",但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动,当你看了下面的另外一个流程的时候或许你会想:明明下一种更方面,为什么还要有这个东西的产生!呵呵,因为,未必所有的数据库服务器提供商都提供下面的JDBC驱动程序(给JDBC访问提供相应的接口),所以就有了JDBC<->ODBC Bridge。 接着再让我们来看看第二种访问流程: JDBC Driver Mannager->局部JDBC驱动->客户端数据库->数据库服务器->返回查询结果,这种访问事实上是转换JDBC调用为相应的数据库(Oracle, Sybase, Informix, DB2, 和其他的数据库数据库管理系统)的客户端API调用(这么说,不知道大家能不能懂,说简单点就好像ASP不是通过DSN对数据库访问而是通过OLEDB访问,说道这里我还是不知道大家能不能明白我的意思。哎呀,不要扔鸡蛋嘛!),这种方式的访问需要相应的数据库提供商提供相应的JDBC 驱动程序,但是有一种好处,可以独立于odbc用于可以随处可Run的客户端的浏览器中的Applet程序。

Java连接各种数据库写法

随笔- 6 文章- 0 评论- 1 Java连接各种数据库写法 # 示例配置参考,涵盖几乎所有的主流数据库 ############# Oracle数据库######################## # 数据库驱动名 driver=oracle.jdbc.driver.OracleDriver # 数据库URL(包括端口) dburl=jdbc:oracle:thin:@127.0.0.1:1521:zvfdb # 数据库用户名 user=root # 用户密码

password=zvfims ############# DB2数据库######################## # 数据库驱动名 driver=com.ibm.db2.jcc.DB2Driver # 数据库URL(包括端口) dburl=jdbc:db2://127.0.0.1:50000/zvfdb # 数据库用户名 user=root # 用户密码 password=zvfims ############# MySQL数据库######################## # 数据库驱动名

driver=com.mysql.jdbc.Driver # 数据库URL(包括端口) dburl=jdbc:mysql://127.0.0.1:3306/zvfdb # 数据库用户名 user=root # 用户密码 password=zvfims ############# PostgreSQL数据库数据库######################## # 数据库驱动名 driver=org.postgresql.Driver # 数据库URL(包括端口) dburl=jdbcostgresql://127.0.0.1/zvfdb

完整java连接数据库步骤

完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库 ?创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过https://www.wendangku.net/doc/9c528956.html,ng.Class类的静态方法forName(String className)实现。 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类,加载驱动失败!"); e.printStackTrace() ; } 成功加载后,会将Driver类的实例注册到DriverManager类中。 2、提供JDBC连接的URL ?连接URL定义了连接数据库时的协议、子协议、数据源标识。 ?书写形式:协议:子协议:数据源标识 协议:在JDBC中总是以jdbc开始 子协议:是桥连接的驱动程序或是数据库管理系统名称。 数据源标识:标记找到数据库来源的地址与连接端口。 例如:(MySql的连接URL) jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=gbk ; useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为 gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。 3、创建数据库的连接 ?要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。 ?使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。 例如: //连接MySql数据库,用户名和密码都是root String url = "jdbc:mysql://localhost:3306/test" ; String username = "root" ; String password = "root" ; try{ Connection con = DriverManager.getConnection(url , username , password ) ; }catch(SQLException se){ System.out.println("数据库连接失败!"); se.printStackTrace() ; }

java平时最常用的7种数据库连接方式

今天总结了java平时最常用的7种数据库连接方式,现在分享给大家 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).new Instance(); Connection con=DriverManager.getConnection(URL,Username,Password); Microsoft SQL Server: 1) String Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"; //连接SQL数据库的方法 String URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名 String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).new Instance(); //加载数据可驱动 Connection con=DriverManager.getConnection(URL,UserName,Password); // 2) 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(); //加载数据可驱动 Connection con=DriverManager.getConnection(URL,UserName,Password); Sysbase: String Driver="com.sybase.jdbc.SybDriver"; //驱动程序 String URL="jdbc:Sysbase://localhost:5007/db_name"; //db_name为数据可名 String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).newInstance(); Connection con=DriverManager.getConnection(URL,Username,Password); Oracle(用thin模式): String Driver="oracle.jdbc.driver.OracleDriver"; //连接数据库的方法String URL="jdbc:oracle:thin:@loaclhost:1521:orcl"; //orcl为数据库的SID String Username="username"; //用户名 String Password="password"; //密码 Class.forName(Driver).newInstance(); //加载数据库驱动

JDBC连接sql server数据库的详细步骤和代码

JDBC连接sql server数据库的详细步骤和代码JDBC连接sql server数据库的步骤如下: [java] view plaincopy 1.1、加载JDBC驱动程序: 2.在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 3.这通过https://www.wendangku.net/doc/9c528956.html,ng.Class类的静态方法forName(String className)实现。 4.成功加载后,会将Driver类的实例注册到DriverManager类中。 5.2、提供JDBC连接的URL 6.?连接URL定义了连接数据库时的协议、子协议、数据源标识。 7.?书写形式:协议:子协议:数据源标识 8.协议:在JDBC中总是以jdbc开始 9.子协议:是桥连接的驱动程序或是数据库管理系统名称。 10.数据源标识:标记找到数据库来源的地址与连接端口。 11.3、创建数据库的连接 12.?要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 13.该对象就代表一个数据库的连接。 14.?使用DriverManager的getConnectin(String url , String username , 15. String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 16.密码来获得。 17.4、创建一个Statement 18.?要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 19.种类型: 20.1、执行静态SQL语句。通常通过Statement实例实现。 21.2、执行动态SQL语句。通常通过PreparedStatement实例实现。 22.3、执行数据库存储过程。通常通过CallableStatement实例实现。 23.具体的实现方式: 24. Statement stmt = con.createStatement() ; 25. PreparedStatement pstmt = con.prepareStatement(sql) ; 26. CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ; 27.5、执行SQL语句 28. Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 29.和execute 30.1、ResultSet executeQuery():执行查询数据库的SQL语句 31.,返回一个结果集(ResultSet)对象。 32.2、int executeUpdate():用于执行INSERT、UPDATE或 33. DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等 34.3、execute():用于执行返回多个结果集、多个更新计数或二者组合的 35.语句。 36.具体实现的代码: 37. ResultSet rs = pstmt.executeQuery() ;

java数据库连接方法

一、问题引入 在java程序中,需要访问数据库,做增删改查等相关操作。如何访问数据库,做数据库的相关操作呢? 二、Java连接数据库方法概述 java.sql提供了一些接口和类,用于支持数据库增删改查等相关的操作。该jar包定义了java访问各种不同数据库(mysql,oracle,sqlserver。。。。。)的统一接口和标准。同时,各个数据库厂商都提供了该jar包中定义的各个接口的实现类,用于具体实现本厂数据库的增删改查操作,即称之为“数据库驱动jdbc driver”。例如mysql的数据库驱动为:com.mysql.jdbc.driver;oracle的数据库驱动为:oracle.jdbc.driver.oracledriver。在java程序中访问数据库,做数据库连接时,可以采用两种方式: 1、使用java.sql API 利用该包提供的各种接口和类直接访问数据库。 例子: 2、使用数据库连接池 目前存在多个开源的java数据库连接池,这些连接池都是在java.sql基础上编写而成。 该连接池的解决的问题是: 当使用java.sql中提供的api创建数据库连接时候,需要耗费很大的资源,要进 行用户名密码数据库连接验证等,即耗费资源也耗费时间。如果在程序中,每次需 要访问数据库时候,都进行数据库连接,那么势必会造成性能低下;同时,如果用 户失误忘记释放数据库连接,会导致资源的浪费等。而数据库连接池就是解决该问 题,通过管理连接池中的多个连接对象(connection),实现connection重复利用。 从而,大大提高了数据库连接方面的性能。 该连接池的功能是: 负责创建,管理,释放,分配数据库连接即(connection)。首先,负责创建相应 数目的数据库连接对象(connection)对象,并存放到数据库连接池(connect pool)中。当用户请求数据库连接时,该连接池负责分配某个处于空闲状态的数据库连接 对象;当用户发出释放该数据库连接时,该连接池负责将该连接对象重新设置为空

java图形界面以及链接数据库

import .*; import .*; import .*; public class NoteTextArea extends JFrame implements ActionListener { private JPanel jp=new JPanel(); private JButton[] jb = new JButton[4]; private JComboBox box; private JTextArea jt=new JTextArea(); private JScrollPane js=new JScrollPane(jt,,; private String[] obj; private JTextField text = new JTextField(); public NoteTextArea() { (null); String[] obj = new String[]{"微笑","生气","难过","得意"}; box = new JComboBox(obj); JLabel j1 = new JLabel("留言版"); JLabel j2 = new JLabel("你"); JLabel j3 = new JLabel("地说:"); jb[0] = new JButton("清屏"); jb[1] = new JButton("至顶"); jb[2] = new JButton("至尾"); jb[3] = new JButton("提交"); for(int i = 0;i < 3;i++) {

jb[i].setBounds(650,i*75+55,100,50); } for(int i = 0;i < 3;i++) { (jb[i]); } (280,10,50,30); (20,375,30,50); (55,385,80,30); (160,375,40,50); (210,385,300,30); jb[3].setBounds(520,365,75,50); (10,50,600,300); (j1); (j2); (j3); (box); (text); (jb[3]); (js); for(int i=0;i<=3;i++) { jb[i].addActionListener(this); } (false); (true); ("留言内容:");

JDBC实验二 使用JDBC实现数据库连接

广州中医药大学信息技术学院 实验报告 课程名称:网络数据库编程 专业班级:计算机科学与技术(08)级 学生学号:2008081013 学生姓名:张健华 实验名称:使用JDBC实现数据 库连接 实验成绩: 课程类别:必修□限选 公选□其它□

实验二使用JDBC实现数据库连接 实验类型:应用性实验实验日期: 3-23 [实验目的要求] 通过教学,使学生掌握使用JDBC连接到数据库的方法(如通过JDBC-ODBC 桥或Pure Java Driver),能使用网页表单实现网页与数据库的交互。 [实验内容及步骤] 1、在数据库SQL SERVER中创建一个数据库JDBCTEST,并创建表 student_info,并设定字段,输入内容。 2、使用JDBC-ODBC实现数据库连接 a)打开“控制面板”的“管理工具”的“数据源(ODBC)” b)建立数据源 c)选“系统数据源”,连接SQL SERVER数据库 d)测试是否连接成功 e)通过以下类Class、DriverManager、Connection(连接数据库用到的类), 及Statement、ResultSet(访问数据库用到的类)编写代码实现表 student_info数据的查询。 f)查询结果在页面中显示。 3、使用Pure Java Driver实现数据库连接 a)安装sql-jdbc,如装在D盘 b)设置环境变量classpath,添加D:\sqljdbc\msbase.jar; D:\sqljdbc\msutil.jar; D:\sqljdbc\mssqlserver.jar; c)设SQL SERVER数据库用Windows和数据库混合身分验证的方式。 d)通过以下类Class、DriverManager、Connection(连接数据库用到的类), 及Statement、ResultSet(访问数据库用到的类)编写代码实现表 student_info数据的查询。 e)查询结果在页面中显示。 4、通过表单传递数据,实现数据库的插入、删除与更新操作,并显示插入结果。 5、熟悉JSP中各种常用的内建对象如request对象、session对象、application对 象的使用。 6、熟悉各种表单的处理的方法:如选择按钮的使用、多选方块的使用、群组检 查的使用、隐藏栏位的使用、在客户端进行数据检查 7、试利用上述知识实现一个留言板系统。 以下需要同学们贴上第7题经调试好代码: 数据库对应的表1 数据库对应的表2 .。。。 代码1文件(***.HTM)内容: <%@ page contentType="text/html;charset=GB2312"%>

Java连接数据库全过程

Java连接数据库全过程 第一次用java连接数据库,开始竟然不知道从哪里下手,后看了很多书,请教了很多高手,忙了一天才连接上,所以我把这个详细的过程整理出来贡献给大家,不当的地方,希望大家告诉我,一定更正。 要准备的软件: 1.操作系统:windows xp或其他系统; 2.java运行环境:JDK 官方下载网址:https://www.wendangku.net/doc/9c528956.html,/javase/downloads/index.jsp 3.数据库:SQL server 2000; 下面是java连接数据库需要更新的东西,不然连不上的: 1安装SQL SP3补丁:“SQLSERVER2000SP3补丁.exe”,和普通的程序安装一样。 2.把3个jar包:“msbase.jar”,“mssqlserver.jar”,“msutil.jar”加到classpath中,具体的安装方法我已经详细整理:“Java连接数据库配置——加载jar包”。 Java连接数据库的核心程序文件:"TestConnect.java"如下 //TestConnect.java import java.sql.*; public class TestConnect { private Connection con=null;//Connection:与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。 String dbDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//声明数据库驱动名(这个是微软的驱动名) //String dbDriver="sun.jdbc.odbc.JdbcOdbcDriver";//sun驱动程序名 //String dbUrl="jdbc:odbc:lhs"; String dbUrl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=lhs";//数据库驱动程序URL,和相应的驱动配套。 String dbUser="sa";//定义数据库登陆用户名 String dbPasw="123";//定义相应用户的登陆密码 //创建数据库连接 public void connect()

Java连接MySQL 数据库

Java连接MySQL 数据库的正确操作流程 时间:2010-05-25 15:41 来源:博客园字体:[大中小] 以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例),我们主要是以MySQL数据库为例讲下Java正确连接MySQL数据库的实际操作流程,以下就是对其详细内容的描述。 当然,首先要安装有JDK(一般是JDK1.5.X)。然后安装MySQL,这些都比较简单,具体过程就不说了。配置好这两个环境后,下载JDBC驱动MySQL-connector-java-5.0.5.zip(这个是最新版的)。然后将其解压缩到任一目录。我是解压到D盘,然后将其目录下的 MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: “我的电脑”-> “属性” -> “高级” -> “环境变量”,在系统变量那里编辑classpath,将D:\MySQL-connector-java-5.0.5\MySQL-connector-java-5.0.5-bin.jar加到最后,在加这个字符串前要加“;”,以与前一个classpath区分开。然后确定。 环境配置好了,很简单。现在,先配置MySQL,设其用户名为“root”,密码为“root”。在命令行或用一个SQL的前端软件创建Database。 我是用SQLyog的前端软件来创建Database的。 先创接MySQL 数据库: 1.CREATE DATABASE SCUTCS; 接着,创建表: 1.CREATE TABLE STUDENT 2.( 3.SNO CHAR(7) NOT NULL, 4.SNAME VARCHAR(8) NOT NULL, 5.SEX CHAR(2) NOT NULL, 6.BDATE DATE NOT NULL, 7.HEIGHT DEC(5,2) DEFAULT 000.00, 8.PRIMARY KEY(SNO) 9.); 然后插入数据,可以用SQL语句insert into <表名> values (value1, value2, ...); 也可以用SQLyog来操作

JAVA SWING 连接数据库的步骤

Java swing连接数据库的步骤 1.在工程中导入3个jar包,详见(导入Jar包的过程.doc) 2.在类中导入包 a)import java.sql.*; b)import com.microsoft.jdbc.sqlserver.*; 3.声明连接对象,执行语句对象,结果集对象 a)Connection conn=null; b)Statement stmt=null; c)ResultSet rs=null; 4.定义连接字符串 a)final String CLASSFORNAME="com.microsoft.jdbc.sqlserver.SQLServerDriver"; b)final String DBURL="jdbc:microsoft:sqlserver://127.0.0.1:1433;DataBaseName=pubs"; c)final String USER="sa"; d)final String PASS=""; 5.创建连接对象 try{ Class.forName(CLASSFORNAME); conn=DriverManager.getConnection(DBURL,USER,PASS); }catch(SQLException e){ System.out.println(e.getMessage()); }catch(ClassNotFoundException ex){ JOptionPane.showMessageDialog(this,"练苦失败"); return; }

6.创建执行语句对象stmt try{ String sql="insert into users values('name1','pass1')"; //上一行代码可以写成下一行的方式,试分析它的作用是什么? //String sql="insert into users values('"+name+"','"+pass+"')"; stmt=conn.createStatement(); stmt.executeUpdate(sql); }catch(SQLException ex1){ } 7.完毕

实验8-jdbc数据库访问(优.选)

实验8 JDBC访问数据库 一、实验目的 1. 掌握使用传统的方法访问数据库; 2. 掌握使用数据源的方法访问数据库。 二、实验原理 数据库应用是Web应用开发的一个重要应用。Web应用程序访问数据库有两种方法:传统的方法和使用JNDI数据源的方法。 传统方法访问数据库的步骤是:①加载数据库驱动程序;②建立连接对象;③创建语句对象;④获得结果集;⑤关闭有关连接对象。 使用数据源访问数据库的步骤是:①配置数据源(局部数据源或全局数据源);②通过JNDI机制查找命名数据源;③通过数据源对象创建连接对象;④其他与传统方法一致。 三、实验内容与步骤 (一)使用传统方法通过JSP页面访问数据库 【步骤1】创建数据库。假设在PostgreSQL建立了一个名为bookstore的数据库,在其中建立books表,代码如下: CREATE TABLE books ( bookid character(5) PRIMARY KEY, --书号 title varchar2(80), --书名 author character varying(20), --作者 publisher character varying (40), --出版社 price real --价格 ); 向books表中插入几条记录,代码如下: INSERT INTO books V ALUES ('204','Head First Servlets & JSP', 'Bryan Basham', '中国电力出版社',98.00); INSERT INTO books V ALUES ('201', 'Servlets 与JSP 核心教程', 'Hall Marty','清华大学出版社',45); INSERT INTO books V ALUES ('202', 'Tomcat与Java Web 开发技术祥解', '孙卫琴', '机械工业出版社',45); INSERT INTO books V ALUES ('203', 'JSP 应用开发技术', '柳永坡','人民邮电出版社',52); INSERT INTO books V ALUES ('205', 'J2EE 1.4 编程指南', 'Spielman Sue','电子工业出版社',68); 注意:需要将数据库的JDBC驱动程序安装到应用程序的WEB-INF\lib目录中。 【步骤2】使用下面JSP页面displayBooks.jsp访问books表中的数据。 <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="java.sql.*"%> Database Access Test

java连接到各种数据库的方法

此文中的代码主要列出连接数据库的关键代码,其他访问数据库代码省略 1、Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password); 2、DB2数据库 Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名 String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); 3、Sql Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance (); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); 4、Sybase数据库 Class.forName("com.sybase.jdbc.SybDriver").newInstance(); String url =" jdbc:sybase:Tds:localhost:5007/myDB"; //myDB为你的数据库名 Properties sysProps = System.getProperties(); SysProps.put("user","userid"); SysProps.put("password","user_password"); Connection conn= DriverManager.getConnection(url, SysProps); 5、Informix数据库 Class.forName("https://www.wendangku.net/doc/9c528956.html,rmix.jdbc.IfxDriver").newInstance(); String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; user=testuser;password=testpassword"; //myDB为数据库名 Connection conn= DriverManager.getConnection(url);

java语言的数据库访问技术试题

一、选择题 1.Java中,JDBC是指() A. Java程序与数据库连接的一种机制 B.Java程序与浏览器交互的一种机制 C.Java类库名称 D.Java类编译程序 2.在利用JDBC连接数据库时,为建立实际的网络连接,不必传递的参数是() A. URL B.数据库用户名 C.密码 3.J2ME是为嵌入式和移动设备提供的Java平台,它的体系结构由( )组成。 A. Profiles B.Configuration C.OptionalPackages D. 以上都是 4.J2EE包括的服务功能有() A. 命名服务JNDI(LDAP)和事务服务JTA B. 安全服务和部署服务 C.消息服务JMS和邮件服务JavaMail D.以上都是 5.JDBC的模型对开放数据库连接(ODBC)进行了改进,它包含() A. 一套发出SQL语句的类和方法 B. 更新表的类和方法 C.调用存储过程的类和方法 D. 以上全部都是 6.JDBC中要显式地关闭连接的命令是() A.Connection.close() B.RecordSet.close() C.Connection.stop() D.Connection.release() 7.TCP/IP系统中的端口号是一个( )位的数字,它的范围是0到65535。 A. 8 B.16 C.32 D.64 8.在Java编程语言中,TCP/IPsocket连接是用java.net包中的类实现的。其连接步骤和方法是 A. 服务器分配一个端口号。如果客户请求一个连接,服务器使用accept()方法打开 socket连接 B.客户在host的port端口建立连接 C.服务器和客户使用InputStream和OutputStream进行通信 D.以上全部 9.J2ME中的Profile定义应用系统的( )特性。 A. 生命周期模型 B. 用户界面 C. 访问设备 D. 以上全部都是 10.J2EE平台的优势不包括() A. 一次编程,任意运行 B. 应用独立于供应商、服务器、工具,构件的选择自由

Java 数据库连接

Java 数据库连接(数据库为bbs,数据源名为test) 1、直接连接mysql数据库(先把mysql的驱动加载到工程中:选中工程:右键property---javabuildpath---libraries:再选择AddExternalJARS找到驱动存放位置把它加载进来)package dbLink; package dbLink; import java.sql.*; public class DataBaseConnection { public static Connection getConnection(){ Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs","root","123"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } public static void closeConnection(Connection conn){ if(conn!=null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void closeResultSet(ResultSet rs){ if(rs!=null) try{ rs.close(); }catch(SQLException e){ e.printStackTrace(); } } public static void closePreparedStatment(PreparedStatement ps){ if(ps!=null) try{

java数据库连接JDBC和MVC

1 JDBCutil.java package www.chinasofiti.eex.jdbcutil; import java.sql.Connection; import java.sql.DriverManager; public class JDBCutil { public static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String URL="jdbc:oracle:thin:@192.168.80.49:1521:XE"; public static final String USER="SCOTT"; public static final String PASSWORD="TIGER"; public static Connection conn; public JDBCutil(){ } public static Connection getConnection() throws Exception{ Class.forName(DRIVER);//加载驱动 conn=DriverManager.getConnection(URL,USER,PASSWORD);//链接数据库 System.out.println(conn); System.out.println("数据库链接成功"); return conn; } // public static void main(String[]args){ // try { // getConnection(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace();

相关文档
相关文档 最新文档