JDBC 连接MySQL基础的正删改
标签(空格分隔): JDBCday01 数据库的连接
what-JDBC
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
why-JDBC
同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
how -JDBC
- 加载驱动
Class.forName("com.mysql.jdbc.Driver")
注冊驱动有三种方式:
1. Class.forName(“com.mysql.jdbc.Driver”);
推荐这样的方式,不会对详细的驱动类产生依赖
2. DriverManager.registerDriver(com.mysql.jdbc.Driver);
会对详细的驱动类产生依赖
3. System.setProperty(“jdbc.drivers”, “driver1:driver2”);
尽管不会对详细的驱动类产生依赖;但注冊不太方便。所以非常少使用
- 建立连接
String url="jdbc:mysql://localhost:3306/ishopn?characterEncoding=utf8";
//指定地址和数据库默认字符集 否则或出现乱码
String user="root";//账号
String password="1234";//密码
DriverManager.getConnection(url, user, password);
- 创建运行SQL的语句(Statement)
Statement state = conn.createStatement();
- 运行语句
//增删改操作 当是0时没有执行操作 返回受影响的行数
int result = state.executeUpdate(SQL);
//查询操作 返回查询的返回集合
ResultSet rs = state.executeQuery(SQL);
- 处理运行结果(ResultSet)
rs.next())
rs.getInt(1);//下标从零开始
- 释放资源
//关闭资源
conn.close()
代码汇总
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/ishopn?characterEncoding=utf8"; //url jdbc有自己的写法 jdbc:oracl
String user="root";
String password="1234";
conn = DriverManager.getConnection(url, user, password);
防止注入攻击
String sql = "select * from `customer` where cu_id='"+ "' or 1=1 #"+" and cu_phone=123";
用上面的方法能够免密登入用Statement接受的话
所以sql提供了PreparedStatement 来阻止注入攻击
PreparedStatement ps = conn.prepareStatement(String sql);
String Query_sql = "select * from `customer` where cu_id=? and cu_phone=?";
String cu_id = "2a4e0cdd-380e-41bf-960f-f2f6d0a6ccae";
String cu_phone = "9999";
//防止注入攻击
PreparedStatement ps = conn.prepareStatement(Query_sql);
ps.setString(1, cu_id);
ps.setString(2, cu_phone);
ResultSet rs2 = ps.executeQuery();
setString的参数是?的顺序从1开始
PreparedStatement更新操作示例、
String Update_sql = "update customer set cu_phone=? where cu_id=? and cu_phone=?";
String cu_id = "2a4e0cdd-380e-41bf-960f-f2f6d0a6ccae";
String old_cu_phone = "7777";
String new_cu_phone = "9999";
//放置注入攻击
PreparedStatement ps = conn.prepareStatement(Update_sql);
ps.setString(1, new_cu_phone);
ps.setString(2, cu_id);
ps.setString(3, old_cu_phone);