同一套Java代码,操作不同的关系型数据库
Java:定义jdbc接口,我就定义sql操作,增删改查,创建等。。接口。具体如何实现我不管,交给其他数据库公司
其他数据库公司,做实现,方法里具体如何操作数据库,也可以喊数据库驱动
用户——>java——>不同的数据库实现
注册驱动
说明我们要使用哪个数据库的驱动?
Class.forName(“com.mysql.jdbc.Driver”);
获取连接
Connection conn = DriverManager.getConnection(url, username, password);
创建执行SQL的对象
Statement stmt = conn.createStatement();
执行
String sql =“select. …” ;
stmt.executeUpdate(sql);
返回resulted,处理结果,然后逐步关闭resulted,statement,connection
驱动管理类:注册驱动,创建连接
执行SQL,管理事务
statement 普通执行sql对象
preparedstatement预编译SQL的执行对象(防SQL注入)
Callablestatement 执行存储过程的对象
事物管理:
setAutoCommit(真)真为自动提交事务,否为手动提交事物
commit()提交
rollback()回滚
将多句sql作为一个事物,批处理
就三种
execute:增
executeUpdate:删,改
executeQuery:查
next()
游标下移,若存在数据返回true,否则false
移动后当前行是否有数据
getxxx()
int :列号1~n
String:列名
预编译:pstmt=conn.prepareStatement(sql);
在执行完这句后,已经被预编译了,只需要等参数就可以,很快
在MySQL配置文件中配置(ini),然后重启
log-output=FILEgeneral-log=1
general_log_file="D:\mysql.log"slow-query-log=1
slow_query_log_file="D: \mysql_slow.log"long_query_time=2
在连接的URL后面加上useServerPrepStmts=true,以开启预编译
继承自statement
// 将参数用?替代,作为占位符,检查?中是否有sql语句
String sql= "select* from user where username=?;";
PreparedStatement
// 已经在执行sql,在检查和编译,就等着参数
pstmt=conn.prepareStatement(sql);
// 设置第一个问号的值为11234
pstmt.setString(1,"11234");
// 查询
pstmt.executeQuery();
预编译,把敏感字符进行转义,达到sql失效
德鲁伊连接池