??xml version="1.0" encoding="utf-8" standalone="yes"?>
1、安装Microsoft SQL Server 2000Q据说要企业版才行?br />
2、下载Microsoft SQL Server 2000 Service Pack 4Qƈ安装更新。安装完毕版本显C如下:
下蝲Qhttp://www.microsoft.com/downloads/details.aspx?FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5&DisplayLang=zh-cn
3、下载Microsoft SQL Server 2005 JDBC 驱动E序Qƈ解压Q得C个sqljdbc.jar文g?br />
本地下蝲 (下蝲后把.rar改ؓ.jar)
4、新Z个JAVA目Qƈ把sqljdbc.jar加到目库中Q?br />
选中目-->右键-->属?->cd-->?->q行-->dJAR/文g?br />
或者直接把sqljdbc.jar复制到类似如下的目录中:D:\Program Files\Java\jdk1.6.0_06\jre\lib\ext
5、编写程序,如下Q查询Northwind中Employees表中的员工姓名:
import java.sql.*;
public class Main
{
public static void main(String args[])
{
Connection con;
Statement sql; //声明Statement对象
ResultSet rs;
try
{
// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(ClassNotFoundException e)
{
System.out.println(""+e);
return;
}
try
{
String url="jdbc:sqlserver://localhost;database=Northwind;user=sa;password=sa";
con = DriverManager.getConnection(url);
sql=con.createStatement();
rs=sql.executeQuery("Select FirstName, LastName FROM Employees");
int i=1;
while(rs.next())
{
System.out.println(i++ +": "+ rs.getString("FirstName") + " " + rs.getString("LastName")); //输出信息
}
con.close();
}
catch(SQLException el)
{
System.out.println(""+el);
}
}
}
E序q行l果如下Q?br />
1: Nancy Davolio
2: Andrew Fuller
3: Janet Leverling
4: Margaret Peacock
5: Steven Buchanan
6: Michael Suyama
7: Robert King
8: Laura Callahan
9: Anne Dodsworth
]]>
看来Q现在大多数人們于更加突出Java了,J2EEҎ让初学者误解是独立于一套Java的技术方案?/span>
从更深层ơ来看,Java诞生十年来,很多q十q前的业务组件至今还可以使用QY件应用不再由于语a的更q革命带来毁灭的打击了?/span>
但是Q随着WEB和EJB容器概念诞生Q得Y件应用业开始担心SUN的伙伴们是否q在Javaq_上不断推出翻新的标准框架Q致使Y件应用业的业务核心组件架构无所适从Q从一直以来是否需要EJB的讨论声中说明了q种彷L?/span>
W者曾l在2004q底中国软g技术大会Ioc微容?也就是Jdon框架的实现原?演讲中指出:我们需要一个跨J2SE/WEB/EJB的微容器Q保护我们的业务核心lgQ中间gQ,以gl它的生命力Q而不是依赖J2SE/J2EE版本Q如下图Q?br />
此次J2EE改名为Java EEQ实际也反映Z界这U共同心声?/span>
让我们看看Java EE 5有哪些新的功能或规定Q我们可以从SUN|站下蝲Java EE 5规范。其架构囑֦下:
图中灰色加黑部分是Java EE 5新的功能Q我们看刎ͼ在WEB层主要加入了JSFq个新的表现层框Ӟ和我们日常开发关pd切的是,引入了新的Java Persistence标准Q这个标准正在由EJB 3.0专家l制定?/span>
值得指出的是Q这个Java持久化标准也可以嵌入在WEB层调用,所以,它肯定不会从属于EJB标准Q这P当前所有的Java持久层标准如QJDBC/JDO/Hibernate/Entity Bean可能统一Q减用L架构选择 痛苦?/span>
从架构图可以看出Q无论Webl构或EJBl构Q提供实现的功能相差不多Q这P我们的业务核心组件就可以Ҏ需要部|在Web或EJB中运行,而不依赖具体的Java EE容器了。前面一章图的目标在Java EE 5中可以实C?/span>
当然QJava EE 5重要改变q是QJava EE不再象以前那样只注重大型商业pȝ的开发,而是更关注小C型系l的开发,化这部分pȝ开发步骤?/span>
落实q一化行动的最大特征是在Java 5.0(Java 1.5)中加入AnnotationsQ通过Annotations引入Q降低Java EE开发时Q既要写codeQ又要写XML配置文g之苦Q来回照,疲于奔命QAnnotations既是得益于C++语言Q也是从开源项目xDoclet实践中获得经验?/span>
但是Annotations是一把双刃剑Q初学者用得不好,会使得原本在XML中的Hard codeQ硬~码Q?写进入代码AnnotationsQ破坏代码的z和灉|性,Annotations讨论按这里?/span>
当然QAnnotations的引入不只是解决XML配置Q从大的概念_是解决一个资源注问?XML属于其中一个资?Q在原理J2EE中,容器理的资源都是由JNDI向应用程序提供的Q现在通过Annotations可以方便实现注射?/span>
资源注射QResource injectionQ设计概念其实是来自Ioc模式(Dependency Injection )Q笔者设计开发的Jdon框架其实已经Annotationsq一宗旨的目的实玎ͼ在Jdon框架应用演示源码SimpleJdonFrameworkTest中,在jdonframework.xml中有一D如下配|:
<pojoService class="com.jdon.framework.test.dao.JdbcDAO" name="jdbcDAO">
<constructor value="java:/TestDS"/>
</pojoService>
q段配置是将数据库的JNDI名java:/TestDS注射到JdbcDAO中。Jdon Framework下一个版本将是基于Java 5.0Q这行配|?可通过 Annotations写在jdbcDAO代码中,方便E序员开发?/span>
从这里,大家也可以知道EJB 3.0和EJB 2.0的区别了Q有的h疑惑Q是学习EJB 3.0q是学习EJB 2.0Q其实EJB 3.0q没有在原理机制上对EJB有多大改动,只是做了~程斚w的简化,另外EJB CMP参考了Hibernate新特点,EJB 3.0最大简化变动是CMP~程Ҏ上。所以,无论学习EJb 3.0/2.0QEJB原理和运行机刉是一Pq部分才是学习EJB最大的困难处,而不是因为到了EJB 3.0Q理解EJB׃Ҏ?/span>
初学者可从Eclipse+Xdoclet开发EJB 2.0开始学习, EJB 3.0 = EJB 2.0 + xDocletQ这里有一Eclipse开发EJB教程Q用JBossIDE非常单,无需Lomboz{插件?/span>
Security安全是Java EE的一个重要特点,也就是基于容器的安全讉KQ无需自己手工~码Q具体实现可参考Jdon框架应用演示源码JdonNews。这虽然是基于J2EE 1.3~写Q但是和Java EE 5区别不是很大?/span>
事务理Transaction Management也是Java EE 5的一个重要部分,该标准文档从几个斚w阐述了事务管理的要点Q标准中规定了在WEB层中使用事务和线E的处理关系Q标准中规定QWeb服务器如Tomcat无需在Web层提供事务支持,因ؓWeblgҎ不支持事务繁?传递?/span>
因ؓ目前一些架构如Struts+Spring+Hibernate/Struts+Hibernate是标准中的Webl构Q因此Java EE 5在J2EE 4.2.2规定?Weblg事务的生命周期,如果Weblg直接调用JTAQ事务就不可以跨一个客L的多个请求,事务只能在一个请?Servlet/Jsp)中完成,q个标准规定了我们在Web架构中(如上q架构)无法使用长事?如工作流/状态图中跨面h事务)Q针对一个客L跨请求的事务目前只有唯一解决ҎQ只有用EJB的有态Session。以上是Java EE 5主要部分QJava EE包含更多其他技术部分如Jdbc JMS JCA JNDI {等Q需要用户在实践中摸索?/span>
英文Q?br /> "C:\Program Files\NetBeans 6.1\bin\netbeans.exe" --locale en:US
日文Q?br /> "C:\Program Files\NetBeans 6.1\bin\netbeans.exe" --locale ja:JA
本篇通过一个简单的数据库应用的例子告诉你如何编写你的第一?/span>JDBCE序?/span>
怿在微软^C开发过应用E序的朋友一定对ODBC不会陌生Q?/span>ODBC是一U用C语言开发的APIQ通过它,你可以访问不同数据库q_上的数据,目前ODBC已经成ؓWindows环境下访问数据库的事实上的标准,也是一U基本方法。但是,׃ODBC的设计过于复杂,造成它很隑֯外扩展?/span>JDBC?/span>SUN开发的一U用来进行数据库讉K?/span>APIQ它借鉴?/span>ODBC的的某些特点而没有它的复杂性,l数据库开发带来了极大的便利性。同ӞJDBCq提供了对现存数据库APIQ比?/span>ODBCQ的调用Q?/span>Java应用E序可以讉KM支持ODBC的数据库理pȝ?/span>
下面q个单的E序演示了如何在java中连接、打开和查询一个数据库。本例中?/span>mysql为数据库q_?/span>
E序的第一句导入我们需要用到的JDBC APIQؓ了方便,我以*来导入在sql中定义的所有包Q你也可以只指定你用到的包,比如Q?/span>java.sql.Connection{?/span>
在主函数中定义的两个字符串分别是驱动E序名和数据库服务器地址及数据库名。我在这里用的?/span>mysql数据库,所以我用的?/span>mysql驱动E序,不同的数据库用不同的驱动E序Q如果你用的不是mysqlQ请替换此行?/span>
服务器地址是你安装数据库的L?/span>IPQ如果在本机Q你也可以用"localhost"来连接。数据库名是你已l在数据库系l中建立q的Q这里是test.接着在标识ؓ(1)?/span>try块中装蝲驱动E序。这一步是为驱动程序来装蝲自己Q然后让驱动E序理器来q行理Q在(2)?/span>try块中Q从驱动E序理器中取得一个连接,W一个引数已l说q,W二个引数是数据库中的用户名Q最后一个是口o。接着创徏一?/span>Statement对象来执行查询,查询l果返回一个记录集Q在q里是rs。在接下来的while循环中来处理查询l果Q在q只是简单的打印出来?/span>
?/span>finally块中Q将执行q接的关闭,如果在前面没有正得C个连接,直接返回?/span>
好了Q修改这个程序以适应你的q_Q然后执行。怎么栯接数据库p么简单?/span>
1 在上面这个程序中Q请注意不要写错驱动E序名,如果出现找不到驱动程序的错误Q请查你的驱动程序是否在cL索\径即CLASSPATH中,
一般你下蝲的驱动程序可能是?/span>.jar为扩展名Q那么你要把此文件包含在CLASSPATH中,比如我用?/span>mysql.jarQ那么在claspath中有Q?/span>c:"driver"mysql.jar?/span>
2 数据库服务器IP要填准确Q如果在本机Q请直接使用localhostQ用户名和口令是你用来操作数据库的用户和口oQ不要认为是操作pȝ的用户名和口令?/span>
3 最后要注意Q用完一个连接后要及时关闭,L好的习惯?/span>
Microsoft SQL Server (6.5, 7, 2000 and 2005) and Sybase (10, 11, 12).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: jTDS
Home Page: http://jtds.sourceforge.net/
JDBC Ver: 1.0.2
Download: http://sourceforge.net/project/showfiles.php?group_id=33291
Conn Code:
Class.forName("net.sourceforge.jtds.jdbc.Driver ");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password");
or
Connection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password");
Microsoft SQL Server 2000
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: SQL Server 2000 Driver for JDBC
Home Page: http://www.microsoft.com/china/sql/
JDBC Ver: (SQL Server 2000 Driver for JDBC)
Download: http://www.microsoft.com/china/sql/downloads/2000/jdbc.asp
Conn Code:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn = DriverManager.getConnection ("jdbc:microsoft:sqlserver://server1:1433","user","password");
Oracle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: Connector/J
Home Page: http://www.oracle.com/technology/software/tech/java/
JDBC Ver: (based on Oracle)
Download: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/
Conn Code:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:port:databse","user","password");
MySQL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: Connector/J
Home Page: http://dev.mysql.com/
JDBC Ver: 3.1
Download: http://dev.mysql.com/downloads/
Conn Code:
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");
Sybase
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: jConnect
Home Page: http://www.sybase.com.cn/cn/content/SDN/
JDBC Ver: 4.5/5.5
Download: http://www.sybase.com/detail_list?id=13&morenavId=8668&multi=true&SR=Y&show=1265
Conn Code:
Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance();
DriverManager.getConnection("jdbc:sybase:Tds:IP:2638?ServiceName="+database,"user","password");
Postgresql
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: PostgreSQL JDBC
Home Page: http://jdbc.postgresql.org/
JDBC Ver: 8.0 Build 310
Download: http://jdbc.postgresql.org/download.html
Conn Code:
Class.forName("org.postgresql.Driver");
Connection con = DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password");
IBM Informix
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: Informix JDBC Driver (IBM Informix JDBC V3.0)
Home Page: http://www-306.ibm.com/software/data/informix/
JDBC Ver: 3.0.JC1
Download: http://www14.software.ibm.com/webapp/download/search.jsp?go=y&rs=ifxjdbc
Conn Code:
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
Connection conn= DriverManager.getConnection("jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;user=testuser;password=testpassword";);
IBM DB2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JDBC Name: DB2 JDBC Universal Driver
Home Page: http://www-306.ibm.com/software/data/db2/udb/
JDBC Ver:
Download: http://www-128.ibm.com/developerworks/db2/downloads/jcc/
Conn Code:
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
Connection conn= DriverManager.getConnection("jdbc:db2://localhost:5000/sample",user,password);
IBM AS400L在用的JDBC语法
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有装V4R4以上版本的Client Access Express
可以在C:"Program Files"IBM"Client Access"jt400"lib
扑ֈ driver 档案 jt400.zipQƈ更改扩展名成?jt400.jar
Conn Code:
java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());
Class.forName("com.ibm.as400.access.AS400JDBCConnection");
con = DriverManager.getConnection("jdbc:as400://IP","user","password");
Db Name: Ms Access or Ms Foxpro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Conn Code:
step 1: 配置 odbc (例如QmyDb)
step 2:
String dbURL = "jdbc:odbc:myDb";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(dbURL);
or
String dbURL = "jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=dabaseName.mdb";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(dbURL);
JDBC(Java DataBase Connectivity)?/span>Java数据库连?/span>API?/span>JDBC能完成与一个数据库建立q接Q然后向数据库发?/span>SQL语句Q再处理数据库返回的l果?/span>
JDBC在设计上?/span>ODBC怼?/span>JDBC和数据库建立q接的一U方式是首先建立起一?/span>JDBC-ODBC桥接?/span>?/span>
首先安装office2000,有?/span>Access2000,启动Access,建立新数据库mess.mdb,建立包含两个文本型字D?/span>name?/span>sex的表,表名?/span>memberQ随便录入一些字W串?/span>member表中Q保存在L目录下,比如?/span>C盘下。然后打开控制面板 -> 理工具 -> 数据?/span> (ODBC),选择"pȝDSN",也可以选择"用户DSN"选项?/span>,pȝ?/span>DSNҎ个用户都适用可避免调试时出现的权限问题,单击“d”Q选择如下囄目:
点击"完成",弹出的对话框里将"数据源名"一设Z喜欢的名?/span>,比如redsun。点"选择"Q找?/span>"C:"mess.mdb"文gQ如此一?/span>ODBC数据源就配置好了?/span>
要连接该数据?/span>,也就是连接数据库Q首先要建立一?/span>JDBC-ODBC桥接器,上面已经说过了,其方法是:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Class ?/span>Java.lang包中的一个类Q通过调用它的静态方?/span>forName可以徏立桥接器。但建立桥接器时可能发生异常Q这是我们所不想见到的,因此要捕莯个异?/span>:
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){异常捕获}
然后是q接数据库了,q里要用?/span>java.sql包中?/span>Connectioncd明一个对象,再用c?/span>DriverManager调用它的静态方?/span>getConnection创徏q个q接?/span>
Connection con=DriverManager.getConnection("jdbc:odbc:数据源名?/span>","数据源用户名","数据源密?/span>");
为防止连接出现异常,q里也要有个异常的处理,具体看代?/span>:
=========access.java============
E序代码
import java.sql.*;
public class access{
public static void main(String args[]){
Connection con;
Statement sql; //声明Statement对象
ResultSet rs;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){
System.out.println(""+e);
}
try{
con=DriverManager.getConnection("jdbc:odbc:redsun","","");
sql=con.createStatement();
rs=sql.executeQuery("Select * FROM member");
while(rs.next()){
String name=rs.getString(1); //获得数据库第一?/span>
String sex=rs.getString(2);
System.out.println("姓名:"+name); //输出信息
System.out.println("性别:"+sex);
}
con.close();
}
catch(SQLException el){}
}
}
~绎access.java, 然后在命令提C符中先切换到编l后?/span>access.class的目?/span>,执行:
java access回R
l果如图昄:
以上q个例子只是单的q接数据库,q态游标方式显C数据,更新、删除和d数据库以前学q?/span>sql的很Ҏ理解Q语法ؓ:
String xx="sql语句";
Statement对象.executeUpdate(xx);
在开?strong>Java软g斚wQ?span lang="EN-US">Oracle的数据库提供了四U类型的驱动E序Q二U用于应用Y件、applets、servlets{客L软gQ另外二U用于数据库中的Java存储q程{服务器端Y件。在客户机端软g的开发中Q我们可以选择OCI驱动E序或Thin驱动E序。OCI驱动E序利用Java本地化接口(JNIQ,通过Oracle客户端Y件与数据库进行通讯。Thin驱动E序是纯Java驱动E序Q它直接与数据库q行通讯。ؓ了获得最高的性能QOracle在客L软g的开发中使用OCI驱动E序Q这g是正的。但我徏议用Thin驱动E序Q因为通过多次试发现Q在通常情况下,Thin驱动E序的性能都超q了OCI驱动E序?/span>
2、关闭自动提交功能,提高pȝ性能
在第一ơ徏立与数据库的q接Ӟ在缺省情况下Q连接是在自动提交模式下的。ؓ了获得更好的性能Q可以通过调用带布?span lang="EN-US">false参数的ConnectioncȝsetAutoCommit()Ҏ关闭自动提交功能Q如下所C:
conn.setAutoCommit(false);
值得注意的是Q一旦关闭了自动提交功能Q我们就需要通过调用Connectioncȝcommit()和rollback()Ҏ来h工的方式对事务进行管理?/span>
3、在动态SQL或有旉限制的命令中使用Statement对象
在执?span lang="EN-US">SQL命oӞ我们有二U选择Q可以用PreparedStatement对象Q也可以使用Statement对象。无论多次C用同一个SQL命oQPreparedStatement都只对它解析和编译一ơ。当使用Statement对象Ӟ每次执行一个SQL命oӞ都会对它q行解析和编译。这可能会你认为,使用PreparedStatement对象比用Statement对象的速度更快。然而,我进?br /> 的测试表明,在客L软g中,情况q如此。因此,在有旉限制的SQL操作中,除非成批地处理SQL命oQ我们应当考虑使用Statement对象?/span>
此外Q?span lang="EN-US">Statement对象也得编写动态SQL命o更加单,因ؓ我们可以字W串q接在一P建立一个有效的SQL命o。因此,我认为,Statement对象可以使动态SQL命o的创建和执行变得更加单?/span>
4、利用helper函数对动态SQL命oq行格式?/span>
在创Z?span lang="EN-US">Statement对象执行的动态SQL命oӞ我们需要处理一些格式化斚w的问题。例如,如果我们惛_Z个将名字O'Reilly插入表中的SQL命oQ则必须使用二个相连?#8220;''”h换O'Reilly中的“'”受完成这些工作的最好的Ҏ是创Z个完成替换操作的helperҎQ然后在q接字符串心服用公式表达一个SQL命oӞ使用创徏的helperҎ。与此类似的是,我们可以让helperҎ接受一个Date型的|然后让它输出ZOracle的to_date()函数的字W串表达式?/span>
5、利用PreparedStatement对象提高数据库的M效率
在?span lang="EN-US">PreparedStatement对象执行SQL命oӞ命o被数据库q行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象Ӟ它就会被再解析一ơ,但不会被再次~译。在~冲Z可以发现预编译的命oQƈ且可以重C用。在有大量用L企业U应用Y件中Q经怼重复执行相同的SQL命oQ用PreparedStatement对象带来的编译次数的减少能够提高数据库的M性能。如果不是在客户端创建、预备、执行PreparedStatementd需要的旉长于StatementdQ我会徏议在除动态SQL命o之外的所有情况下
使用PreparedStatement对象?/span>
6、在成批处理重复的插入或更新操作中用PreparedStatement对象
如果成批地处理插入和更新操作Q就能够显著地减它们所需要的旉?span lang="EN-US">Oracle提供的Statement?CallableStatementq不真正地支持批处理Q只有PreparedStatement对象才真正地支持批处理。我们可以用addBatch()和executeBatch()Ҏ选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()Ҏ和标准的executeUpdate()Ҏ选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制Q可以以如下所C的
方式调用setExecuteBatch()Q?nbsp;
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}
调用setExecuteBatch()时指定的值是一个上限,当达到该值时Q就会自动地引发SQL命o执行Q标准的executeUpdate()Ҏ׃被作为批处理送到数据库中。我们可以通过调用PreparedStatementcȝsendBatch()Ҏ随时传输批处理Q务?/span>
7、用Oracle locatorҎ插入、更新大对象QLOBQ?/span>
Oracle的PreparedStatementcM完全支持BLOB和CLOB{大对象的处理,其是Thin驱动E序不支持利用PreparedStatement对象的setObject()和setBinaryStream()Ҏ讄BLOB的|也不支持利用setCharacterStream()Ҏ讄CLOB的倹{只有locator本n中的Ҏ才能够从数据库中获取LOBcd的倹{可以用PreparedStatement对象插入或更新LOBQ但需要用locator才能获取LOB的倹{由于存在这二个问题Q因此,我徏议用locator的方法来插入、更新或获取LOB的倹{?/span>
8、用SQL92语法调用存储q程
在调用存储过E时Q我们可以?span lang="EN-US">SQL92或Oracle PL/SQLQ由于用Oracle PL/SQLq没有什么实际的好处Q而且会给以后l护你的应用E序的开发h员带来麻烦,因此Q我在调用存储过E时使用SQL92?/span>
9、用Object SQL对象模式{Ud数据库中
既然可以?span lang="EN-US">Oracle的数据库作ؓ一U面向对象的数据库来使用Q就可以考虑应用程序中的面向对象模式{到数据库中。目前的Ҏ是创?strong>Java bean作ؓ伪装的数据库对象Q将它们的属性映到关系表中Q然后在q些bean中添加方法。尽这样作?strong>Java中没有什么问题,但由于操作都是在数据库之外进行的Q因此其他访问数据库的应用Y件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创徏一个新的数据库对象cd在数据库中模仿其数据和操作,然后使用JPublisher{工L成自qJava beancR如果用这U方式,不但Java应用E序可以使用应用软g的对象模式,其他需要共享你的应用中的数据和操作的应用Y件也可以使用应用软g中的对象模式?/span>
10、利用SQL完成数据库内的操?/span>
我要向大家介l的最重要的经验是充分利用SQL的面向集合的Ҏ来解x据库处理需求,而不是?strong>Java{过E化的编E语a?/span>
如果~程人员要在一个表中查找许多行Q结果中的每个行都会查找其他表中的数据,最后,~程人员创徏了独立的UPDATE命o来成批地更新W一个表中的数据。与此类似的d可以通过在set子句中用多列子查询而在一个UPDATE命o中完成。当能够在单一的SQL命o中完成Q务,何必要让数据在网上流来流ȝQ我用户认真学习如何最大限度地发挥SQL的功能?/span>
1、查N动程?/span>
MySQL目前提供?strong>java驱动E序为Connection/JQ可以从MySQL官方|站下蝲Qƈ扑ֈmysql-connector-java-3.0.15-ga-bin.jar文gQ此驱动E序为纯java驱动E序Q不需做其他配|?/span>
2、动态指定classpath
如果需要执行时动态指?span lang="EN-US">classpathQ就在执行时采用Qcp方式。否则将上面?jar文g加入到classpath环境变量中?/span>
3、加载驱动程?/span>
try{
Class.forName(com.mysql.jdbc.Driver);
System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
System.out.println(Error loading Mysql Driver!);
e.printStackTrace();
}
4、设|连接的url
jdbcQ?/span>mysqlQ?/span>//localhost/databasename[?pa=va][Q?/span>pa=va]