详解各个对象
DriverManager
驱动管理对象
功能:
1.注册驱动:
静态方法:static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager 。
*使用:Class.forName("com.mysql.jdbc.Driver");
//Driver中的一个静态代码块 static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
2.获取数据库连接:
静态方法: static Connection getConnection (String url, String user, String password) 尝试建立与给定数据库URL的连接。
参数:url:指定连接的路径;语法:jdbc:mysql://IP地址:端口号/数据库名称;
user:用户名; password:密码;
Connection
数据库连接对象
功能:
1.获取执行sql对象:
Statement createStatement() 创建一个 Statement对象,用于将SQL语句发送到数据库。
PreparedStatement prepareStatement(String sql)
创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
2.管理事务:
1.开启事务:setAutoCommit (boolean autoCommit) ;将参数设置为false,即开启事务;
2.提交事务:commit();
3.回滚事务:rollback();
Statement
执行sql的对象(静态)
1.执行sql: 1.boolean excute(String sql):可以执行的任意sql;
2.int excuteUpdate(String sql):执行DML、DCL语句;
返回值:受到影响的行数(可以根据该值判断语句是否执行成功)
3.ResultSet excuteQuery(String sql):执行DCL语句;
返回结果集对象;
练习:
public static void main(String[] args) { Statement stmt = null; Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); String sql = "insert into acount values(null,'wang',1500) "; //String sql2 = "update acount set balance = 1000 where id=3"; conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/qinsujie", "root", "qinsujie123"); stmt= conn.createStatement(); int count = stmt.executeUpdate(sql); System.out.println(count); if(count>0){ System.out.println("添加成功"); }else{ System.out.println("添加失败"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { if(stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } /* stmt.close(); conn.close();*/ }
ResultSet
结果集对象,封装查询结果
1.next():游标向下移动一行,判断当前行是否是最后一行末尾(返回false时没有数据);
2.getXxx(参数):获取数据;
Xxx表示数据类型;
参数:1.int :代表列的编号(从1开始);2. String : 代表列的名称;
注意:使用步骤:1.游标向下移动一行;2.判断是否有数据;3.获取数据
while(res.next()){ int id=res.getInt(1); String name = res.getString(2); String balance = res.getString(3); System.out.println("id="+id+" name="+name+" balance="+balance); }
//抽取JDBC工具类
目的:简化书写;
配置jdbc.properties文件; url=jdbc:mysql://127.0.0.1:3306/practice user=root password=qinsujie123 driver=com.mysql.jdbc.Driver
public class JDBCUtils { private static String url; private static String user; private static String password; private static String driver; /** * 文件只读取一次即可拿到这些值 */ static{ try { Properties pro = new Properties(); //获取src路径下的资源方式 ClassLoader classLoader= JDBCUtils.class.getClassLoader(); URL resourse = classLoader.getResource("jdbc.properties"); String path = resourse.getPath(); //加载文件 // pro.load(new FileReader("learn.DataBase\JDBC\src\jdbc.properties")); pro.load(new FileReader(path)); url=pro.getProperty("url"); user=pro.getProperty("user"); password=pro.getProperty("password"); driver = pro.getProperty("driver"); try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } /** * 获取连接 * 不传递参数,但是要求通用性 * 解决:配置文件 * @return 返回连接对象 */ public static Connection getConnection(){ try { return DriverManager.getConnection(url,user,password); } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 释放资源 * @param conn * @param stmt * @param res */ public static void close(Connection conn , Statement stmt , ResultSet res){ if(res!=null){ try { res.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close(Connection conn , Statement stmt ){ if (stmt!=null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
PreparedStatement
表示预编译的sql对象:参数使用?占位符替代。
1.SQL注入问题:在拼接sql时,有sql特殊的关键字参与拼接,有安全隐患;
2.解决SQL注入问题:使用PreparedStatement对象解决