时间:2021-07-01 10:21:17 帮助过:25人阅读
PrepareStatement是Statement子类 支持占位符?
批量插入时 性能更好 效率更高
防止SQL注入,更安全
代码不同:
Statement:
//将sql语句添加至批处理命令中
a、 statement.addBatch(sql);
//执行批处理
b、statement.executeBatch();
//清空批处理命令
c、statement.clearBatch();
PreparedStatement:
//将sql语句添加至批处理
a、pstm.addBacth(); 注意此处不需要传入sql语句,因为在获取集装箱(PreparedStatement)的时候已将sql
语句传入
//执行批处理
b、 pstm.executeBatch();
//清空批处理命令
c、pstm.clearBatch();
数据库连接池:优化项目的性能
现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。
通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
也有一些开源组织提供了数据源的独立实现:
DBCP 数据库连接池(tomcat)
C3P0 数据库连接池(hibernate)
//获取数据源
BasicDataSource basicDataSource = new BasicDataSource();
//设置连接地址
basicDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/bookapp");
//最大活动数
basicDataSource.setMaxActive(3);
//设置最大保存数
basicDataSource.setMaxIdle(3);
//超时等待时间 单位毫秒
basicDataSource.setMaxWait(5000);
//设置用户名
basicDataSource.setUsername("root");
//设置密码
basicDataSource.setPassword("root");
//获取连接
Connection con = basicDataSource.getConnection();
实际开发中我们可以web服务器来配置数据源
找到server中的context.xml文件
<Resource name="jdbc/shop_app" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/bank"/>
代码初始化数据源
static{
try {
InitialContext context = new InitialContext();
//通过context的lookup方法来检索JNDI容器中的DataSource资源名来进行检索 注意:在检索的时候需要加上web容器的对应的资源前缀 tomcat容器的前缀:java:/comp/env
dataSource = (DataSource)context.lookup("java:/comp/env/jdbc/bookapp");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
元数据
try {
con = ConnectionFactory.getConnection();
String sql = "select * from tb_user";
//获取集装箱
pstm = con.prepareStatement(sql);
rs = pstm.executeQuery();
//获取元数据(该数据中包含,表中列的数量,列类型、列名称)
ResultSetMetaData metaData = rs.getMetaData();
//获取列的数量
int column = metaData.getColumnCount();
System.out.println("得到列的数量:"+column);
//遍历结果集
rs.next();
for(int i=1;i<=column;i++){
//获取列名
String name = metaData.getColumnName(i);
//获取数据类型
String type = metaData.getColumnTypeName(i);
//根据列名获取数据
Object object = rs.getObject(name);
System.out.println("列名:"+name+"类的类型:"+type+" 得到的数据:"+object);
}
}
JDBC数据批处理
标签:clear 关闭 from 注意 led 项目 text 依赖 my.ini