java web数据库操作(1)
这是一篇java web数据库操作的基础笔记,数据库为MySQL,使用用途为方便复习。
MySQL数据库软件
安装
卸载
MySQL安装目录my.ini文件,复制 datadir=“C:/ProgramData/MySQL Server 5.5/Data/”,当卸载MySQL后,删除C:/ProgramData(隐藏)目录下MySQL文件夹。
配置
(1)MySQL服务的启动,可在电脑右键——打开属性——打开服务——启动MySQL。
(2)cmd——services.msc 打开服务窗口
(3)使用管理员打开cmd
net start mysql:启动mysql服务
net stop mysql:关闭mysql服务
JDBC
概念
Java DataBase Connectivity Java 数据库连接
本质
其实是官方公司(SUN)定义的一套操作所有关系型数据库的规则(接口),由各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口编程(JDBC),真正执行的代码是驱动jar包里的实现类。
详解各个对象
1.DriverManager:驱动管理对象
(1)驱动注册:告诉程序使用哪一个数据库驱动
static void registerDriver(Driver driver) 注册给定的驱动程序DriverManager
写代码时最好使用:Class.forName(“com.mysql.jdbc.Driver”);
通过查看源码发现,在com.mysql.jdbc.Driver中有静态代码块,所以可以直接使用。
静态代码块
static {
try {
java. sql .DriverManager . registerDriver(new Driver());
} catch (SQLException E) {
throw new Runt imeException("Can't register driver!");
}
}
(2)获取数据库连接
static Connection getConnection(String url)
static Connection getConnection(String url, Properties info)
info - 作为连接参数的任意字符串标记/值对的列表;通常至少应该包括 “user” 和 “password” 属性 。
static Connection getConnection(String url, String user, String password)
参数:
url:指定连接路径
jdbc:mysql://ip地址(域名):端口号/数据库名称
例如:jdbc:mysql://localhost:3306/db3
如果连接的是本机mysql服务器,并且mysql服务器默认端口号为3306,则url可简写为jdbc:mysql:///数据库名称
2.Connection:数据库连接对象
(1)获取执行sql对象
创建一个 Statement 对象来将 SQL 语句发送到数据库。
Statement createStatement()
创建向数据库发送预编译 SQL 语句的 PrepareStatement 对象。
PreparedStatement prepareStatement(String sql)
(2)管理事务
开启事物:setAutoCommit(boolean autoCommit) 参数为false开启事物
提交事物:commit()
回滚事物:rollback()
3.Statement:执行sql对象
执行sql
boolean execute(String sql)
执行给定的任意 SQL 语句,该语句可能返回多个结果。
int executeUpdate(String sql)
执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句
返回数据库中信息改变行数
ResultSet executeQuery(String sql)
执行SELECT语句,该语句返回单个 ResultSet 结果集对象。
4.PrepareStatement:执行sql对象
推荐使用
拥有Statement接口中方法。
使用PreparedStatement接口发送的SQL语句,可以带有参数(使用占位符“?”表示或代替这些参数),然后使用setXXX()方法对其进行赋值。
使用PreparedStatement接口,不仅可以提高SQL语句的执行效率,而且还可避免SQL语句的注入式攻击。
注入式攻击:SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
提高效率:Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
5.ResultSet :结果集对象
采用的类似于表格的方式,封装了查询的结果集
用指向表格数据行的游标cursor,最初游标在第一行之前,调用next() 方法,可使游标指向具体的数据行;
进而调用getXXX()方法获取该行各个字段的值。
JDBC访问数据库流程
(1)加载或注册数据库驱动
(2)连接数据库——建立连接(获得connection对象)
(3)创建数据库操作对象——Statement对象
(4)执行sql语句
(5)获得并处理结果(ResultSet对象)
(6)释放资源
Statement stmt = null;//将对象放到这里,避免在try块里的stmt无法资源释放,try和catch不在同一作用域
Connection conn = null;
try{
//1.加载和注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql://IP地址(域名):端口号/数据库名称", user, password);
//3.获取sql对象Statement
String sql = "这里写数据库语言 ";
stmt = conn.createStatement();
//4.执行sql
int i = stmt.executeUpdate(sql);
//5.处理结果
System.out.println(i);
if(i > 0){
System.out.println("操作成功!");
}else{
System.out.println("操作失败!");
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
//6.释放资源
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}