Connection对象
获得Connection对象:
方式一:通过DriverManager的静态方法getConnection()
DriverManager.getConnection(String dburl,user,password)
方式二:通过DataSource对象的方法getConnection()
数据库URL(dburl)
组成:jdbc:<subprotocal>:<subname>
jdbc:协议,是个固定值
subprotocal:子协议(值是 mysql 或 oracle …)
subname:数据库标识符
Statement对象->SQL语句对象
得到连接对象后就可以调用该对象的createStatement()创建SQL语句对象
执行查询语句
public ResultSet executeQuery(String sql)
执行非查询语句(insert delete update 或者DDL)
public int executeUpdate(String dql)
PreparedStatement对象
引出:解决Statement对象执行同一条语句效率低的问题
PreparedStatement对象将会对sql语句传给数据库时进行预编译
preparedStatement对象可以创建带参数的SQL语句,在SQL语句中指出接受哪些参数,然后进行预编译.
创建preparedStatement对象
public PreparedStatement prepareStatement(String sql)
该对象的SQL命令是传递给其构造方法,而不是execute() 这个对象返回的ResultSet是只能向前滚动的结果集
特点
SQL字符串可以包含一些参数,这些参数通过?
作占位符,在SQL语句执行时进行替换
示例:
String str = "insert into 表名 values(?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
注意:四个问号 分别对应索引为1 2 3 4,等下设置值时需要用到
在执行SQL语句之前需要用数据替换占位符(否则抛出异常)
pstmt.setString(1,'105');
pstmt.setString(2,'iPhone5手机');
pstmt.setDouble(3,'1490.00');
pstmt.setInt(4,5);
设置空值
public void setNull(占位符索引,intType)
执行预处理语句
查询使用 executeQuery()
ResultSet result = pstmt.executeQuery();
更新使用:int n = executeUpdate();
其他使用boolea b = pstmt.execute();
DataSource(数据源)
介绍:事先建立若干连接对象,将它们存放在数据库,连接池中供数据访问组件共享,避免为每个HTTP请求都创建一个连接对象
连接池预定义了一些连接,当应用程序需要连接对象时,就从连接池中取出,使用完毕再放回连接池
使用数据源注意!!!
我使用的是IDEA开发工具 没有META-INF目录 所以需要设置添加:
点击全选部分,然后选择Tomcat Server
即可,然后在i项目中就会有META-INF目录
然后该目录下就会有context.xml
然后再该文件书写配置文件即可
配置数据源
配置局部数据源
在META-INF下面新建一个context.xml文件
内容为:
<? xml version="1.0" encoding="utf-8"?>
<Context reloadable="ture">
<Resource
name:"jdbc/webstoreDS"
type="javax.sql.DataSource"
MaxTotal="4"
MaxIdle="2"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/数据库名?seSSL=true"
username="用户名"
password="密码"
maxWaitMillis="5000"
/>
</Context>
使用数据源
Context context = new InitidContext();
DataSource dataSource = (DataSource)context.lookup("java:comp/env/dabc/webstoreDS")
ResultSet对象
select语句查询得到的记录集合(一般是一个记录表)
记录行从1
开始
一个Statement对象一个时刻只能打开一个ResultSet对象
对结果集进行遍历
通过ResultSet对象的next()
方法将游标定位到下一条记录
public boolean next() throws SQLException
返回ture
表示新行是有效行 返回false
表示记录表已经无记录