JDBC设计说明书.docx
- 文档编号:17395685
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:37
- 大小:475.96KB
JDBC设计说明书.docx
《JDBC设计说明书.docx》由会员分享,可在线阅读,更多相关《JDBC设计说明书.docx(37页珍藏版)》请在冰点文库上搜索。
JDBC设计说明书
一、设计内容
第一天2016.01.04
1、主要学习内容
1.1什么是JDBC
JDBC(JavaDatabaseConnectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。
JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
1.2JDBC原理
部分本地API部分Java的驱动程序
这种类型的JDBC驱动程序使用Java编写,它调用数据库厂商提供的本地API
通过这种类型的JDBC驱动程序访问数据库减少了ODBC的调用环节,提高了数据库访问的效率
在这种方式下需要在客户的机器上安装本地JDBC驱动程序和特定厂商的本地API
图1.1JDBC连接数据库原理图
1.3JDBCAPI
JDBCAPI是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。
图1.2JDBCAPI结构图
图1.3JDBCAPI连接不同数据库
1.4JDBC连接数据库步骤代码
1.4.1加载驱动
class.forName("com.mysql.jdbc.Driver");
1.4.2获取连接
Connectionconnection=DriverManager.getConnection(url,user,password);
1.4.3创建语句载体
Statements=connection.createStatement();
1.4.4执行SQL语句
Stringsql="select*fromdept";
ResultSetrs=s.executeQuery(sql);
1.4.5关闭资源
s.close();
connection.close();
2、遇到问题、解决方案
安装好了Mysql数据库,创建好了工程,并且写入了连接的代码,但是运行程序过程中出现了如下错误:
java.lang.ClassNotFoundException:
com.mysql.jdbc.Driver
at.URLClassLoader$1.run(URLClassLoader.java:
200)
atjava.security.AccessController.doPrivileged(NativeMethod)
at.URLClassLoader.findClass(URLClassLoader.java:
188)
atjava.lang.ClassLoader.loadClass(ClassLoader.java:
307)
atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:
301)
atjava.lang.ClassLoader.loadClass(ClassLoader.java:
252)
atjava.lang.ClassLoader.loadClassInternal(ClassLoader.java:
320)
atjava.lang.Class.forName0(NativeMethod)
atjava.lang.Class.forName(Class.java:
169)
atcom.main.MainClass.
19)
java.sql.SQLException:
Nosuitabledriverfoundforjdbc:
mysql:
//localhost:
3306/datatest
atjava.sql.DriverManager.getConnection(DriverManager.java:
602)
atjava.sql.DriverManager.getConnection(DriverManager.java:
185)
atcom.main.MainClass.main(MainClass.java:
40)
原因是工程中缺少了连接数据库Mysql的驱动包。
解决办法:
将Mysql的数据库驱动包张贴到自己工程下自己创建的lib文件夹下,然后选中驱动包,右键-BuildPath-AddtoBuildPath。
之后在工程目录的ReferencedLibraries中看见了驱动包mysql-connector-java-5.0.3-bin.jar文件。
双击打开该文件出现许多的类,那么表示驱动包配置好了。
按照上面的步骤,再次运行程序,发现可以往数据库中查出数据显示到控制台上了。
3、收获和体会
在第一天的学习中,认真听老师的讲解,之后自己动手受益匪浅。
既锻炼了自主动手解决问题的能力,又在养成在遇到困难的时候要好好利用互联网去查资料,以便自己阅读后便着手解决现实中的问题。
第二天2016.01.05
1、主要学习内容
1.1SQL语句之增删改查
图1.4SQL语句分类图
1.2各种查询语句代码
1.2.1insert插入操作
publicstaticvoidmain2(String[]args){
//TODOAuto-generatedmethodstub
try{
Connectionconnection=DriverManager.getConnection(url,user,password);
//Statementstatement=connection.createStatement();
Stringsql="insertintodeptvalues(?
?
?
)";
PreparedStatementps=connection.prepareStatement(sql);
//为PreparedStatement的占位符赋值
ps.setInt(1,8);
ps.setString(2,"88888");
ps.setString(3,"2");//任何一个关系型数据库管理系统能够实现从String到所需3类型转换
inti=ps.executeUpdate();
System.out.println(i);
}catch(SQLExceptione){
}
}
1.2.2delete删除操作
publicintdelete(intdeptno)
{
inti=-1;
Stringsql="deletefromdeptwheredeptno=?
";
String[]args={sql,deptno};
i=update(sql.args);
returni;
}
1.2.3update更新操作
publicintupdateDept(intdeptno,Stringdname)
{
inti=-1;
Stringsql="updatedeptsetdname=?
wheredeptno=?
";
String[]args={dname,deptno+""};
i=update(sql,args);
returni;
}
1.2.4select查询操作
publicstaticvoidmain1(String[]args){
//TODOAuto-generatedmethodstub
try{
Connectionconnection=DriverManager.getConnection(url,user,password);
Statementstatement=connection.createStatement();
Stringsql="selectdeptno,dname,topdeptnotnofromdept";
ResultSetresultSet=statement.executeQuery(sql);
while(resultSet.next()){
System.out.print(resultSet.getInt
(1)+"\t");
System.out.print(resultSet.getInt("tno")+"\t");
System.out.println(resultSet.getString("dname"));
}
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
2、遇到问题、解决方案
2.1在执行下列代码是出现执行的时候,在ps=ct.prepareStatement(sql);这里报错,显示的错误是Generalerror
publicbooleanupdateDB(Stringsql,String[]paras){
booleanb=true;
try{
ps=ct.prepareStatement(sql);
for(inti=0;i ps.setString(i+1,paras[i]); } ps.executeUpdate(); }catch(SQLExceptione){ b=false; e.printStackTrace(); }finally{ close(); } returnb; } publicbooleaninsertByDiet(String[]paras){ Stringsql; booleanb=false; try{ sql="insertintorecord(cId,bId,mId,borrowDate,returnDate)values(? ? ? ? ? )"; b=updateDB(sql,paras);//更新成功返回true,所以插入成功返回true }catch(Exceptione){ e.printStackTrace(); } returnb; } String[]paras1={cid,bid,mid,bdate,rdate}; b=insertByDiet(paras1); 2.2解决办法: 问题分析: 写了占位符你又不用东西填,sql当然错了,报的sql不完整 解决方案: Avaluses后的四个问号直接写上参数 B用importjava.sql.PreparedStatement;包下的PreparedStatement方法。 预编的方式进行填充示例: PreparedStatementps=null; sql="insertintorecord(cId,bId,mId,borrowDate,returnDate)values(? ? ? ? ? )"; ps.setInt(1,第一个值); ps.setInt(2,第二个值); ps.setInt(3,第三个值); ps.setInt(4,第四个值); 这里提交1234必须写setInt是举例子你看自己的那些字段是什么类型的 ps.executeUpdate(); 3、收获和体会 在今天的学习中,我体会到了JAVA的三大特性,即封装(Encapsulation)、继承(Inheritance)多态(Polymorphism)。 其中继承可以简化代码,缩小代码开发所需的时间,让程序员更高效的开发出所需的产品。 在编码过程中我觉得重大的收获就是解决bug。 在代码的单元测试中,经常会报错。 通过研读控制台的报错信息,自己动手调试代码,再次测试,直到解决了bug为止。 这种勇于面对bug而不慌的精神难能可贵,是我以前编代码从未像今天有如此深刻的体会。 其中也遇到了不能自己弄明白的bug,求助于老师都解决了。 在这里要谢谢老师们的细心解答和耐心讲课。 第三天2016.01.06 1、主要学习内容 1.1面向网络编程 网络编程通过使用套接字来达到进程间通信目的的编程就是网络编程。 windows提供的基于网络编程的就是套接字也就是winsock,同时Winpcap也是一个比较方便的工具。 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑…… 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的! 中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理! 图1.5网络编程原理图 1.2C/S结构 C/S结构,即大家熟知的客户机和服务器结构。 它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。 目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。 这也就是目前应用系统的发展方向。 图1.6基于C/S客户机/服务器原理图 1.3微信使用Netty结构 作为一个高性能的异步、NIO通信框架,编解码框架是Netty的重要组成部分。 尽管站在微内核的角度看,编解码框架并不是Netty微内核的组成部分,但是通过ChannelHandler定制扩展出的编解码框架却是不可或缺的。 图1.7Netty框架结构 1.4查询 a.获得Result b.从Result读取数据 SortedMap: 以排序的Map集合,一个有序的Map集合 SortedMap——int[] Mapkey-value键值对的集合,无序 K1根据哈希函数计算下标 Key值唯一 图1.8表格示例 Map 1.5代码 mainClass.java packagecom; importjava.sql.*; importjava.util.Scanner; importjava.util.SortedMap; importjavax.servlet.jsp.jstl.sql.Result; publicclassmainClass{ privatestaticfinalStringclassName="com.mysql.jdbc.Driver"; privatestaticfinalStringurl="jdbc: mysql: //localhost: 3306/test"; privatestaticfinalStringuser="root"; privatestaticfinalStringpassword="root"; static{ try{ Class.forName(className); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } publicstaticvoidmain3(String[]args){ try{ Connectionconnection=DriverManager.getConnection(url,user,password); //Statementstatement=connection.createStatement(); Stringsql="selectnum,name,agefrom01_04"; PreparedStatementps=connection.prepareStatement(sql); ps.setString(2,"5"); ResultSetresultSet=ps.executeQuery(sql); while(resultSet.next()){ System.out.print(resultSet.getInt (1)+"\t"); System.out.print(resultSet.getInt("num")+"\t"); System.out.println(resultSet.getString("name")); } }catch(SQLExceptione){ e.printStackTrace(); } } publicstaticvoidmain2(String[]args){ try{ Connectionconnection=DriverManager.getConnection(url,user,password); //Statementstatement=connection.createStatement(); Stringsql="selectnum,name,agefrom01_04"; PreparedStatementps=connection.prepareStatement(sql); ps.setInt(1,8); ps.setString(2,"8888"); ps.setString(3,"88"); inti=ps.executeUpdate(); System.out.println(i); }catch(SQLExceptione){ e.printStackTrace(); } } publicstaticvoidmain1(String[]args){ try{ Connectionconnection=DriverManager.getConnection(url,user,password); Statementstatement=connection.createStatement(); Stringsql="selectnum,name,agefrom01_04"; ResultSetresultSet=statement.executeQuery(sql); while(resultSet.next()){ System.out.print(resultSet.getInt (1)+"\t"); System.out.print(resultSet.getInt("num")+"\t"); System.out.println(resultSet.getString("name")); } }catch(SQLExceptione){ e.printStackTrace(); } } publicstaticvoidmain5(String[]args){ Stringsql="selectnum,name,agefrom01_04"; String[]args1={"5"}; baseDaobd=newbaseDao(); Resultresult=bd.query(sql,args1); System.out.println(result.getRowCount()); String[]ss=result.getColumnNames(); for(inti=0;i Stringstring=ss[i]; System.out.println(string); } SortedMap[]sms=result.getRows(); System.out.println(sms.length); for(inti=0;i SortedMapsm=sms[i]; System.out.println(sm.get("num")); System.out.println(sm.get("name")); System.out.println(sm.get("age")); } } publicstaticvoidmain(String[]args){ Scannerscanner=newScanner(System.in); System.out.println("num"); intdeptnum=scanner.nextInt(); System.out.println("name"); Stringname=scanner.next(); System.out.println("age"); inttopdatenum=scanner.nextInt(); deptDaodd=newdeptDao(); inti=dd.addDept(deptnum,name,topdatenum); if(i==1){ System.out.println("success"); }else{ System.out.println("false"); } System.out.println("-------------"); System.out.println("updeptnum"); deptnum=scanner.nextInt(); System.out.println("name"); name=scanner.next(); dd.updateDept(deptnum,name); } publicstaticvoidmain0(String[]args){ Sc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JDBC 设计 说明书
![提示](https://static.bingdoc.com/images/bang_tan.gif)