JDBC
JDBC编写六步走:1、注册驱动,告诉java程序我们要链接什么数据库【mysql为案例】5.1.x驱动包中的驱动类路径:【com.mysql.jdbc.Driver】8.x.x驱动包中的驱动类路径:【com.mysql.cj.jdbc.Driver】2、创建与数据库的链接对象3、创建操作数据库对象4、操作数据库对象调用方法执行sql语句,操作数据库5、如果第4步是查询操作的话,需要进一步分析查询结果6、释放资源,关闭与数据库的链接public class JDBCDemo1 {public static void main(String[] args) throws Exception {// 注册驱动,告诉java程序我们要链接什么数据库Class.forName("com.mysql.jdbc.Driver");// 创建与数据库的链接对象// public static Connection getConnection(String url,String user, String password)/*** url: 超链接* jdbc:mysql://192.168.233.129:3306/bigdata?characterEncoding=UTF-8&useUnicode=True* username: root* password: 123456*/String url = "jdbc:mysql://192.168.233.101:3306/bigdata?characterEncoding=UTF-8&useUnicode=True&useSSL=false";String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);System.out.println("成功获取与mysql数据库的链接对象:" + conn);// 创建操作数据库对象Statement state = conn.createStatement();// 操作数据库对象调用方法执行sql语句,操作数据库// SQL - 结构化查询语言 只要是结构化数据库,基本都可以使用sql语句【mysql是其中一种】// 增删改,其它的操作// 增加
// int i = state.executeUpdate("insert into students values(1007,'李刚2',18,'男','文科一班')");
// if(i==1){
// System.out.println("插入数据成功!");
// }else {
// System.out.println("插入数据失败!");
// }// 删除
// state.executeUpdate("delete from students where id=1007");// 修改
// state.executeUpdate("update students set name='江川' where id=1006");// DQL 查询ResultSet resultSet = state.executeQuery("select t1.location as location,count(1) as counts from (select location from jd_comment where productColor='墨玉青') t1 group by t1.location order by counts desc limit 10");// resultSet.next();
// String location = resultSet.getString(1);
// String counts = resultSet.getString(2);
// System.out.println(location+": "+counts);while (resultSet.next()){//根据列索引获取元素,从左向右从1开始
// String location = resultSet.getString(1);
// String counts = resultSet.getString(2);// 根据列名获取String location = resultSet.getString("location");String counts = resultSet.getString("counts");System.out.println(location+": "+counts);}// 释放资源,关闭与数据库的链接state.close();conn.close();}
}
sql注入的问题
在执行SQL语句时是使用拼接字符串的操作 导致可以输入特定的字符串篡改逻辑导致 错误执行
解决方法:
1.创建操作对象时创建preparedStatement操作对象,定好sql语句的格式,再根据输入的内容对指定位置进行替换String sql = "select name,password from sjusers where name=? and password=?"; // ?相当于占位符preparedStatement = conn.prepareStatement(sql);preparedStatement.setString(1,name);
2.在根本上解决:禁止输入带空格的内容 将nextLine()改为next()preparedStatement.setString(2,pwd);
读取链接getProperty文件
public class MySQLTool {private static Properties prop;private static Connection conn;private MySQLTool(){}public static Connection getConnection(){try {//创建Properties对象prop = new Properties();prop.load(new BufferedReader(new FileReader("java/src/com/shujia/day17/mysql.properties")));String url = prop.getProperty("url");String username = prop.getProperty("username");String password = prop.getProperty("password");// 注册驱动,告诉java程序我们要链接什么数据库Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(url, username, password);}catch (Exception e){e.printStackTrace();}return conn;}
}