⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jdbc访问技术.txt

📁 weblogic 环境_参数配置,可以让新手少走弯路
💻 TXT
字号:
一、JDBC数据库访问

	二、JAVA数据库应用
	1、加载JDBC-ODBC桥
	      调用Class类forName()方法注册ODBC-JDBC驱动程序
	      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	2、建立连接
	      DriverManager类的getConnection()方法试图定位能连接到数据库的驱动程序
	      String url="jdbc:odbc:MyDatasource";
	      MyDatasource指的是事先定义好的ODBC接口
	      Connection con=DriverManager.getConnection(url,"sa","");
	
	3、访问数据库
	   JDBC提供三种类发送SQL语句给数据库
	   A、Statement对象:从Connection对象调用createStatement()方法,创建Statement对象。
	   B、PreparedStatement对象
	     从Connection对象调用preparedStatement()方法,创建PreparedStatement对象,实现发送可动态调整内容的SQL语句给SQL SERVER
	(语句中包含input参数)
	   C、CallableStatement对象
	     从Connection对象调用prepareCall()方法,创建CallableStatement对象。它可包含调用存储过程的功能。
	     
	      statement提供三种方法执行SQL语句:
	      1)executeQuery()  执行简单查询并返回单个ResultSet对象
	      2)executeUpdate() 执行Insert、Update、Delete语句
	      3)execute()       执行SQL语句,可返回多个结果
	
	     例:
	
	     //QueryApp.java
	     import java.sql.*;
	     public class QueryApp{
	        public static void main(String args[]){
	           ResultSet result;
	           try{
	               Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	               Connection c=DriverManager.getConnection("jdbc:odbc:CWJ","sa","");
	               Statement stat=c.createStatement();
	               result=stat.executeQuery("select * from Publishers");
	               while(result.next()){
	                 System.out.println(result.getString(2));
	               }
	           }catch(Exception e){
	            System.out.println("Error"+e);
	           }
	        }
	     } 

二、用TYPE4的JDBC Driver访问数据库

	Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
	Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://tsinghuacwj;DatabaseName=pubs;User=sa;Password=sa");
    JBuilder配置三步骤:
    	1、Configure Libraries
    	2、Enterprise Setup->Database Drivers,完成后重启JBuilder
    	3、Database Pilot

三、可滚动、可更新的结果集
	是JDBC2.0新特性之一,它支持将结果集中的游标按任意方向移动的能力。
	
	语法:connection.createStatement(int rsType,int rsConcurrency);
	注:rsType有三种选择:TYPE_FORWARD_ONLY			不可滚动的结果集
						  TYPE_SCROLL_INSENSITIVE	可滚动的结果集,当打开时不反映它的变化
						  TYPE_SCROLL_SENSITIVE		可滚动的结果集,当打开时反映它的变化
		rsConcurrency有两种选择:CONCUR_READ_ONLY	只读的
								 CONCUR_UPDATABLE   可更新的
								 
	例:Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
	
	first()、last()、beforefirst()、afterlast()、absolute(int rowNumber)、relative(int rowNumber)
	
例1:写一个程序实现定位到第一条记录,最后一条记录,将表中记录按正向顺序显示,然后按反向顺序显示。
例1:用RowSet实现上述功能 P117

	可更新的ResultSet:(P112)
	1、更新ResultSet: rs.updateString("Street","123 Main");
					  rs.updateRow();
	2、插入新行:rs.moveToInsertRow();
				 rs.updateString("First_Name","cwj");
				 rs.insertRow();
	3、删除行:rs.deleteRow();
					
	

四、各位Statement的使用
   A、Statement对象:从Connection对象调用createStatement()方法,创建Statement对象。
      statement提供三种方法执行SQL语句:
      1)executeQuery()  执行简单查询并返回单个ResultSet对象
      2)executeUpdate() 执行Insert、Update、Delete语句
      3)execute()       执行SQL语句,可返回多个结果   
例:创建表
	String dTableSQL = "CREATE TABLE digest " +	"(id INTEGER NOT NULL," + " title VARCHAR(64) NOT NULL," +
	" author VARCHAR(64) NOT NULL)" ;
	
	String mTableSQL = "CREATE TABLE messages " +	"(id INTEGER NOT NULL," +	" title VARCHAR(64) NOT NULL," +
	" author VARCHAR(64) NOT NULL," +
	" message CLOB(2048))" ;
	
	String aTableSQL = "CREATE TABLE authors " +	"(author VARCHAR(64) NOT NULL," +	" photo BLOB(4096))";
	
	Statement stmt = con.createStatement() ;
	stmt.executeUpdate(dTableSQL) ;
	stmt.executeUpdate(mTableSQL) ;
	stmt.executeUpdate(aTableSQL) ;
例:删除表
	String dDropSQL = "DROP TABLE digest" ;
	String mDropSQL = "DROP TABLE messages" ;
	String aDropSQL = "DROP TABLE authors" ;
	...

	Statement stmt = con.createStatement() ;
	stmt.executeUpdate(dDropSQL) ;
	stmt.executeUpdate(mDropSQL) ;
	stmt.executeUpdate(aDropSQL) ;

例:往表中插入数据
	String baseInsertSQL = "Insert INTO digest VALUES(" ;
	int[] ids = {1, 2, 3, 4, 5} ;
	String[] authors = {"java", "rjb", "java", "bill", "scott"} ;
	String[] titles = { "Hello","Hello Java","Hello Robert","Hello from Bill","Hello from Scott"} ;

	Statement stmt = con.createStatement() ;
	for(int i = 0 ; i < ids.length ; i++) {
		stmt.executeUpdate( baseInsertSQL+ids[i]+ ", '"	+ titles[i]	+ "', '" + authors[i] + "')") ;
	}
   
   B、PreparedStatement对象
     从Connection对象调用preparedStatement()方法,创建PreparedStatement对象,实现发送可动态调整内容的SQL语句给SQL SERVER
(语句中包含input参数)
例:往表中插入数据(注:以与上方法相比,效率更佳)
		String insertSQL = "Insert INTO digest VALUES(?, ?, ?)" ;
		int[] ids = {1, 2, 3, 4, 5} ;
		String[] authors = {"java", "rjb", "java", "bill", "scott"} ;
		String[] titles = { "Prepared Hello",
		"Prepared Hello Java",
		"Prepared Hello Robert",
		"Prepared Hello from Bill",
		"Prepared Hello from Scott"} ;

		Connection con = ds.getConnection("java", "sun") ;
		PreparedStatement pstmt = con.prepareStatement(insertSQL) ;
		for(int i = 0 ; i < ids.length ; i++){
			pstmt.setInt(1, ids[i]) ;	
			
			pstmt.setString(2, titles[i]) ;
			pstmt.setString(3, authors[i]) ;
			pstmt.executeUpdate() ;


   C、CallableStatement对象
     从Connection对象调用prepareCall()方法,创建CallableStatement对象。它可包含调用存储过程的功能。
     
	 {call AuthorList} if the procedure takes no parameters
 	 {call AuthorList[(?, ?)]} if the procedure takes two parameters
 	 {? = call AuthorList[(?, ?)]} if the procedure takes two parameters and returns one
 	 例:创建存储过程
		import java.sql.*;
		import javax.sql.*;
		
		public class CreateCallableStmt{
		  private static String dbUserName = "sa";
		  private static String dbPassword = "dba";
		
		  public static void main(String args[]){
		    String createProc = "CREATE PROCEDURE INSERT_CONTACT_INFO "+
		                        "@ID INT, @FName VARCHAR(20), @MI CHAR(1), "+
		                        "@LName VARCHAR(30),@Street VARCHAR(50), "+
		                        "@City VARCHAR(30), @ST CHAR(2), "+
		                        "@ZIP VARCHAR(10), @Phone VARCHAR(20), "+
		                        "@Email VARCHAR(50) "+
		                        "AS INSERT INTO CONTACT_INFO "+
		                        "(ID, FName, MI, LName, Street, City, ST, ZIP, "+
		                        "Phone, Email) "+
		                        "VALUES "+
		                        "(@ID, @FName, @MI, @LName, @Street, @City, "+
		                        " @ST, @ZIP, @Phone, @Email);";
		
		    try {
		      Class.forName("com.inet.pool.PoolDriver");
		      com.inet.tds.TdsDataSource tds = new com.inet.tds.TdsDataSource();
		      tds.setServerName( "JUPITER" );
		      tds.setDatabaseName( "MEMBERS" );
		      tds.setUser( dbUserName );
		      tds.setPassword( dbPassword );
		
		      DataSource ds = tds;
		      Connection con = ds.getConnection(dbUserName,dbPassword);
		      
		      Statement stmt = con.createStatement();
		      stmt.executeUpdate(createProc);
		    }
		    catch(ClassNotFoundException e){
		      e.printStackTrace();
		    }
		    catch(SQLException e){
		      e.printStackTrace();
		    }
		  }
		}
	例:存储过程调用

		import java.sql.*;
		import javax.sql.*;
		
		public class CallableGetLogin{
		  private static String dbUserName = "sa";
		  private static String dbPassword = "dba";
		
		  public static void main(String args[]){
		    try {
		      Class.forName("com.inet.pool.PoolDriver");
		      com.inet.tds.TdsDataSource tds = new com.inet.tds.TdsDataSource();
		      tds.setServerName( "JUPITER" );
		      tds.setDatabaseName( "MEMBERS" );
		      tds.setUser( dbUserName );
		      tds.setPassword( dbPassword );
		
		      DataSource ds = tds;
		      Connection con = ds.getConnection(dbUserName,dbPassword);
		      
		      CallableStatement cs = con.prepareCall("{call GET_LOGIN_FOR_USER(?)}");
		      cs.setString(1,"garfield");
		      ResultSet rs = cs.executeQuery();
		      ResultSetMetaData md = rs.getMetaData();
		      
		      while(rs.next()){
		        for(int i=1;i<=md.getColumnCount();i++){
		          System.out.print(md.getColumnLabel(i)+"\t=\t");
		          if(md.getColumnType(i)==java.sql.Types.INTEGER)
		            System.out.println(rs.getInt(i));
		          else  
		            System.out.println(rs.getString(i));
		        }
		      }
		    }
		    catch(ClassNotFoundException e){
		      e.printStackTrace();
		    }
		    catch(SQLException e){
		      e.printStackTrace();
		    }
		  }
		}		
五、Blob和Clob对象的使用
	1、Inserting Blobs(binary large object)
	
	注:将图片插入表中
	...
	String insertSQL = "Insert INTO authors VALUES(?, ?)" ;

	PreparedStatement pstmt = con.prepareStatement(insertSQL) ;
	
	File file = new File("C:/images/rjb.jpg") ;
	FileInputStream fis = new FileInputStream(file);
	pstmt.setString(1, "rjb");
	pstmt.setBinaryStream(2, fis, (int)file.length());
	
	if(1 != pstmt.executeUpdate())
		System.err.println("Incorrect value returned during author insert.") ;
	pstmt.close();
	fis.close();
	System.out.println("BLOB Insert Successful") ;	
	
	2、Selecting a Blob

		String selectSQL = "SELECT photo FROM authors WHERE author = ?" ;

		PreparedStatement pstmt = con.prepareStatement(selectSQL) ;
		//用于查找作者名称为rjbr的记录
		pstmt.setString(1, "rjb");
		ResultSet rs = pstmt.executeQuery() ;
		rs.next() ;
		Blob blob = rs.getBlob("photo") ;
		// Materialize BLOB onto client
		ImageIcon icon = new ImageIcon(blob.getBytes(1, (int)blob.length())) ;
		JLabel lPhoto = new JLabel(icon) ;

	3、Inserting a Clob


	String insertSQL = "Insert INTO messages VALUES(?, ?, ?, ?)" ;

	PreparedStatement pstmt = con.prepareStatement(insertSQL) ;
	File file = new File("C:/data/rjb.txt") ;
	FileInputStream fis = new FileInputStream(file);
	pstmt.setInt(1, 1);
	pstmt.setString(2, "Hello Java");
	pstmt.setString(3, "rjb");
	pstmt.setAsciiStream(4, fis, (int)file.length());
	if(1 != pstmt.executeUpdate()){
		System.err.println("Incorrect value returned during message insert.") ;
	
	4、Selecting a Clob		
	
	String selectSQL = "SELECT message FROM messages WHERE id = ?" ;
	PreparedStatement pstmt = con.prepareStatement(selectSQL) ;
	pstmt.setInt(1, 1);
	ResultSet rs = pstmt.executeQuery() ;
	rs.next() ;
	
	Clob clob = rs.getClob("message") ;
	// Materialize CLOB onto client
	InputStreamReader in = new InputStreamReader(clob.getAsciiStream()) ;
	JTextArea text = new JTextArea(readString(in)) ;
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -