posts - 13,  comments - 8,  trackbacks - 0
JSP中SQL数据库编程技术
一,SQL复习
 1,SQL语句分为两类:DDL(Data Definition Language)和DML(Dat Manipulation Languge,数据操作语言)。前者主要是定义数据逻辑结构,包括定义表、视图和索引;DML主要是对数据库进行查询和更新操作。
 2,Create Table(DDL):
  Create Table tabName(
   colName1 colType1 [else],
   colName2 colType2 [else],
   ...,
   colNamen colTypen [else]
  );
  例如:Cteate Table pJoiner(
   pno char(6) not null,
   eno char(6) nut null
   );
  char int varchar等等都是用来定义列数据类型的保留字,其中varchar表示可变字符类型。
 3,Select <col1>,<col2>,...,<coln>
  From <tab1>,<tab2>,...,<tabm>
  [Where<条件>]
  
  条件中的子查询:
   Where Not Exists(
    Select * From tab2 Where col1=col2
   )//当查询结果为空时,条件为真。
   
 4,INSERT INTO <tab1> VALUES(<col1>, ...<coln>)
 5,DELETE FROM <tab1> [WHERE<条件>]
 6,UPDATE <tab1>
  SET <tab1>=<vlu1>
  ...
  <tabn>=<vlun>
  [WHERE<条件>]
  例如:
   Update exployee
   Set age=27
   Where name='赵一'
二,JDBC 主要接口:
 java.sql.DriverManager类用于处理驱动程序的调入并且对新的数据库连接提供支持。
 java.sql.Connection,指应用程序与特定数据库的连接。
 java.sql.Statement,用于一般sql语句的执行(可以是查询、更新甚至可以创建数据库的执行过程)
 java.sql.ResultSet,查询所返回的结果保存在此对象中,用它可以浏览和存取数据库内的记录。
 
 1,通过jdbc-odbc桥使用odbc数据库(并不需要jdbc Drivers)
 
  先在odbc DSN(Data Source Name)设置处设置pubs sysDSN,sa为username,密码为空
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载驱动程序
  con=DriverManager.getConnection("jdbc:odbc:pubs","sa","");//jdbc:odbc:pubs   
  con.close();
  //应当catch ClassNotFoundException和SQLException
 
  Connection的getWarning方法返回一个SQLWarning对象,在连接之前应当先检查。
    使用jdbc-odbc的最大好处是:免费的。但是性能受odbc的限制,而且一般odbc驱动比较昂贵。
 2,使用专门的jdbc驱动程序。//此处是mm jdbc Driver
  先将jar文件放在ClassPath里面。
  Class.forName("org.gjt.mm.mysql.Driver");
  con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","");
  con.close();
  
  可见使用何种方式连接何种数据库与数据库的操作和连接数据库是无关的。
三,查询数据库
 Statement stmt=con.createStatement();
 stmt.setMaxRows()可以控制输出记录最大数量;
 ResultSet rs=stmt.executeQuery("select .....");
 
 ResultSet指向当前记录:
  int userId=rs.getInt("userid");
  String userName=rs.getString("username");
  ...或者用序号(从1开始的)
  int userId=rs.getInt(1);
  Stirng userName=rs.getString(2);
 
 ClassNotFoundException是由于Class.forName()无法载入jdbc驱动程序触发的
 SQLException是jdbc在执行过程中发生问题时产生。有一个额外的方法getNextException()
  catch(SQLException e){
   out.println(e.getMessage());
   while(e=e.getNextException()){
    out.println(e.getMessage());
   }
  }
   
 一般来说并不建议在jsp中编写数据库的访问程序,可以将数据库的访问封装在一个javabean中。
四,ResultSet深入
 1,ResultSetMetaData
  ResultSet rs=stmt.executeQuery("select....");
  ResultSetMetaData rsmd=rs.getMetaData(); //获取ResultSetMateData对象
  int numberOfColumns=rsmd.getColumnCount();//返回列数
  boolean b=rsmd.isSearchable(int i);//返回第i列是否可以用于where子句
  String c=rsmd.getColumnLabel(int i);//获取第i列的列标
  Objcet obj=rs.getObject();
  if(obj!=null)out.println(obj.toString());
  else println("");
 2,SQL类型与ResultSet的getObject返回类型及对应的XXX getXXX()方法
  SQL类型  JSP类型   对应的getXXX()方法
  ????????????????????????????????????????????
  CHAR                         String                                            String getString()
  VARCHAR                 String                                            String getString()
  LONGVARCHAR      String                                            InputStream getAsciiStream()/getUnicodeStream()
  NUMERIC                  java.math.BigDecimal              java.math.BigDecimal getBigDecimal()
  DECIMAL                   同上
  BIT                              Boolean                                       boolean getBoolean()
  TINYINT                     Integer                                          byte getByte()
  SMALLINT                 Integer                                          short getShort()
  INTEGER                  Integer                                          int getInt()
  BIGINT                       Long                                             long getLong()
  REAL                         Float                                              float getFloat()
  FLOAT                       Double                                          double getDouble()
  DOUBLE                   Double                                          double getDouble()
  BINARY                     byte[]                                              byte[] getBytes()
  VARBINARY              byte[]                                              byte[] getBytes()
  LONGVARBINARY   byte[]                                              InputStream getBinaryStream()
  DATE                          java.sql.Date                               java.sql.Date getDate()
  TIME                           java.sql.Time                               java.sql.Time getTime()
  TIMESTAMP              java.sql.Timestamp                   java.sql.Timestamp getTimestamp()
  
 3,null 
  int i=rs.getInt("age");
  if(!rs.wasNull())....//RecordSet::wasNull()用来检查null
 4,存取大字符串和二进制文本
  对于数据库中longvarchar和langvarbinary进行流操作
  ResultSet rs=stmt.executeQueryString("select ...");
  BufferedReader br=new BufferedReader(new InputStream(rs.getAsciiStream("vol1")));//长文本串
  BufferedReader br=new BufferedReader(new InputStream(rs.getUnicodeStream("vol1")));
  BufferedReader br=new BufferedReader(new InputStream(rs.getBinaryStream("vol2")));//长二进制文本
  //取数据必须在rs.getAsciiStream(), rs.getUnicodeStream(), rs.getBinaryStream()等之后马上进行
posted on 2005-10-16 16:26 YangRj 阅读(524) 评论(0)  编辑  收藏 所属分类: J2EE

只有注册用户登录后才能发表评论。


网站导航:
 
<2005年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(2)

随笔分类(5)

随笔档案(13)

文章分类(14)

文章档案(34)

Apache - Tech Online

BLOG 收集

BLOG地址

DB2

Eclipse

IBM - Tech Online

JAVA

ORACLE

OS

好网址

文学网站

累了 听听歌曲吧

论坛

积分与排名

  • 积分 - 25245
  • 排名 - 1520

最新评论

阅读排行榜

评论排行榜