package it.cast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
import com.mysql.jdbc.Driver;
public class jdbctest {
@Test
public void demo1() throws ClassNotFoundException{
try {
//DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/day13", "root", "1367356");
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from users");
while(rs.next()){
System.out.println(rs.getString("name"));
System.out.println(rs.getString("email"));
}
conn.close();
rs.close();
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
1,driverManager 驱动管理器
DriverManager.registerDriver(new Driver());
DriverManager.getConnection(“jdbc:mysql://localhost:3306/day13”(url标示数据库位置,可以通过url标示驱动), “root”, “password”);
在实际开发中我们不会直接写 DriverManager.registerDriver(new Driver());
只需要编写Class.forName(“com.mysql.jdbc.Driver”);
原因1:如果直接写DriverManager.registerDriver(new Driver());会导致驱动加载两次,因为mysql默认加载了Driver,
原因2:如果使用了new Driver,会使java程序会依赖具体的API,因为加载new driver(),需要引具体的包。
在JDBC编程时,不需要import具体数据库驱动,都import,java.sql,javax.sql;
2数据库URL
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/day13”, “root”, “1367356”);
连接任何数据库,需要些jdbcurl
MYSQL URL jdbc:mysql://localhost:3306/day13(day13数据库名称)
Oracle写法:jdbc:oracle:thin:@localhost:1521:sid(sid数据库名称)
编写jdbc程序时,数据库程序不同:user,driverclass,url,lpassword不同
JDBC连接MySQL简写,如果使用localhost:3306,可以省略, jdbc:mysql:///day13
**常用属性:**useUnicode=true&charaterEncoding=UTF-8
jdbc:mysql:///day13?useUnicode-true&charaterEncoding-UTF-8参数拼接在URL后面,用来指定客户端与服务器连接使用的字符集。
当客户端的编码与服务器端编码不同,通过参数设置编码
例如:客户端GBK,服务器utf-8——useUnicode-true&charaterEncoding=gbk(客户端字符集)
3,connection接口—————jdbc 连接表示接口
connection接口一个对象,代表一个数据库连接
作用两点:
1,获得操作数据库statement对象
createstment()—statement 获得普通操作状态对象
preparedstatement(string sql)—preparedstatement(是statement子接口)预编译状态对象
preparecall(String sql)—callablestatement(preparedstatement 子接口)操作数据库内部的存储过程
statement对象可以向数据库发送sql语句,获得resultset结果集
2,进行事务控制
setautocommit(boolean);开启一个事务
commit();提交一个事务
rollback();回滚一个事务
4:Statement 接口—代表一个操作状态
作用:操作数据库sql语句,调用存储过程
executequery(string sql)用于向数据库发送查询语句。select语句返回resultset结果集
executeupdate(string sql)用于向数据库发insert,update,delete语句, 返回受印象的行数,返回int类型。
execute(string sql)用于向数据库发送任何指令,返回值boolean型
如果sql结果是resultSET返回true,否则返回false
addbatch(string sql);把多条sql语句放到一个批处理中
executebatch();向数据库发送一批sql语句执行。
5:可滚动结果集—创建statement时设置结果集的可滚动性
createstatement(int resultsettype,int resultsetconcurrency)
resultsettype–结果集类型,它是
resultset.type_forward_only,只支持next
resultset.type_scoll_insensitive,无法看到更改后的数据
resultset.type_scoll_sensitive,看到更改后的数据
resultsetconcurrency-并发类型;它是
resultset.concur_read_only 只读
和resultset.concur_updateable可修改