JDBC基础教程之连接1.Connection对象代表与数据库的连接。连接过程包括所执行的SQL语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。打开连接与数据库建立连接的标准方法是调用DriverManager.getConnection方法。该方法接受含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。2.DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。Driver的方法connect使用这个URL来建立实际的连接。用户可绕过JDBC管理层直接调用Driver方法。这在以下特殊情况下将很有用:当两个驱动器可同时连接到数据库中,而用户需要明确地选用其中特定的驱动器。但一般情况下,让DriverManager类处理打开连接这种事将更为简单。JDBCAPI接口分为两个层次,一个是面向程序开发人员的JDBCAPI。另外一个是底层的JDBCDriverAPI。java.sql.DriverManager处理驱动的调入并且对产生新的数据库连接提供支持。*java.sql.Connection代表对特定数据库的连接。*java.sql.Statement代表一个特定的容器,来对一个特定的数据库执行SQL语句。*java.sql.ResultSet控制对一个特定语句的行数据的存取。其中java.sql.Statement又有两个子类型:1.java.sql.PreparedStatement用于执行预编译的SQL语句。2.java.sql.CallableStatement用于执行对一个数据库内嵌过程的调用。JDBC连接各种数据库方法1、Oracle8/8i/9i数据库(thin模式)Class.forName(oracle.jdbc.driver.OracleDriver).newInstance();Stringurl=jdbc:oracle:thin:@localhost:1521:orcl;//orcl为数据库的SIDStringuser=test;Stringpassword=test;Connectionconn=DriverManager.getConnection(url,user,password);2、DB2数据库Class.forName(com.ibm.db2.jdbc.app.DB2Driver).newInstance();Stringurl=jdbc:db2://localhost:5000/sample;//sample为你的数据库名Stringuser=admin;Stringpassword=;Connectionconn=DriverManager.getConnection(url,user,password);3、SQLServer7.0/2000数据库Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver).newInstance();Stringurl=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb;//mydb为数据库Stringuser=sa;Stringpassword=;Connectionconn=DriverManager.getConnection(url,user,password);4、Sybase数据库Class.forName(com.sybase.jdbc.SybDriver).newInstance();Stringurl=jdbc:sybase:Tds:localhost:5007/myDB;//myDB为你的数据库名PropertiessysProps=System.getProperties();SysProps.put(user,userid);SysProps.put(password,user_password);Connectionconn=DriverManager.getConnection(url,SysProps);利用JDBC发送SQL语句•Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,它们都作为在给定连接上执行SQL语句的包容器:Statement、PreparedStatement(它从Statement继承而来)和CallableStatement(它从PreparedStatement继承而来)。它们都专用于发送特定类型的SQL语句:1.创建Statement对象建立了到特定数据库的连接之后,就可用该连接发送SQL语句。Statement对象用Connection的方法createStatement创建,如下列代码段中所示:Connectioncon=DriverManager.getConnection(url,sunny,);Statementstmt=con.createStatement();为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement的方法:ResultSetrs=stmt.executeQuery(SELECTa,b,cFROMTable2);2.使用Statement对象执行语句Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。方法executeQuery用于产生单个结果集的语句,例如SELECT语句。方法executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate的返回值总为零。执行语句的所有方法都将关闭所调用的Statement对象的当前打开结果集(如果存在)。这意味着在重新执行Statement对象之前,需要完成对当前ResultSet对象的处理。应注意,继承了Statement接口中所有方法的PreparedStatement接口都有自己的executeQuery、executeUpdate和execute方法。Statement对象本身不包含SQL语句,因而必须给Statement.execute方法提供SQL语句作为参数。PreparedStatement对象并不需要SQL语句作为参数提供给这些方法,因为它们已经包含预编译SQL语句。CallableStatement对象继承这些方法的PreparedStatement形式。对于这些方法的PreparedStatement或CallableStatement版本,使用查询参数将抛出SQLException。操作实例在SQLServer创建数据库以及相关表脚本语言如下(schema.sql):ifexists(select*fromsysdatabaseswherename='STOREDB')dropdatabaseSTOREDB;gocreatedatabaseSTOREDB;gouseSTOREDB;gocreatetableCUSTOMERS(IDbigintnotnullIDENTITY(1,1)primarykey,NAMEvarchar(16)notnull,AGEINT,ADDRESSvarchar(255));createtableORDERS(IDbigintnotnullIDENTITY(1,1)primarykey,ORDER_NUMBERvarchar(16)notnull,PRICEFLOAT,CUSTOMER_IDbigint,foreignkey(CUSTOMER_ID)referencesCUSTOMERS(ID));insertintoCUSTOMERS(NAME,AGE,ADDRESS)values('小张',23,'北京');insertintoCUSTOMERS(NAME,AGE,ADDRESS)values('小红',29,'天津');insertintoCUSTOMERS(NAME,AGE,ADDRESS)values('小丁',33,'山东');insertintoORDERS(ORDER_NUMBER,PRICE,CUSTOMER_ID)values('小张_001',100.12,1);insertintoORDERS(ORDER_NUMBER,PRICE,CUSTOMER_ID)values('小张_002',200.32,1);insertintoORDERS(ORDER_NUMBER,PRICE,CUSTOMER_ID)values('小红_001',88.44,2);////////////////////////////////////////////////////////数据库操作相关代码:DBTester.javaimportjava.sql.*;publicclassDBTester{publicstaticvoidmain(Stringargs[])throwsException{Connectioncon;Statementstmt;ResultSetrs;//加载驱动器,下面的代码为加载MySQL驱动器Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);//注册MySQL驱动器//DriverManager.registerDriver(newcom.microsoft.jdbc.sqlserver.SQLServerDriver());//连接到数据库的URLStringdbUrl=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=STOREDB;StringdbUser=sa;StringdbPwd=sa;//建立数据库连接con=DriverManager.getConnection(dbUrl,dbUser,dbPwd);//创建一个Statement对象stmt=con.createStatement();//增加新记录Stringname1=liming;Stringaddress1=shanghai;stmt.executeUpdate(insertintoCUSTOMERS(NAME,AGE,ADDRESS)VALUES('+name1+',20,'+address1+'));//查询记录rs=stmt.executeQuery(SELECTID,NAME,AGE,ADDRESSfromCUSTOMERS);//输出查询结果while(rs.next()){longid=rs.getLong(1);Stringname=rs.getString(2);intage=rs.getInt(3);Stringaddress=rs.getString(4);//打印所显示的数据System.out.println(id=+id+,name=+name+,age=+age+,address=+address);}//删除新增加的记录stmt.executeUpdate(deletefromCUSTOMERSwherename='+name1+');//释放相关资源rs.close(