Oracle笔记7-11天

Day07

JDBC实现数据的

1.查询

2.增

3.修改

3.删除

--------------------------------------------------------------------------------

一、JDBC实现查询

1.步骤

1.1创建java项目,导入jar包“ojdbc6.jar”

1.2编写访问类

第1步:导入sql包常用接口与类

import java.sql.DriverManager;//驱动信息类

import java.sql.Connection;//链接对象接口

import java.sql.PreparedStatement;//预编译语句执行对象接口

import java.sql.ResultSet;//查询结果集接口

第2步:拼写数据库访问相关字符串

String url = "jdbc:oracle:thin:@localhost:1521:XE";

String user = "scott";

String password = "tiger";

第3步:获取链接对象

Connection conn= DriverManager.getConnection(url, user, password);

第4步:拼写SQL语句

String sql = "select * from loginTB where userName=? anduserPassword=?"

第5步:获取语句执行对象

PreparedStatement stmt = conn.prepareStatement(sql);

第6步:给语句执行对象中的占位符?赋具体值

stmt.setObject(1,"xdlAdmin");

stmt.setObject(2,"123123");

第7步:执行SQL语句获取查询结果集

rs = stmt.executeQuery();

第8步:访问下一下数据

rs.next()有下一行返回true,没有下一行返回false

最后一步:释放资源

rs.close();

stmt.close();

conn.close();

2. JDBC实现事务管理:

Connection conn= DriverManager.getConnection(地址,登录名,密码);

3.链接对象模式事务是自动提交管理的

conn.setAutoCommit(false);关闭链接对象的事务自动管理

4.结合条件结构

事务提交:conn.commit();

事务回滚:conn.rollback();

以此保证数据的完整性有效性

5.JDBC的批处理

PreparedStatement预编译SQL语句执行对象,可对大批量数据进行批处理(一船一船的运送数据)

String sql = "insert into dept02 values(11,?,'帝都')";//请保证自建dept02表无主键

stmt=conn.prepareStatement(sql);

for(int i=1;i

stmt.setString(1,"测试"+i);

stmt.addBatch();//对当前预编译SQL语句执行对象添加批处理

if(i%200==0) stmt.executeBatch();//每200行提交一次

}

Day08

一、调用存储过程

1.导入执行存储过程的对象接口CallableStatement

import java.sql.CallableStatement;

2.通过链接对象获得,当前的执行存储过程的对象

CallableStatementstmt = conn.prepareCall("call自定义存储过程名(参数列表占位符?)");

3.为当前占位符赋具体值:

in修饰的输入参数:stmt.setObject(第几个问号,值)

out修饰的输出参数:stmt.registerOutParameter(第几个问号,Types.值类型);

4.语句执行对象调用方法执行过程

stmt.execute();

5.获得输出参数返回值

Object val = stmt.getObject(第几个问号);

6.资源释放:stmt.close(); conn.close();

二、实现DAO编程

客户端--应用程序服务器--数据库服务器.

一个web程序包含:java代码,SQL代码,HTML5代码,CSS代码,JS代码,JQuery代码... ...

通过分层,实现程序的各司其职

MVC

M --模型-- Bean实体对象的封装,Dao数据访问,业务Servlet...

V --视图--展示给用户看的,注重美观,使用感受舒适

C --控制--数据从哪来到哪去

Dao编程套路

1.先依据表格建立Bean是对象的数据封装类

2.编写自定义的数据访问接口,声明数据访问的相关方法。

3.编写接口的实现类,实现具体的数据访问

Day09

数据库连接池

获取数据库访问链接的效率较慢,为了提高效率牺牲空间换取时间。

1.先给项目添加DBCP的Jar包

2.导入数据库连接池类

3.创建连接池对象

BasicDataSource ds = new BasicDataSource();

4.设置连接池常用属性

ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");//设访问地址

ds.setUsername("scott");//设数据库登录名

ds.setPassword("tiger");//设数据库登录密码

ds.setInitialSize(10);//设初始链接数量

ds.setMaxIdle(30);//设最大空闲链接数量

ds.setMinIdle(10);//设最小空闲链接数量

ds.setMaxWait(1000);//设等待时长多少毫秒,过时访问失败

5.从连接池中获取一个链接对象

Connection conn = ds.getConnection();

连接池在内存中准备好N个已有的连接对象,当需要访问连接时从中获取一个空闲链接对象使用。

属性文件:

importjava.io.FileInputStream;

importjava.util.Properties;//导入属性集合类,一键一值存储数据

新建db.properties

键=值

FileInputStreamfile = new FileInputStream("db.properties");

Properties pro =new Properties();//此时属性集合中尚无任何内容

pro.load(file);//属性集合通过load方法加载数据

String val =pro.getProperty("键");

Day10

一、数据分析

分析有哪些数据需要进行管理,根据三范式划分出表格。建表格,合理的设置表与表之间的关系及各项约束。

注意使用序列

二、DAO编程

1.写表的映射实体封装类

2.数据访问接口XxxDao.思考的对不同的表格数据实现哪些数据管理,进行方法声明

2.1用户Dao包含功能?

2.1.1密码修改

2.1.2注册学员

2.1.3删除学员

2.1.4修改学员

2.1.5查询学员

2.1.6登录

等...

2.2试题Dao包含功能

2.2.1查询10个给定编号的试题

2.2.2按时间排序的全查

2.2.3增加试题

2.2.4修改试题

2.2.5删除试题

2.2.6按ID查询试题

等...

2.3成绩Dao包含

2.3.1成绩增加

2.3.2成绩修改

2.3.3成绩查询(可能是多表联查)

等...

仅供参考,如有雷同纯属巧合。

3.写数据访问实现类XxxDaoImpl,将数据访问的各个方法具体实现完成

4.编写测试

Day11

客户端与服务器直接的交互

一、先实现客户端与服务器直接的通话

1.先创建服务器端的ServerSocket

import java.net.ServerSocket;

import java.net.Socket

ServerSocket ss=new ServerSocket(18666);

Socket cs=ss.accept();

2.再创建客户端Socket

import java.net.Socket

Socket cs=new Socket("127.0.0.1",18666);

3.在让服务器端可接受多个客户端访问

while(true){

Socket cs=ss.accept();

}

二、服务器端线程,处理接受客户端数据的相关事情

实现网路编程时,双方操作IO流进行交互,小心操纵不善引起交互冲突从而引发IO阻塞。

客户端获取输入/输出流的顺序与服务器端是相反的操作

实现线程的两种方式,一种是继承自Thread,重写start方法启动线程

另一种是实现Runnable接口,实现run方法,我们采用第2中方式

1.创建类ServerThread类实现java.lang.Runnable接口

2.定义私有字段Socket cs ,通过构造方法为其赋值

3.改写ServerMain类的方法实现,加入线程启动。

同时将服务器端接收到的客户端请求过来的Socket传递给线程,等待处理请求中的数据

new Thread(new ServerThread(cs)).start();

4.为了方便对象通过输入/输出流传递请序列化所有实体封装类

import java.io.Serializable;

三、客户端向服务器端发送数据

向服务器端发送数据

//向服务器发送数据的输出流

private staticObjectOutputStream cout;

//发出给服务器的数据

private staticHashMap toMap = new HashMap();

//客户端数据传递给服务器

cout = newObjectOutputStream(cs.getOutputStream());

User loginObj =new User(-1,"唐僧","123123",1,0);

toMap.put("cType","管理员登陆");

toMap.put("cVal",loginObj);

cout.writeObject(toMap);

cout.flush();

cout.close();//临时的

四、服务器端接收客户端传递过来的数据

public voidrun() {

try{

fromMap = (HashMap) sin.readObject();

toMap = new HashMap();

String cType = (String) fromMap.get("cType");

User cVal = (User)fromMap.get("cVal");

}catch(Exception e){ e.printStackTrace(); }

}

五、服务器端给客户端传递数据出去

while(true){

...上run

User dbVal = newUser(1001,"唐僧","123123",1,1);

toMap.put("sType","ok");

toMap.put("sVal",dbVal);

sout.writeObject(toMap);

sout.flush();

}

六、客服端接收服务器端数据

while(true){

fromMap =(HashMap)cin.readObject();

String sType=(String)fromMap.get("sType");

User sVal=(User)fromMap.get("sVal");

}

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180913G00ACD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券