数据库使用经验漫谈.docx
- 文档编号:10989199
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:15
- 大小:23.87KB
数据库使用经验漫谈.docx
《数据库使用经验漫谈.docx》由会员分享,可在线阅读,更多相关《数据库使用经验漫谈.docx(15页珍藏版)》请在冰豆网上搜索。
数据库使用经验漫谈
DB2数据库使用
DML(DataManipulationLanguagecommands)数据操纵语言
DDL(DataDefinitionLanguagecommands)数据定义语言
TCC(TransactionControlcommands)事务控制语言
SCC(SystemControlcommands)系统控制语言
一DML数据操纵语言
(一)数据查询命令
select<查询内容>From<表名>
where<条件>/*in,between,like%或_*/
groupby<分组内容>
having<组内条件>
orderby<排序内容>[asc/desc];
(二)数据更新命令
1、数据插入命令
(1).具体的值插入表中
Insertinto<表名>[(列名表)]
values<值表1>,<值表2>,<值表2>...
(注:
日期,字符型值加引号)
(2).将其它表满足条件的数据插入到一个表中
Insertinto<表名>[<列表名>]
2、数据修改命令
Update<表名>set<列名1>=<表达式1>,<列名2>=<表达式2>...[where<条件>];
Update<表名>set<列名1>=(
3、数据删除命令
Deletefrom<表名>[where<条件>];
二DDL数据定义语言
(一)、基本数据类型
1.字符串
字符串为一个字节序列,字符串的长度为序列中的字节数。
如果长度为零,则该字符串的值称为空字符串。
CHAR(x)是固定长度字符串。
(1= <> VARCHAR(x)可变长度字符x<=4000,x>254不能用groupby,orderby,distinct和除 unionall以外的任何设置操作。 GRAPHIC(x)是固定图形字符串。 (1= BLOB二进制字符串,是一个字节序列,用于保存非传统数据,如图象、图形、声音等数据。 2数字: 所有数字都有符号和精度。 精度是除开符号的位数或数字数。 SMALLINT小整数,是精度为5位的两字节整数。 INTEGER大整数,是精度为10位的四字节整数。 REAL单精度浮点数,是实数的32位近似值。 DOUBLE双精度浮点数,是实数的64位近似值,DOUBLE也称FLOAT。 DECIMAL(p,s)DECIMAL是一个十进制数。 小数点的位置由数字的精度(p)和小数位(s) 确定。 精度是数字的总位数,必须小于32。 小数位是小数部分数字的位数且总是小于或等于精度值。 如果未指定精度和小数位,则十进制值的缺省精度为5,缺省小数位为0。 3日期时间值: 日期时间值是日期、时间以及时间戳记的表示,日期时间值可以用于某些算术运算和字符串运算并且与某些字符串是相容的。 DATE由三个部分构成(年、月以及日)。 TIME使用24小时制,分为三个部分(小时、分钟以及秒)。 IMESTAMP分为七个部分(年、月、日、小时、分钟、秒以及微秒)。 4空值空值是一个区别于所有非空值的特殊值。 它意味着行中的那一列无任何其 它值。 所有数据类型都存在空值。 (二)、数据定义 1、Create(创建) 创建表: Createtable[<模式名>.]<表名>(<列名1><类型>[Null|Notnull][,<列 名2><类型>...] 创建视图: Createview[<模式名>.]<视图名>[<列名表>]asselect语句 创建别名: Createalias[<模式名>.]别名for[<模式名>.]表名/视图名/别名 创建索引: Create[unique]index<索引名>/*I_表名_字段名*/on<表名>(<列名 >[asc|desc] 创建模式: Createschema模式名authorization权限名 2、Drop(摧毁) 摧毁表: droptable[<模式名>.]表名 摧毁视图: dropview[<模式名>.]视图名 摧毁别名: dropalias[<模式名>.]别名 摧毁触发器: droptrigger[<模式名>.]触发器名 摧毁索引: dropindex[<模式名>.]<索引名> 摧毁包: droppackage[<模式名>.]包名 3、Alter(变更) 增加表列: Altertable[<模式名>.]<表名>addcolumn[<列名1><类型>[Null|Notnull]]... 增加约束: Altertable[<模式名>.]<表名>addconstraint列名CHECK(约束) 删除约束: Altertable[<模式名>.]<表名>dropconstraint约束名 修改列类型: Altertable[<模式名>.]<表名>altercolumn列名setdatatype<类型> 4、Grant(赋权) 对[public/用户/组]赋于在表上的[all/select/insert/update/delete]权限: ant[all/select/insert/update/delete]on[<模式名>.]表名to[public/用户/ 组]; 对[public/用户/组]赋于在包上的[bind/execute/]权限: Grant[bind/execute/]onpackage[<模式名>.][包名]to[public/用户/组]; 对[public/用户/组]赋于在索引上的[control]权限: Grantcontrolonindex[<模式名>.]索引名to[public/用户/组] 5、Revoke(回收) 从public/用户/组]回收在表上的[all/select/insert/update/delete]权限: Revoke[all/select/insert/update/delete]on[表名]from[public/用户/组]; 从public/用户/组]回收在包上的[bind/execute/]权限: Revoke[bind/execute/]onpackage[<模式名>.][包名]from[public/用户/组]; 三事务控制语言 1.事务提交命令: Commit; 2.事务回退命令: Rollback; 四系统控制语言 1.取消自动提交: Updatecommandoptionsusingcoff; 2.连接数据库: Connectto数据库名user用户using密码 3.断开数据库连接: Connectreset Disconnect数据库名 4.列出数据库中的所有表: Listtablesforall 5.列出数据库中的模式名为schema_name的所有表: Listtablesforschemaschema_name 6.查看表结构 Describetable模式名.表名 Describeselect*from模式名.表名 7.查看表的索引 Describeindexesfortable模式名.表名 五函数 (一)列函数 列函数对列中的一组值进行运算以得到单个结果值。 1.AVG 返回某一组中的值除以该组中值的个数的和 2.COUNT(*) 返回非空列值的行数。 3.MAX 返回一组值中的最大值 4.MIN 返回一组值中的最小值 5.MOD 求余 (二)标量函数 标量函数对值进行某个运算以返回另一个值。 下列就是一些由DB2通用数据库提供的标量函数的示例。 1.ABS 返回数的绝对值 2.HEX 返回值的十六进制表示 3.LENGTH 返回自变量中的字节数(对于图形字符串则返回双字节字符数。 ) 4.YEAR 抽取日期时间值的年份部分 5.NULLIF(a,b) 如果a=b则值为空,否则值为a 6.COALESCE(a,b,c) : 返回第一个具有非空值的参数的值 7.UCASE(str) 小写字符转换成大写字符 8.ICASE(str) 大写字符转换成小写字符 9.LOCAT(str1,str2,n) 返回从第n个字符起,在str1中str2第一次出现的位置 10.SUBSTR(str,m,n) 返回从第m个字符起,,在str中的n个字符串 六嵌入式SQL(SQLJ) 将SQL语句嵌入应用程序时,必须按以下步骤预编译应用程序并将其与数据库联编: 1.创建源文件,以包含带嵌入式SQL语句的程序 格式: #SQL{SQL语句}。 2.连接数据库,然后预编译每个源文件。 语法: SQLJ源文件名 例: importjava.sql.*; importsqlj.runtime.*; importsqlj.runtime.ref.*; #sqliteratorApp_Cursor1(Stringempno,Stringfirstnme); #sqliteratorApp_Cursor2(String); classApp { static { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); } catch(Exceptione) { e.printStackTrace(); } } publicstaticvoidmain(Stringargv[]) { try { App_Cursor1cursor1; App_Cursor1cursor2; Stringstr1=null; Stringstr2=null; intcount1; Connectioncon=null; Stringurl="jdbc: odbc: tese2"; DefaultContextctx=DefaultContext.getDefaultContext(); if(ctx==null){ try{ if(argv.length==0){ Stringuserid="tdl"; Stringpasswd="user"; con=DriverManager.getConnection(url,userid,passwd); } elseif(argv.length==2){ // connectwithdefaultid/password con=DriverManager.getConnection(url); } else{ System.out.println("\nUsage: javaApp[usernamepassword]\n"); System.exit(0); } con.setAutoCommit(false); ctx=newDefaultContext(con); } catch(SQLExceptione){ System.out.println("Error: couldnotgetadefaultcontext"); System.err.println(e); System.exit (1); } DefaultContext.setDefaultContext(ctx); } #sqlcursor1={SELECTempno,firstnmefromdb2admin.employee}; System.out.println("Receivedresults: "); while(cursor1.next()){ str1=cursor1.empno(); str2=cursor1.firstnme(); System.out.print("empno="+str1); System.out.print("firstname="+str2); System.out.print("\n"); } cursor1.close(); #sqlcursor2={SELECTfirstnmefromdb2admin.employeewhereempno=: str1}; System.out.println("Receivedresults: "); while(true){ #sql{FETCH: cursor2INTO: str2}; if(cursor2.endFetch())break; System.out.print("empno="+str1); System.out.print("firstname="+str2); System.out.print("\n"); } cursor2.close(); //rollbacktheupdate System.out.println("\n\nRollbacktheupdate..."); #sql{ROLLBACKwork}; System.out.println("Rollbackdone."); } catch(Exceptione) { e.printStackTrace(); } } } 注: 本程序采用JDBCODBC桥的方式访问数据库,必须配置ODBC数据源。 七触发器 建一个触发器,应包含以下部分: 触发器名字 触发器触发事件: insert,delete,update 激活时间: before,after 粒度: foreachstatement, foreachrow 过渡变量: oldrow: 表示触发事件之前被修改的值: newrow表示触发事件之后被修改的值 oldtable表示触发事件之前全部被修改行的一个只读假想表 newtable表示触发事件之后全部被修改行的一个假想表 触发条件: 由WHEN开始,可包含一个或多个谓词,可包含过渡变量和子查询 触发体: 由一个或多个SQL语句组成 例: CREATETRIGGERREORDER AFTERUPDATEOFON_HAND,MAX_STOCKEDONPARTS REFERENCINGNEWASN_ROW FOREACHROWMODEDB2SQL WHEN(N_ROW.ON_HAND<0.10*N_ROW.MAX_STOCKED ANDN_ROW.ORDER_PENDING='N') BEGINATOMIC VALUES(ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED- N_ROW.ON_HAND, N_ROW.PARTNO)); UPDATEPARTSSETPARTS.ORDER_PENDING='Y' WHEREPARTS.PARTNO=N_ROW.PARTNO; END 八存储过程 存储过程主要通过”StoredProcedureBuilder”来建立, (一)对存储过程的调用分三部分: 1.连接(与数据库建立连接) Class.forName("COM.DB2Driver").newInstance(); Connectioncon=DriverManager.getConnection(url,user,password); 2。 注册输出参数 cs.registerOutParameter(3,Types.INTEGER); 3。 调用存储过程: CallableStatementcs=con.prepareCall("{callstore_name(参数,参数,参数)}"); (二)调用举例: import.URL; importjava.sql.*; classtest2 { publicstaticvoidmain(Stringargs[]) { Stringurl="jdbc: db2: //wellhope/sample"; Stringuser="db2admin"; Stringpassword="db2admi n"; try { Class.forName("COM.DB2Driver").newInstance(); //与数据库建立连接 Connectioncon=DriverManager.getConnection(url,user,password); checkForWarning(con.getWarnings()); DatabaseMetaDatadma=con.getMetaData(); Stringstr="Thisisastring"; //inthashcode=str.hashCode(); //System.out.println("Hashcode"+hashcode); //创建Statement对象,用于执行SQL语句 Statementstmt=con.createStatement(); //创建CallableStatement对象,用于执行存储过程 CallableStatementcs=con.prepareCall("{callPRO_YHDL1(? ? ? )}"); //注册输出参数 cs.registerOutParameter(3,Types.INTEGER); intresult=0; cs.setString(1,"123"); cs.setString(2,"123"); cs.execute(); result=cs.getInt(3); dispResultSet(result); cs.close(); con.close(); } catch(SQLExceptionex) { System.out.println("\n***SQLExceptioncaught***\n"); while(ex! =null) { System.out.println("SQLState: "+ex.getSQLState()); System.out.println("Message: "+ex.getMessage()); System.out.println("Vendor: "+ex.getErrorCode()); ex=ex.getNextException(); System.out.println(""); } } catch(java.lang.Exceptionex) { ex.printStackTrace(); } } (三)存储过程举例: Pro_yhdl1是一个存储过程,它的功能是从数据库表YHDL中取出PWD: importjava.sql.*; publicclassPro_yhdl1 { publicstaticvoidpro_yhdl1(Stringm_id, Stringm_pwd, int[]result)throwsSQLException, Exception { //Getconnectiontothedatabase Connectioncon=DriverManager.getConnection("jdbc: default: connection"); PreparedStatementstmt=null; ResultSetrs=null; Stringsql; Stringm_password=""; sql="SELECT" +"DB2ADMIN.YHDL.PWD" +"FROM" +"DB2ADMIN.YHDL" +"WHERE" +"(" +"(" +"DB2ADMIN.YHDL.ID='"+m_id.trim()+"'" +")" +")"; stmt=con.prepareStatement(sql); rs=stmt.executeQuery(); //Accessqueryresults while(rs.next()) { m_password=rs.getString (1); m_password=m_password.trim(); if(rs.wasNull()) System.out.print("NULL"); else System.out.print(m_password); } if(m_password.equals(m_pwd.trim())) { result[0]=1; } else { result[0]=0; } //closeopenresources if(rs! =null)rs.close(); if(stmt! =null)stmt.close(); if(con! =null)con.close(); //setreturnparameter //result[0]=result[0]; } } 九JAVA数据库链接(JDBC) DB2的Java支持包括JDBC,一个以供应商为中心的动态SQL接口,它通过标准的Java方法提供对应用程序的数据存取。 JDBC与DB2CLI相似之处在于您不必预编译或联编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 使用 经验 漫谈