目录
JDBC概念
JDBC使用步骤
JDBC常见问题
驱动版本
中文乱码
常见错误
JDBC概念JDBC(Java Database Connectivity)。但它只是规范,不做具体实现
调用方式有三种:
Statement语句、
PreparedStatement预处理语句、
CallableStatement存储过程,
推荐使用第二种PreparedStatement,防止SQL注入,其也是预编译性能高。
JDBC使用步骤导入jar包(丰富的工具类)
获取和数据库的连接(用户名、密码)
通过程序执行SQL
通过程序处理结果
idea 创建项目并导入jar包
创建stage2 Java工程创建lib目录,拷贝驱动objbc6-11.1.0.7.0到lib目录下项目引用这个外部jar包 JDBC创建及注入
//解决SQL注入攻击的方案 private static void login2() { try{ Class.forName("com.mysql.jdbc.Driver"); String url="jdbc:mysql:///cgb2104?characterEncoding=utf8"; Connection conn = DriverManager.getConnection(url, "root", "root"); // Statement st = conn.createStatement();不行,不安全,会被SQL攻击 String user = new Scanner(System.in).nextLine();//用户输入jack'# String pwd = new Scanner(System.in).nextLine(); //?叫占位符 ,SQL的骨架 String sql ="select * from user2 where name=? and password=?"; //先把SQL骨架发给数据库执行 PreparedStatement ps = conn.prepareStatement(sql); //给SQL里的? 设置参数 ps.setString(1,user);//给第一个?设置值是user ps.setString(2,pwd);//给第二个?设置值是pwd ResultSet rs = ps.executeQuery();//执行拼接好的SQL,返回结果集 if(rs.next()){ System.out.println("登录成功~"); }else{ System.out.println("登录失败~"); } ps.close(); conn.close(); }catch(Exception e){ e.printStackTrace();//有异常,直接打印异常信息 //System.out.println("执行失败。。。");//上线 } }JDBC常见问题 驱动版本
Mysql5.0x mysql-connector-java-5.1.32.jar
Mysql8.0x mysql-connector-java-8.0.21.jar
Driver变成了: com.mysql.cj.jdbc.Driver,中间多了cjurl必须加时区参数: serverTimezone=Asia/Shanghai 中文乱码
url增加参数:characterEncoding=utf8防止中文乱码
String url ="jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false";常见错误
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
错误原因:
1)jar没有导入,没有builder path
2)Class.forName("com.mysql.jdbc.Driver"); 字符串拼写错误
Unknown database mydb;
错误原因:
数据库名称拼写错误
Access denied for user ‘root123’@‘localhost’ (using password: YES)
错误原因:
数据库用户名或者密码错误
Table ‘py-school-db.mydb’ doesn’t exist
错误原因:
表不存在,也可能表名写错了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)