重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、采用insert into values 语句插入一条,写很多条语句即可多条数据,这种主要针对于离散值以及一些基础信息的录入,如:insert into test(xh,mc) values('123','测试');
站在用户的角度思考问题,与客户深入沟通,找到东源网站设计与东源网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网站空间、企业邮箱。业务覆盖东源地区。
如果插入的数据有规律,可利用for、loop循环插入,主要用于批量生成测试数据
begin
for i in 1 .. 100 loop
insert into test(xh,mc) values(i||'','测试');
end loop;
end ;。
2、采用insert into selct from 语句来一次性插入一个集合,这种主要依据于要插入的数据源已经存储于数据库对象中,或者利用dual虚表来构造数据,经过加工后写入一个集合。
insert into test (xh,mx) select '123','测试' from dual;
3、采用plsql等工具、或者oracle的imp、impdp命令来导入,这种主要用数据库与数据库之间的大批量数据导入,导入的数据格式为plsql的pde、oracle的dmp等。dmp文件可使用
table_exists_action参数控制导入动作:replace替换原表,truncate清除原表数据再导入,append增量导入数据,当然impdp数据泵的导入要依赖于directory路径。
impdp 用户名/密码 dumpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append
4、使用excel文件直接拷贝。这种主要用于要写入的数据已是excel文件或者行列分明的其它格式文件,每一列的值和表结构相对应,可直接打开表的行级锁,把数据拷贝进入。
打开行级锁方法:
select t.*,rowid from 表名 t where 1=2;
select * from 表名 where 1=2 for update;
直接把excel数据拷贝到表里
你这样 如果要插入的字符串中有单引号, 那么就需要skip掉。
先用个简单的例子, 比如你要显示 I'm 27 years old 作为字符串。
那么:
select 'I''m 27 yrs old' from dual; -- 这里看好: 最外层2个 单引号是说明后面是字符串。
里面的内容变成了 I''m ..... 用了2个单引号。 第一个是表示“跳过”, 而不作为整个字符串的结尾。 第二个是真的内容。
所以, 你如果要插入以上的SQL整个句子作为字符串,
那么就:
insert into tableT (testcolumn)
values (' select * from abc where a=''ab'' and b=''aa'' and c=''aa''');
每个单引号前面加上一个单引号“跳过” 而不进行字符串结尾处理。
insert into tonglu.tb_putoutconfirm(transfer_type,package_num,handledby,username,tms_service_code,batch,weight)values(?,?,?,?,?,tonglu.batch_seq.nextval,?);
按位置对应一下,batch在段在倒数第二位,所以那个地方直接引用序列
其他你该怎么传参数还怎么传参数
工具/材料:电脑,oracle数据库表
1.例test表中有如下数据。
2.插入一条id为6,name为杨七的数据。insert into testvalues (6,'杨七');commit。
3.向表中复制一条目前表中id为1的数据,可用如下语句:insert into test select * from test where id=1;commit;在执行insert语句后,必须提交,即commit,否则不成功。
我们在SQL*PLUS下执行 SQL show all命令时,可以发现一个参数:define (hex 26),如下所示 concat . (hex 2e) copycommit 0 copytypecheck ON define (hex 26) describe DEPTH 1 LINENUM OFF INDENT OFFecho OFF 这个是Oracle里面用来识别自定义变量的设置,现在我们在SQL*PLUS下将其关闭: SQL Set define OFF; 然后再次执行导入脚本,OK!问题搞定。 注意:如果是在TOAD中执行,建议在每一个要导入的脚本第一行加上前面那句关闭define的话,否则当你导入第二个含有特殊字符的脚本的时候,又会出错。 如果是在SQL*PLUS中执行,则只需要设置一次define OFF,后面就可以连续导入了。直到你重新设置define ON为止。 ·方法二:在SQL语句中将''替换成chr(38),因为chr(38)是‘’的ASCII码 SQL Select 'Tom' || chr(38) || 'Jerry' from dual; ·方法三:分拆原来的字符串 SQL Select 'Tom' || '' || 'Jerry' from dual; 我们可以看到,方法一最为简便,而且效率也最高。方法二因为有一个调用函数的过程,所以性能稍差。方法三需要两次连接字符串,效率最差! ·方法一:使用转义字符 SQL Select 'test' || '''' from dual; 第三个'才是我们真正的内容 ·方法二:同样是使用转义字符,只不过方式不同而已 SQL Select 'test ''' from dual; 注意:这里的第二个,第三个'就是我们上面方法一中提到的转义符和真正的内容
首先要理解一下PreparedStatement,是具有预编译功能的,也就是说他会先编译成一个固定的格式,然后后面设置的就不需要再一次编译,节省了编译过程,建议看一下PreparedStatement
这个类的详细说明。
你这个sql明显是错的。
String rsIns = "insert into test values (id)";
这个建议把sql写完整,这样就不会乱,也不会错。
比如只想插入id那么要把id声明一下,如果不写那就默认要插入所有的字段,你这里就没有生命,然后只插入id,肯定是错的。
正确写法一
String rsIns = "insert into test(id) values (“+id+”)";
try {
PreparedStatement p = conn.prepareStatement(rsIns);
p.excuteUpdate(rsIns);
} catch (Exception e) {
// TODO: handle exception
/ 释放资源操作
};
写法二
String rsIns = "insert into test(id) values (?)";
try {
PreparedStatement p = conn.prepareStatement(rsIns);
p.setInt(1, id);
p.excuteUpdate(rsIns);
} catch (Exception e) {
// TODO: handle exception
// 释放资源操作
};
PS:
setInt和setString方法里边的参数具体都是什么意思?
这里只有第二中需要setInt或者setXXX操作。具体的意思就是比如
p.setInt(1, id);
第一个参数是顺序号,也就是第几个问号。这里的sql
String rsIns = "insert into test(id) values (?)";
只有一个问号,那么序号就是1,第二个参数就是这个问号的值,比如这个sql中的问号其实就是要传的id
又比如String sql = "insert into user(id, name) values (?,?)";
这里要设置的话
第一个问号代表的是id,而且是int类型的那么就有
p.setInt(1,id);
第二个问号代表的是name,而且是String类型的那么就有
p.setString(2,name);
不知道这么说明白了么?不明白可以再问。