ql语句
2.性能不够
}
第二种实现方式{
// 定义sql语句
String sql = "insert into testBatch(id,name) values( , )";
// 获取PreparedStatement对象
PreparedStatement st = conn.prepareStatement(sql);
//// 替换占位符,第一个sql,存到list中
// st.setString(1, "1");
// st.setString(2, "aaa");
// st.addBatch();
//// 替换占位符,第二个sql,存到list中
// st.setString(1, "2");
// st.setString(2, "bbb");
// st.addBatch();
//例:
for(int i=0; i<10; i++){
st.setString(1, ""+i);
st.setString(2, "aa"+i);
st.addBatch();
}
// 执行
st.executeBatch();
// 清除
st.clearBatch();
1.只能发送相同sql语句,比较适合作为批量插入或批量更新
2.预先编译,提升性能
}
//如果批处理的语句过多,可能造成内存溢出:使用下列处理方法
for(int i=0; i<100000; i++){
st.setString(1, ""+i);
st.setString(2, "aa"+i);
st.addBatch();
// 每次处理1000条sql语句
if(i%1000==0){
st.executeBatch();
st.clearBatch();
}
}
// 以防sql语句未执行
st.executeBatch();
// 清除
st.clearBatch();
}
存储过程{
该对象作用:
1.相当于数据库的一个方法,在数据库中处理数据,然后再java程序中直接获取数据
2.没有该对象就需要使用jdbc调用来处理数据
3.一般都用在金融证券领域,都内部写了存储过程,程序员直接调用。
4.存储过程中一般在参数中指定了输入数据,和输出数据
用法:
1.先在数据库中注册一个存储过程

2.在java程序中使用
// 获取连接,通过数据库的方法,先得到一个数据,处理后再输出
Connection conn = JdbcUtils.getConnection();
// 用存储过程名来获取存储过程的对象
CallableStatement st = conn.prepareCall("{call demoSp( , )}");//通过demoSp这个名字调用存储过程
// 替换占位符
//输入的数据
st.setString(1, "aaa");
//输出的数据,提供输出的类型
st.registerOutParameter(2, Types.VARCHAR);//Types封装了数据库中常用类型
st.execute();
// 通过第二个?获得数据,并且它已经指定了数据类型
st.getString(2);
问题:1.只知道存储过程在java程序中的输入,输出关系。不知道会对数据库造成怎样的影响 2.不知道怎么编写存储过程
}