- 浏览: 425837 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (244)
- struts2 (15)
- ognl (1)
- hibernate (17)
- gwt (17)
- GROOVY (2)
- GRAILS学习 (7)
- SPRING (4)
- AJAX (2)
- JQUERY (6)
- XML (1)
- DWR (3)
- 线程 (0)
- SVN (0)
- json (1)
- anotation (0)
- 反射 (2)
- rapidframework (0)
- OA工作流 (2)
- 事务 (0)
- mysql (0)
- oracle (26)
- EXTJ (0)
- 求职 (2)
- 随笔 (22)
- 注释 (1)
- java综合 (30)
- 设计模式 (1)
- JSP SERVLET (2)
- 插件 (7)
- 应用 (3)
- HTML (5)
- flex (13)
- android (8)
- javascript (14)
- Exception (0)
- Linux (2)
- 计算机常识 (3)
- EXCEL (2)
- 正则表达式 (1)
- 开源工具 (2)
- 测试 (1)
- 生活 (7)
- 房子 (0)
- 购房大学 (4)
- UML (1)
- 服务器 (1)
- 发展 (1)
- 英语 (1)
- 项目管理 (1)
- 摘 (1)
- 网站 (1)
最新评论
-
a347911:
架构师教程:https://note.youdao.com/s ...
架构师之路--- 一个四年 JAVA 程序员的工作经历 转 -
hzxlb910:
对我帮助很大。
架构师之路--- 一个四年 JAVA 程序员的工作经历 转 -
xly_971223:
引用因此,while (!isInterrupted())也可 ...
Java 终止线程方法 -
zdglt88:
其实这个datagrid挺简单的,没有难度
Jquery easy ui 之datagrid简介 -
完善自我:
抓住重点,支持一下!
Jquery easy ui 之datagrid简介
http://hi.baidu.com/annleecn/blog/item/ff2fdb17e7a9e915972b4381.html
JDBC复习
JDBC驱动程序的类型:
JDBC-ODBC桥;部分本地API,部分JAVA驱动程序;JDBC网络纯JAVA驱动程序;本地协议纯JAVA驱动程序。
最后一种是访问数据库效率最高的。目前应用最多的也是这种。
不同数据库的连接URL如下:
sqlserver:jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs
ORACLE:jdbc:oracle:thin:@localhost:1521:ORCL
mysql:jdbc:mysql://localhost:3306/databasename
CallableStatement对象用于执行SQL存储过程。
CallableStatement cstmt = conn.prepareCall("call p_changesal(?,?)");
cstmt.registerOutParameter(2, java.sql.Types.INTERGER);//注册OUT类型的返回参数
cstmt.setInt(1, 98);
cstmt.execute();
int sal = cstmt.getInt(2);
可以调用ResultSet.getMetaData()方法来获取ResultSetMetaData对象,再获取元数据。
一个Statement对象在同一时刻只有一个打开的ResultSet对象,在Statement接口中定义的所有executeXXX()方法都隐含地关闭Statement当前的ResultSet对象。如果你要执行多个查询语句,并且需要同时对它们的结果集进行操作,那么你必须使用多个Statement对象。
连接池技术预先建立多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到时,从池中取出一个连接对象为客户服务,请求完成后,客户程序调用close()方法,将连接对象放回池中。
常用端口:ftp:21 telnet:23 oracle:1521 mysql:3306 sqlserver:1433
注册数据库驱动的3种方式:
1,Class.forName( driverName ) 如:Class.forName("oracle.jdbc.driver.OracleDriver"):
2,Driver drv = new DriverConstructor();
DriverManager.registerDriver(drv);
如:Driver drv = new Oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( drv );
3,java -Djdbc.drivers = oracle.jdbc.driver.OracleDriver;这种方式只能注册一个driver,命令行注册方式
方法1最好
建立连接3种方式:
getConnection( String url ) //匿名访问
getConnection( url, Properties info) //要一个properties对
getConnection( url, username, password) //最常用
PreparedStatement继承自Statement
Statement 1,不适合有多个参数的SQL;2,不适合重复执行同构的SQL
Statement tem = conn.createStatement();
PreparedStatement pstm = conn.prepareStatement("select * from t_user where id = ?");
pstm.setString(1, "21"); //下标从1开始
pstm.executeQuery();
CallableStatement:专用于调用服务器的存储过程
Statement里的方法:
executeQuery( sql ) 返回ResultSet
execute( sql ) 返回boolean,是否有ResultSet返回
executeUpdate( sql ) 返回int,影响的记录行数
字符转换:
java -------------> oracle:ISO-8859-1
Unicode:gb2312(GBK)
如:String name = "张三";
gb2312---->ISO-8859-1:
String newName = new String(name.getBytes("gb2312"), "ISO-8859-1");
ISO-8859-1------->gb2312:
String newName = new String(name.getBytes("ISO-8859-1"), "gb2312");
从ResultSet里面取值:
while(rs.next()){
String name = rs.getString("name");
}
关闭:
if(null != rs){
try{
rs.close();
}catch(Exception e){
}
}
statement,connection一样要先判断非空,后关闭
SQLWarning:理论上的,不影响程序执行,不用处理;
SQLException里的方法:getErrorCode:返回错误码;getMessage:返回错误信息
元数据:DatabaseMetaData,ResultSetMetaData
conn.getMetaData(); rs.getMetaData();
查看数据库中表的信息
事务处理流程:
1,关闭自动提交;2,执行操作;3,处理数据;rollback或commit;4,打开自动提交
commit不仅是原有事务的结束,也是新事务的开始。
并发控制:
事务级别:transaction_none; transaction_read_uncommitted(默认); transaction_read_committed:解决脏读dirty read
transaction_repeateable_read:解决不可重复读的问题:non_repeated read
transaction_serializable:解决幻读:phantom read
oracle只支持read_commit和serializable
例如:conn.setTransactionIsolation( Connection.TRANSACTION_READ_COMMITTED );
回滚集的问题:
CONCUR_READ_ONLY, CONCUR_UPDATEABLE:
用来指定可不可以修改数据库:
TYPE_FORWARD_ONLY 默认
TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENITIVE
用来指定Result能不能滚动
可以用refreshRow刷新当前行。
例:Statement stm = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATEABLE);
定位方法:全部返回boolean,除afterLast(), beforeFirst()复位,返回void
absolute(int row) 传输绝对定位
first(), last(), next(), previous()向前一位
relative(int ) 相对定位
isAfterLast(), isBeforeFirst(), isFirst(), isLast();
注意:指针一开始是指在第一行的前面。
可更新结果集:
rs.updateInt(1, 9911); //更新当前行
rs.updateString("name", "tony");
rs.updateRow(); //修改生效,不调用则无效
rs.absolute(10);
rs.deleteRow(); //删除第10条记录
rs.cancelRowUpdates(); //放弃修改,删除还是会生效
插入新行
rs.moveToInsertRow(); //创建一个空记录
rs.updateInt("id", 11);
rs.updateString("name", "rose");
rs.insertRow();
rs.moveToCurrentRow(); //修改生效
rs没有主键则不能插入数据,必须包含所有的无默认值的非空字段,只能查一个表,不能连接查询,查询结果必须包含主键
如果是插入的话,必须选择表中所有不能为空的列。
批量处理:batch
con.setAutoCommit(false); //关闭自动提交
Statement stm = con.createStatement();
stm.addBatch("insert into t_user(id) value(11)");
stm.addBatch(" ... ");
int[] results = stm.executeBatch(); //返回所有成功的操作结果
con.commit();
con.setAutoCommit(true); //恢复自动提交
高级数据类型:
Blob ------ SQL Blob //大二进制对象 binary large object
Clob ------ SQL Clob //大文本二进制对象character large object
Array ----- SQL Array
Struct ---- SQL structure Type
Ref ------- SQL REF
方法:getXXX, setXXX, updateXXX
步骤:1,获得数据库连接,2,向表中插入一个空的Blog字段,3,获得Blob的输出流,4,通过输入流将数据写入数据库
如:
try{
conn.setAutoCommit(false);
Blob blob = null;
PreparedStatement pstm = conn.prepareStatement("insert into t_blob(id,filename,blobData) value
(?,?,empty_blob())"); //empty_blob()函数由oracle提供,用来创建空对象
pstm.setInt(1,10);
pstm.setString(2,"d:/hello.mp3");
pstm.executeUpdate(); //插入空值
pstm.close();
pstm = conn.prepareStatement("select blobData from u_blob where filename = ? for update"); //for update
同步必须使用,只能在查询时使用
pstm.setString(1, "d:/hello.mp3");
rs = pstm.executeQuery();
if(rs.next()){
Blob b = rs.getBlob();
oracle.sql.BLOB ob = (oracle.sql.BLOB)b;
OutputStream os = ob.getBinaryOutputStream();
InputStream is = new FileInputStream("d:/hello.mp3");
byte[] buffer = new byte[4096];
int len = 0;
while(true){
len = is.read(buffer);
if(-1 == len) break;
os.write(buffer, 0, len);
}
is.close();
os.close();
conn.commit();
}
}catch(Exception e){
conn.rollback();
}finally{
}
查询:
conn.setAutoCommit(false);
pstm = conn.prepareStatement("select blobData from u_blob where name = ? for update");
rs = pstm.executeQuery();
if(rs.next()){
blob b = rs.getBlob(1);
InputStream is = b.getBinaryStream();
OutputStream os = new FileOutputStream(path);
byte[] bb = new byte[4096];
int len = 0;
while(true){
len = is.read(bb);
if(len == -1) break;
os.write(bb, 0, len);
}
}
DataSource
WebLogic:services----->JDBC---->connection pool
JNDI:java naming directory interface api
用DataSource建立connection步骤:1,获得数据库连接,2,支持连接池,3,通常可以支持JNDI,4,支持分布式事务
OID:object id:对象在数据库中的ID
OOAD:object orient analyze and design面向对象的分析与设计
ODBC:open database connectivity:开放的数据库连接
JDBC:java database connectivity:java数据库连接
JDBC驱动程序可分为4类:
1,JDBC-ODBC桥; 2,部分本地API,部分JAVA驱动程序; 3,JDBC网络纯JAVA驱动程序; 4,本地协议纯JAVA驱
动程序,这个效率最高
Driver接口:
SQLSERVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://IP:1433;数据库名,用户名,密码
MySQL:com.mysql.jdbc.Driver
jdbc:mysql://IP:3306/数据库名,用户名,密码
DB2:com.ibm.db2.jdbc.app.DB2Driver()
jdbc:db2://IP:端口/数据库名,用户名,密码
oracle:jdbc:oracle:thin:@IP:PORT,DBname,user,password
pointbase:jdbc:pointbase:server://ip:port,dbname,user,password
com.pointBase.jdbc.jdbcUniverSqlDriver
DriverManager类是驱动程序管理器类,所有方法都是静态的,一个statement对象在同一时刻只有一个打开的ResultSet对象,在
statement接口中定义的所有executeXXX()方法都隐含地关闭statement当前的ResultSet对象,如果你要执行多个查询语句,并且需
要同时对它们的结果集进行操作,那么你必须使用多个statement对象。
DataSource例子:
javax.naming.context ctx = new javax.naming.InitialContext();
//JNDI名是相对于java:comp/env上下文的,因此在程序中利用JNDI名查询数据源对象时,要加上java:comp/env/
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:comp/env/bookstore");
java.sql.Connection conn = ds.getConnection();
JDBC复习
JDBC驱动程序的类型:
JDBC-ODBC桥;部分本地API,部分JAVA驱动程序;JDBC网络纯JAVA驱动程序;本地协议纯JAVA驱动程序。
最后一种是访问数据库效率最高的。目前应用最多的也是这种。
不同数据库的连接URL如下:
sqlserver:jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs
ORACLE:jdbc:oracle:thin:@localhost:1521:ORCL
mysql:jdbc:mysql://localhost:3306/databasename
CallableStatement对象用于执行SQL存储过程。
CallableStatement cstmt = conn.prepareCall("call p_changesal(?,?)");
cstmt.registerOutParameter(2, java.sql.Types.INTERGER);//注册OUT类型的返回参数
cstmt.setInt(1, 98);
cstmt.execute();
int sal = cstmt.getInt(2);
可以调用ResultSet.getMetaData()方法来获取ResultSetMetaData对象,再获取元数据。
一个Statement对象在同一时刻只有一个打开的ResultSet对象,在Statement接口中定义的所有executeXXX()方法都隐含地关闭Statement当前的ResultSet对象。如果你要执行多个查询语句,并且需要同时对它们的结果集进行操作,那么你必须使用多个Statement对象。
连接池技术预先建立多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到时,从池中取出一个连接对象为客户服务,请求完成后,客户程序调用close()方法,将连接对象放回池中。
常用端口:ftp:21 telnet:23 oracle:1521 mysql:3306 sqlserver:1433
注册数据库驱动的3种方式:
1,Class.forName( driverName ) 如:Class.forName("oracle.jdbc.driver.OracleDriver"):
2,Driver drv = new DriverConstructor();
DriverManager.registerDriver(drv);
如:Driver drv = new Oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver( drv );
3,java -Djdbc.drivers = oracle.jdbc.driver.OracleDriver;这种方式只能注册一个driver,命令行注册方式
方法1最好
建立连接3种方式:
getConnection( String url ) //匿名访问
getConnection( url, Properties info) //要一个properties对
getConnection( url, username, password) //最常用
PreparedStatement继承自Statement
Statement 1,不适合有多个参数的SQL;2,不适合重复执行同构的SQL
Statement tem = conn.createStatement();
PreparedStatement pstm = conn.prepareStatement("select * from t_user where id = ?");
pstm.setString(1, "21"); //下标从1开始
pstm.executeQuery();
CallableStatement:专用于调用服务器的存储过程
Statement里的方法:
executeQuery( sql ) 返回ResultSet
execute( sql ) 返回boolean,是否有ResultSet返回
executeUpdate( sql ) 返回int,影响的记录行数
字符转换:
java -------------> oracle:ISO-8859-1
Unicode:gb2312(GBK)
如:String name = "张三";
gb2312---->ISO-8859-1:
String newName = new String(name.getBytes("gb2312"), "ISO-8859-1");
ISO-8859-1------->gb2312:
String newName = new String(name.getBytes("ISO-8859-1"), "gb2312");
从ResultSet里面取值:
while(rs.next()){
String name = rs.getString("name");
}
关闭:
if(null != rs){
try{
rs.close();
}catch(Exception e){
}
}
statement,connection一样要先判断非空,后关闭
SQLWarning:理论上的,不影响程序执行,不用处理;
SQLException里的方法:getErrorCode:返回错误码;getMessage:返回错误信息
元数据:DatabaseMetaData,ResultSetMetaData
conn.getMetaData(); rs.getMetaData();
查看数据库中表的信息
事务处理流程:
1,关闭自动提交;2,执行操作;3,处理数据;rollback或commit;4,打开自动提交
commit不仅是原有事务的结束,也是新事务的开始。
并发控制:
事务级别:transaction_none; transaction_read_uncommitted(默认); transaction_read_committed:解决脏读dirty read
transaction_repeateable_read:解决不可重复读的问题:non_repeated read
transaction_serializable:解决幻读:phantom read
oracle只支持read_commit和serializable
例如:conn.setTransactionIsolation( Connection.TRANSACTION_READ_COMMITTED );
回滚集的问题:
CONCUR_READ_ONLY, CONCUR_UPDATEABLE:
用来指定可不可以修改数据库:
TYPE_FORWARD_ONLY 默认
TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENITIVE
用来指定Result能不能滚动
可以用refreshRow刷新当前行。
例:Statement stm = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATEABLE);
定位方法:全部返回boolean,除afterLast(), beforeFirst()复位,返回void
absolute(int row) 传输绝对定位
first(), last(), next(), previous()向前一位
relative(int ) 相对定位
isAfterLast(), isBeforeFirst(), isFirst(), isLast();
注意:指针一开始是指在第一行的前面。
可更新结果集:
rs.updateInt(1, 9911); //更新当前行
rs.updateString("name", "tony");
rs.updateRow(); //修改生效,不调用则无效
rs.absolute(10);
rs.deleteRow(); //删除第10条记录
rs.cancelRowUpdates(); //放弃修改,删除还是会生效
插入新行
rs.moveToInsertRow(); //创建一个空记录
rs.updateInt("id", 11);
rs.updateString("name", "rose");
rs.insertRow();
rs.moveToCurrentRow(); //修改生效
rs没有主键则不能插入数据,必须包含所有的无默认值的非空字段,只能查一个表,不能连接查询,查询结果必须包含主键
如果是插入的话,必须选择表中所有不能为空的列。
批量处理:batch
con.setAutoCommit(false); //关闭自动提交
Statement stm = con.createStatement();
stm.addBatch("insert into t_user(id) value(11)");
stm.addBatch(" ... ");
int[] results = stm.executeBatch(); //返回所有成功的操作结果
con.commit();
con.setAutoCommit(true); //恢复自动提交
高级数据类型:
Blob ------ SQL Blob //大二进制对象 binary large object
Clob ------ SQL Clob //大文本二进制对象character large object
Array ----- SQL Array
Struct ---- SQL structure Type
Ref ------- SQL REF
方法:getXXX, setXXX, updateXXX
步骤:1,获得数据库连接,2,向表中插入一个空的Blog字段,3,获得Blob的输出流,4,通过输入流将数据写入数据库
如:
try{
conn.setAutoCommit(false);
Blob blob = null;
PreparedStatement pstm = conn.prepareStatement("insert into t_blob(id,filename,blobData) value
(?,?,empty_blob())"); //empty_blob()函数由oracle提供,用来创建空对象
pstm.setInt(1,10);
pstm.setString(2,"d:/hello.mp3");
pstm.executeUpdate(); //插入空值
pstm.close();
pstm = conn.prepareStatement("select blobData from u_blob where filename = ? for update"); //for update
同步必须使用,只能在查询时使用
pstm.setString(1, "d:/hello.mp3");
rs = pstm.executeQuery();
if(rs.next()){
Blob b = rs.getBlob();
oracle.sql.BLOB ob = (oracle.sql.BLOB)b;
OutputStream os = ob.getBinaryOutputStream();
InputStream is = new FileInputStream("d:/hello.mp3");
byte[] buffer = new byte[4096];
int len = 0;
while(true){
len = is.read(buffer);
if(-1 == len) break;
os.write(buffer, 0, len);
}
is.close();
os.close();
conn.commit();
}
}catch(Exception e){
conn.rollback();
}finally{
}
查询:
conn.setAutoCommit(false);
pstm = conn.prepareStatement("select blobData from u_blob where name = ? for update");
rs = pstm.executeQuery();
if(rs.next()){
blob b = rs.getBlob(1);
InputStream is = b.getBinaryStream();
OutputStream os = new FileOutputStream(path);
byte[] bb = new byte[4096];
int len = 0;
while(true){
len = is.read(bb);
if(len == -1) break;
os.write(bb, 0, len);
}
}
DataSource
WebLogic:services----->JDBC---->connection pool
JNDI:java naming directory interface api
用DataSource建立connection步骤:1,获得数据库连接,2,支持连接池,3,通常可以支持JNDI,4,支持分布式事务
OID:object id:对象在数据库中的ID
OOAD:object orient analyze and design面向对象的分析与设计
ODBC:open database connectivity:开放的数据库连接
JDBC:java database connectivity:java数据库连接
JDBC驱动程序可分为4类:
1,JDBC-ODBC桥; 2,部分本地API,部分JAVA驱动程序; 3,JDBC网络纯JAVA驱动程序; 4,本地协议纯JAVA驱
动程序,这个效率最高
Driver接口:
SQLSERVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://IP:1433;数据库名,用户名,密码
MySQL:com.mysql.jdbc.Driver
jdbc:mysql://IP:3306/数据库名,用户名,密码
DB2:com.ibm.db2.jdbc.app.DB2Driver()
jdbc:db2://IP:端口/数据库名,用户名,密码
oracle:jdbc:oracle:thin:@IP:PORT,DBname,user,password
pointbase:jdbc:pointbase:server://ip:port,dbname,user,password
com.pointBase.jdbc.jdbcUniverSqlDriver
DriverManager类是驱动程序管理器类,所有方法都是静态的,一个statement对象在同一时刻只有一个打开的ResultSet对象,在
statement接口中定义的所有executeXXX()方法都隐含地关闭statement当前的ResultSet对象,如果你要执行多个查询语句,并且需
要同时对它们的结果集进行操作,那么你必须使用多个statement对象。
DataSource例子:
javax.naming.context ctx = new javax.naming.InitialContext();
//JNDI名是相对于java:comp/env上下文的,因此在程序中利用JNDI名查询数据源对象时,要加上java:comp/env/
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:comp/env/bookstore");
java.sql.Connection conn = ds.getConnection();
发表评论
-
oracle 常用语句1
2012-06-20 19:02 10161:查询时间格式为:'2005-4-30 17:50:09' ... -
oracle sql语法--摘
2012-06-20 18:59 1676upper(str)---将字符串str全部转换成大写 low ... -
Oracle数据库服务的相关知识详解-摘
2012-05-20 16:02 1169Oracle数据库的操作中, ... -
卸载和重新安装oracle
2012-05-16 12:43 1361看到很多人说卸载不干净安装不上去,就找了下相关文章,下面是转来 ... -
BLOB和CLOB的区别以及在ORALCE中的插入和查询操作-zhai
2012-04-13 13:22 1234http://blog.csdn.net/jojoy_828/ ... -
ORA-00918: column ambiguously defined
2012-04-13 12:48 1363ORA-00918: column ambiguously d ... -
sql语句实现表的行列倒置
2012-03-16 10:16 1887--数据表中行列转换 create table stuStor ... -
sql语句 between-and
2012-02-29 12:43 1304select t.norm_id,sum(t.plan_rev ... -
nvl与case when
2011-12-01 20:46 15571、不用CASE,用NVL函数即可: SELECT sid,N ... -
Oracle字符串函数--转
2011-11-14 10:48 1444这些函数全都接收的是 ... -
SQL中on条件与where条件的区别[转]
2011-11-09 12:36 1237http://www.cnblogs.com/tuyile00 ... -
oracle uuid
2011-09-16 12:06 880select sys_guid() from dual S ... -
oracle中众多的name
2011-08-19 15:58 7781、db_name数据库名 是区分数据的内部标识(即是给Ora ... -
database和instance的区别
2011-08-19 15:57 957database:数据库,一组相关的物理文件,比如数据文件、日 ... -
要学习ORALCE了
2011-08-19 15:55 7331、如果有一定的数据库基础,知道SQL是怎么回事,即使写不出来 ... -
Select Top在不同数据库中的使用用法
2011-08-12 09:37 7941. Oracle数据库 SELECT * FROM T ... -
SQL字符串函数
2011-01-17 13:09 897字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函 ... -
Oracle创建用户、表空间、导入导出、...命令
2011-01-12 11:46 888//创建临时表空 ... -
oracle 临时表空间 和数据表空间
2011-01-11 13:17 1677Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时 ... -
Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
2011-01-11 13:03 3500Oracle数据导入导出imp/exp就相当于oracle数据 ...
相关推荐
少儿编程scratch项目源代码文件案例素材-和朋友们一起跳伞.zip
少儿编程scratch项目源代码文件案例素材-掉箱子.zip
少儿编程scratch项目源代码文件案例素材-格斗.zip
内容概要:本文详细介绍了三种主流的深度强化学习算法-DDPG、TD3和SAC在机器人控制领域的应用,特别是在MuJoCo仿真环境中的实现细节。首先解释了每个算法的基本原理及其独特之处,如DDPG的确定性策略生成器、TD3的双Critic网络以及SAC的熵最大化机制。接着深入探讨了这些算法的具体代码实现,包括Actor和Critic网络的设计、损失函数的构建以及一些实用的调参技巧。此外,还分享了许多实战经验和常见陷阱,如正确处理done信号、添加动作变化量惩罚项、观测空间的归一化等。 适合人群:对深度强化学习有一定了解并希望深入了解其在机器人控制领域应用的研究人员和技术爱好者。 使用场景及目标:帮助读者掌握如何将DDPG、TD3和SAC应用于具体的机器人控制任务中,提高算法性能,解决实际问题。同时,也为进一步研究提供了宝贵的实践经验。 其他说明:文中不仅提供了详细的理论讲解,还附带了大量的代码片段,便于读者理解和实践。对于想要深入理解这些算法内部运作机制的人来说,是一份不可多得的学习资料。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
少儿编程scratch项目源代码文件案例素材-地图制作器.zip
【资源说明】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 本文介绍了基于QEM(Quadric Error Metrics,二次误差度量)的优化网格简化算法的C和C++实现源码及其相关文档。这一算法主要应用于计算机图形学领域,用于优化三维模型的多边形数量,使之在保持原有模型特征的前提下实现简化。简化的目的是为了提高渲染速度,减少计算资源消耗,以及便于网络传输等。 本项目的核心是网格简化算法的实现,而QEM作为该算法的核心,是一种衡量简化误差的数学方法。通过计算每个顶点的二次误差矩阵来评估简化操作的误差,并以此来指导网格简化过程。QEM算法因其高效性和准确性在计算机图形学中广泛应用,尤其在实时渲染和三维打印领域。 项目代码包含C和C++两种语言版本,这意味着它可以在多种开发环境中运行,增加了其适用范围。对于计算机相关专业的学生、教师和行业从业者来说,这个项目提供了丰富的学习和实践机会。无论是作为学习编程的入门材料,还是作为深入研究计算机图形学的项目,该项目都具有实用价值。 此外,项目包含的论文文档为理解网格简化算法提供了理论基础。论文详细介绍了QEM算法的原理、实施步骤以及与其他算法的对比分析。这不仅有助于加深对算法的理解,也为那些希望将算法应用于自己研究领域的人员提供了参考资料。 资源说明文档强调了项目的稳定性和可靠性,并鼓励用户在使用过程中提出问题或建议,以便不断地优化和完善项目。文档还提醒用户注意查看,以获取使用该项目的所有必要信息。 项目的文件名称列表中包含了加水印的论文文档、资源说明文件和实际的项目代码目录,后者位于名为Mesh-Simplification-master的目录下。用户可以将这些资源用于多种教学和研究目的,包括课程设计、毕业设计、项目立项演示等。 这个项目是一个宝贵的资源,它不仅提供了一个成熟的技术实现,而且为进一步的研究和学习提供了坚实的基础。它鼓励用户探索和扩展,以期在计算机图形学领域中取得更深入的研究成果。
【资源说明】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 本文介绍了基于QEM(Quadric Error Metrics,二次误差度量)的优化网格简化算法的C和C++实现源码及其相关文档。这一算法主要应用于计算机图形学领域,用于优化三维模型的多边形数量,使之在保持原有模型特征的前提下实现简化。简化的目的是为了提高渲染速度,减少计算资源消耗,以及便于网络传输等。 本项目的核心是网格简化算法的实现,而QEM作为该算法的核心,是一种衡量简化误差的数学方法。通过计算每个顶点的二次误差矩阵来评估简化操作的误差,并以此来指导网格简化过程。QEM算法因其高效性和准确性在计算机图形学中广泛应用,尤其在实时渲染和三维打印领域。 项目代码包含C和C++两种语言版本,这意味着它可以在多种开发环境中运行,增加了其适用范围。对于计算机相关专业的学生、教师和行业从业者来说,这个项目提供了丰富的学习和实践机会。无论是作为学习编程的入门材料,还是作为深入研究计算机图形学的项目,该项目都具有实用价值。 此外,项目包含的论文文档为理解网格简化算法提供了理论基础。论文详细介绍了QEM算法的原理、实施步骤以及与其他算法的对比分析。这不仅有助于加深对算法的理解,也为那些希望将算法应用于自己研究领域的人员提供了参考资料。 资源说明文档强调了项目的稳定性和可靠性,并鼓励用户在使用过程中提出问题或建议,以便不断地优化和完善项目。文档还提醒用户注意查看,以获取使用该项目的所有必要信息。 项目的文件名称列表中包含了加水印的论文文档、资源说明文件和实际的项目代码目录,后者位于名为Mesh-Simplification-master的目录下。用户可以将这些资源用于多种教学和研究目的,包括课程设计、毕业设计、项目立项演示等。 这个项目是一个宝贵的资源,它不仅提供了一个成熟的技术实现,而且为进一步的研究和学习提供了坚实的基础。它鼓励用户探索和扩展,以期在计算机图形学领域中取得更深入的研究成果。
少儿编程scratch项目源代码文件案例素材-鸽子飞行模拟器.zip
少儿编程scratch项目源代码文件案例素材-仿作马里奥冒险.zip
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
内容概要:本文详细介绍了如何利用Carsim和Simulink进行线控转向系统的联合仿真。首先解释了线控转向系统的基本概念及其重要性,特别是在自动驾驶领域的应用前景。接着阐述了Carsim和Simulink的集成方法,包括环境配置、模型对接、S函数接口的具体实现步骤以及注意事项。文中还提供了转向控制算法的实例,如PID控制器的设计思路和参数选择依据,并强调了数据同步的重要性,分享了一些实用的小技巧,如通过XY Graph监测转向性能、确保仿真步长的一致性等。最后指出,这套仿真平台非常适合用于验证各种高级驾驶辅助系统的控制算法,能够显著提高开发效率并降低成本。 适合人群:汽车电子工程师、自动驾驶研究人员、控制系统开发者。 使用场景及目标:适用于需要快速迭代和验证线控转向及相关自动驾驶控制算法的研发阶段,帮助工程师们在虚拟环境中完成大量实验,减少实物测试的风险和成本。 其他说明:文中提到的技术细节对于理解和实施线控转向系统的联合仿真非常关键,尤其是关于数据同步和控制算法优化的部分。此外,作者还分享了许多个人经验教训,有助于避免常见的错误和技术陷阱。
内容概要:本文详细介绍了如何使用LabVIEW与ABB设备进行集成,主要涉及通过OPC UA协议获取ABB设备的日志、设备信息、速度及状态等关键数据。文中提供了具体的LabVIEW代码示例,涵盖了通信配置、数据解析、状态监测、日志抓取等多个方面。此外,还分享了许多实际操作中的经验和技巧,如TCP/IP通信、JSON数据处理、错误处理机制以及数据可视化的最佳实践。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些熟悉LabVIEW并希望深入了解ABB设备集成的人群。 使用场景及目标:适用于需要对ABB设备进行实时监控和数据分析的工程项目。具体目标包括:① 实现与ABB设备的高效通信;② 获取并解析设备的关键数据;③ 监控设备状态并记录日志;④ 提升系统的可靠性和稳定性。 其他说明:本文不仅提供理论指导,还结合了大量的实战案例和代码片段,帮助读者更好地理解和应用相关技术。
毕业设计-基于JavaSE实现魂动罗小游戏 1. Demo简介 本demo仿制了一个魂斗罗小游戏,纯JavaSE实现。 [image] 1.1 技术应用 ● 键盘控制 ● 图片显示 ● 音频播放 ● 多线程控制 2. demo使用 拿到源码后进入MainFrame主类中运行: public static void main(String[] args) { new Thread(new MainFrame()).start(); } [image] 按照右侧使用说明控制,无限生命。 3. 总结 简单的JavaSE小demo,需要练手的同学拿去看看。 [image]
内容概要:本文详细介绍了如何使用西门子PLC(如S7-1200/1500)通过Modbus协议与第三方仪表进行数据读写。主要内容涵盖硬件接线、Modbus库函数的正确使用、常见错误及其解决方法、性能优化技巧以及调试建议。文中强调了地址转换、字节顺序、超时设置等方面的具体操作和注意事项,并提供了多个代码示例来帮助理解和实施。 适合人群:从事工业自动化领域的工程师和技术人员,特别是那些需要将西门子PLC与其他品牌仪表集成在一起工作的专业人士。 使用场景及目标:适用于需要在工业环境中实现PLC与各种传感器、变送器和其他智能设备之间的可靠通信的场合。目标是确保数据传输的准确性、稳定性和效率,减少调试时间和成本。 其他说明:作者分享了许多基于实际项目的宝贵经验教训,提醒读者注意一些容易忽视但可能导致严重问题的小细节。此外,还提供了一些实用工具和方法用于辅助开发和维护工作。
内容概要:本文详细介绍了使用MATLAB模拟8DPSK(八进制差分相移键控)信号在AWGN(加性白高斯噪声)信道下的误码率(BER)和误比特率(SER)性能。文中通过具体代码展示了从生成随机二进制序列、调制、加入噪声、解调到最后计算误码率的完整流程,并将仿真结果与理论值进行了对比。同时,文章还讨论了一些常见的陷阱和技术要点,如相位偏移、格雷编码的应用以及信噪比(Eb/N0)的正确转换方法。 适合人群:具有一定MATLAB编程基础和数字通信基础知识的研究人员、工程师和学生。 使用场景及目标:适用于希望深入了解8DPSK调制特性及其在AWGN信道中性能的人群。通过本实验,读者能够掌握8DPSK的基本原理、MATLAB仿真技巧以及误码率分析的方法。 其他说明:文章提供了详细的代码片段和解释,帮助读者更好地理解和复现实验结果。此外,还提到了一些提高仿真实验效率的小技巧,如使用并行计算加速仿真过程。
少儿编程scratch项目源代码文件案例素材-赌注和梯子.zip
内容概要:本文详细介绍了如何利用信捷XD5控制器和威纶触摸屏编写高效的六轴机械手控制程序。主要内容涵盖系统概述、程序编写步骤、代码分析、实际应用效果等方面。文中强调了系统的初始化、通信参数配置、运动控制、调试日志输出等关键功能模块的设计思路和技术要点。此外,还展示了程序的实际应用案例及其优势,如高可靠性、操作便捷性和良好的扩展性。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对六轴机械手控制系统感兴趣的读者。 使用场景及目标:①掌握信捷XD5控制器和威纶触摸屏的联合使用方法;②理解六轴机械手控制程序的编写流程和关键技术;③提高六轴机械手在实际生产中的稳定性和效率。 其他说明:本文不仅提供了详细的代码示例和注释,还分享了许多实际应用中的经验和技巧,有助于读者更好地理解和应用相关技术。
内容概要:本文详细介绍了C#工业自动化通信开发库的强大功能及其应用。该库提供了丰富的通信类型,包括串口通信、TCP/IP、UDP、CAN总线、Profinet、Modbus、PLC通信、OPC UA/DA、HTTP、数据库操作、INI文件操作、Excel表格操作、RabbitMQ消息队列管理和常用数据转换等功能。此外,库还在持续更新,增加了诸如高并发物联网接收服务器端、DTU服务器、EF6+多类型数据库支持、OPC DA的DCOM组件封装等新特性。文中通过具体代码示例展示了各个功能的实际使用方法,并强调了库在工业自动化领域的实用性。 适合人群:从事工业自动化软件开发的技术人员,尤其是熟悉C#编程语言的开发者。 使用场景及目标:适用于需要处理多种工业设备通信协议和数据库操作的项目。主要目标是提高开发效率,减少重复劳动,确保通信和数据处理的可靠性。 其他说明:该库不仅提供了丰富的功能,而且在性能优化、错误处理等方面也有出色表现。例如,自动处理CRC校验、智能重连机制、环形缓冲区设计等特性使得开发更加便捷和稳定。
内容概要:本文详细介绍了FX3U与三菱伺服控制框架的标准程序及其应用,特别针对新手提供了全面的入门指南。主要内容涵盖公共参数设定、回原点操作、JOG手动模式、绝对定位和相对定位的具体实现方式,并附有详细的代码示例。同时,文章还深入讲解了伺服驱动器的针脚接线方法,确保硬件连接无误。通过这些内容,新手能够系统地理解和掌握定位控制的基本原理和技术要点。 适合人群:初学者和有一定经验的自动化控制工程师,尤其是希望深入了解FX3U与三菱伺服控制系统的人员。 使用场景及目标:适用于工业自动化领域的定位控制系统开发和维护。主要目标是帮助读者快速上手并熟练掌握FX3U与三菱伺服控制的技术细节,提高工作效率和系统稳定性。 其他说明:文中不仅提供理论知识,还有大量实用的操作技巧和注意事项,如参数设置的最佳实践、常见错误避免等,有助于读者在实际项目中少走弯路。